mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-11-16 16:47:51 +01:00
Compare commits
58 Commits
alpha_vers
...
reddit_rem
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
562c91acb2 | ||
|
|
484f9607b1 | ||
|
|
9149ee224c | ||
|
|
1bb1d3b9af | ||
|
|
0b76390069 | ||
|
|
5de8751079 | ||
|
|
4bfe1b0c02 | ||
|
|
15c1676d0b | ||
|
|
6d114f84fa | ||
|
|
394cff9ebe | ||
|
|
465abd4498 | ||
|
|
0178569f14 | ||
|
|
f7185445e1 | ||
|
|
d4b107bc79 | ||
|
|
fd14753a1d | ||
|
|
7cc4e93ad4 | ||
|
|
4c95404fe1 | ||
|
|
1c2212f0fe | ||
|
|
065fcedd34 | ||
|
|
3a66a79f49 | ||
|
|
907f6e92c3 | ||
|
|
426c3e6979 | ||
|
|
92292be472 | ||
|
|
3e10186c7c | ||
|
|
1974322013 | ||
|
|
a2e22bc525 | ||
|
|
7e433954c5 | ||
|
|
d47e2dac92 | ||
|
|
de3bea0729 | ||
|
|
3c91007d93 | ||
|
|
debb3e04df | ||
|
|
8c758460bc | ||
|
|
2bb1189e15 | ||
|
|
233fc38c23 | ||
|
|
215d31f8ea | ||
|
|
8ae681c753 | ||
|
|
554eb3c2fe | ||
|
|
c1f8f5a681 | ||
|
|
bb5c82aa60 | ||
|
|
72ba41c940 | ||
|
|
40b6722e66 | ||
|
|
dd3b72bc1f | ||
|
|
e9ecae117d | ||
|
|
5e4793bdaf | ||
|
|
fe351a8466 | ||
|
|
b1b12aba31 | ||
|
|
d2b95e1db6 | ||
|
|
20c317b63f | ||
|
|
f2d14a975d | ||
|
|
442310cad3 | ||
|
|
b8da5c6acb | ||
|
|
2ed15f3d5c | ||
|
|
d926fabe09 | ||
|
|
e815a1444d | ||
|
|
df81866821 | ||
|
|
497f6c79d2 | ||
|
|
6eb585800f | ||
|
|
df842d33e1 |
1
.github/CODE_OF_CONDUCT.md
vendored
1
.github/CODE_OF_CONDUCT.md
vendored
@@ -1 +0,0 @@
|
|||||||
|
|
||||||
1
.github/CONTRIBUTING.md
vendored
1
.github/CONTRIBUTING.md
vendored
@@ -1 +0,0 @@
|
|||||||
|
|
||||||
14
.github/DISCUSSION_TEMPLATE/announcements.yml
vendored
14
.github/DISCUSSION_TEMPLATE/announcements.yml
vendored
@@ -1,14 +0,0 @@
|
|||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for taking the time to read this announcement!
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: description
|
|
||||||
attributes:
|
|
||||||
label: description
|
|
||||||
description: Please describe the announcement in as much detail as possible.
|
|
||||||
placeholder: Make an announcement here...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
74
.github/DISCUSSION_TEMPLATE/ideas.yml
vendored
74
.github/DISCUSSION_TEMPLATE/ideas.yml
vendored
@@ -1,74 +0,0 @@
|
|||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Have an idea for a new feature or an improvement? Let us know here!
|
|
||||||
|
|
||||||
- type: checkboxes
|
|
||||||
id: checklist
|
|
||||||
attributes:
|
|
||||||
label: Checklist
|
|
||||||
options:
|
|
||||||
- label: I have used the search function for [open](https://github.com/Docile-Alligator/Infinity-For-Reddit/discussions/categories/ideas) **and** [closed](https://github.com/Docile-Alligator/Infinity-For-Reddit/discussions/categories/completed-ideas) ideas to see if someone else has already submitted the same request.
|
|
||||||
required: true
|
|
||||||
- label: I will describe the feature with as much detail as possible.
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for taking the time to share your idea!
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: description
|
|
||||||
attributes:
|
|
||||||
label: Description
|
|
||||||
description: Please describe your idea in as much detail as possible.
|
|
||||||
placeholder: I think it would be great if...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: alternatives
|
|
||||||
attributes:
|
|
||||||
label: Alternatives
|
|
||||||
description: Please describe any alternative solutions or features you've considered.
|
|
||||||
placeholder: I've considered...
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: additional
|
|
||||||
attributes:
|
|
||||||
label: Additional context
|
|
||||||
description: Add your use-case, screenshots, mock-up, or anything else you think might be helpful.
|
|
||||||
placeholder: I think this would be a great addition because...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: importance
|
|
||||||
attributes:
|
|
||||||
label: How important is this feature?
|
|
||||||
multiple: false
|
|
||||||
options:
|
|
||||||
- Critical
|
|
||||||
- Important
|
|
||||||
- Nice to have
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: other
|
|
||||||
attributes:
|
|
||||||
label: Anything else?
|
|
||||||
description: Is there anything else you'd like to add?
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: solution
|
|
||||||
attributes:
|
|
||||||
label: Solution
|
|
||||||
description: If you have an idea of how this can be implemented, please share it here.
|
|
||||||
placeholder: I think this could be done by...
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@@ -1,2 +0,0 @@
|
|||||||
github: Docile-Alligator
|
|
||||||
patreon: docile_alligator
|
|
||||||
94
.github/ISSUE_TEMPLATE/BUG_REPORT.yml
vendored
94
.github/ISSUE_TEMPLATE/BUG_REPORT.yml
vendored
@@ -1,94 +0,0 @@
|
|||||||
name: Bug Report
|
|
||||||
description: Create a report to help us improve existing features
|
|
||||||
labels: ['type: possible bug']
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for taking the time to fill out this bug report!
|
|
||||||
|
|
||||||
- type: checkboxes
|
|
||||||
id: checklist
|
|
||||||
attributes:
|
|
||||||
label: Checklist
|
|
||||||
options:
|
|
||||||
- label: I have used the search function for [open](https://github.com/Docile-Alligator/Infinity-For-Reddit/issues) **and** [closed](https://github.com/Docile-Alligator/Infinity-For-Reddit/issues?q=is%3Aissue+is%3Aclosed) issues to see if someone else has already submitted the same bug report.
|
|
||||||
required: true
|
|
||||||
- label: I will describe the problem with as much detail as possible.
|
|
||||||
required: true
|
|
||||||
- label: If the bug only occurs with a certain link, post, image..., I will include the URL.
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: input
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: App version
|
|
||||||
description: We need the actual version number found on the settings screen.
|
|
||||||
placeholder: x.y.z
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: source
|
|
||||||
attributes:
|
|
||||||
label: Where did you get the app from
|
|
||||||
multiple: false
|
|
||||||
options:
|
|
||||||
- Google Play
|
|
||||||
- F-Droid
|
|
||||||
- Other
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: input
|
|
||||||
id: android_version
|
|
||||||
attributes:
|
|
||||||
label: Android version
|
|
||||||
description: Please mention if you are using a custom rom!
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: input
|
|
||||||
id: device
|
|
||||||
attributes:
|
|
||||||
label: Device model
|
|
||||||
|
|
||||||
- type: input
|
|
||||||
id: first
|
|
||||||
attributes:
|
|
||||||
label: First occurred
|
|
||||||
placeholder: about x days/weeks ago
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: steps
|
|
||||||
attributes:
|
|
||||||
label: Steps to reproduce
|
|
||||||
placeholder: |
|
|
||||||
1. This
|
|
||||||
2. Then that
|
|
||||||
3. Then this
|
|
||||||
4. Etc.
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: links
|
|
||||||
attributes:
|
|
||||||
label: Example post, link, markdown...
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: expected
|
|
||||||
attributes:
|
|
||||||
label: Expected behaviour
|
|
||||||
description: After following the steps, what did you think Infinity would do?
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: current
|
|
||||||
attributes:
|
|
||||||
label: Current behaviour
|
|
||||||
description: What did Infinity do instead? Screenshots might help. Usually, you can take a screenshot of your smartphone by pressing *Power* + *Volume down* for a few seconds.
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: logs
|
|
||||||
attributes:
|
|
||||||
label: Logs
|
|
||||||
description: If you are experiencing a crash, including the stacktrace will likely get it fixed sooner.
|
|
||||||
11
.github/ISSUE_TEMPLATE/config.yml
vendored
11
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: Feature Request
|
|
||||||
url: https://github.com/Docile-Alligator/Infinity-For-Reddit/discussions/categories/ideas
|
|
||||||
about: Discuss ideas for new features of changes
|
|
||||||
- name: Questions
|
|
||||||
url: https://github.com/Docile-Alligator/Infinity-For-Reddit/discussions/categories/q-a
|
|
||||||
about: Please ask and answer questions here.
|
|
||||||
- name: Help needed
|
|
||||||
url: https://github.com/Docile-Alligator/Infinity-For-Reddit/discussions/categories/help-needed
|
|
||||||
about: Please ask for help here
|
|
||||||
23
.github/dependabot.yml
vendored
23
.github/dependabot.yml
vendored
@@ -1,23 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
# Updates for Gradle dependencies used in the app
|
|
||||||
- package-ecosystem: gradle
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
commit-message:
|
|
||||||
prefix: "⬆[Gradle]"
|
|
||||||
reviewers:
|
|
||||||
- "Wladefant"
|
|
||||||
- "Docile-Alligator"
|
|
||||||
|
|
||||||
# Updates for GitHub Actions used in the repository
|
|
||||||
- package-ecosystem: github-actions
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
commit-message:
|
|
||||||
prefix: "⬆[GitHub Actions]"
|
|
||||||
reviewers:
|
|
||||||
- "Wladefant"
|
|
||||||
- "Docile-Alligator"
|
|
||||||
32
.github/workflows/build.yml
vendored
32
.github/workflows/build.yml
vendored
@@ -1,32 +0,0 @@
|
|||||||
name: Build
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
pull_request:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set-up JDK 11
|
|
||||||
uses: actions/setup-java@v3
|
|
||||||
with:
|
|
||||||
java-version: '11'
|
|
||||||
distribution: 'temurin'
|
|
||||||
|
|
||||||
- name: Setup and build with Gradle
|
|
||||||
uses: gradle/gradle-build-action@v2
|
|
||||||
with:
|
|
||||||
arguments: build -x lint
|
|
||||||
|
|
||||||
- name: Upload apk
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: Infinity-${{github.sha}}
|
|
||||||
path: app/build/outputs/apk/
|
|
||||||
if-no-files-found: error
|
|
||||||
34
.github/workflows/codeql-analysis.yml
vendored
34
.github/workflows/codeql-analysis.yml
vendored
@@ -1,34 +0,0 @@
|
|||||||
name: CodeQL
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 12 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Analyze:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
security-events: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
|
||||||
uses: github/codeql-action/init@v2
|
|
||||||
with:
|
|
||||||
languages: java
|
|
||||||
|
|
||||||
- name: Autobuild
|
|
||||||
uses: github/codeql-action/autobuild@v2
|
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
|
||||||
uses: github/codeql-action/analyze@v2
|
|
||||||
@@ -8,8 +8,8 @@ android {
|
|||||||
applicationId "eu.toldi.infinityforlemmy"
|
applicationId "eu.toldi.infinityforlemmy"
|
||||||
minSdk 21
|
minSdk 21
|
||||||
targetSdk 33
|
targetSdk 33
|
||||||
versionCode 122
|
versionCode 126
|
||||||
versionName "0.0.2"
|
versionName "0.0.6"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
javaCompileOptions {
|
javaCompileOptions {
|
||||||
annotationProcessorOptions {
|
annotationProcessorOptions {
|
||||||
@@ -52,6 +52,10 @@ android {
|
|||||||
buildFeatures {
|
buildFeatures {
|
||||||
viewBinding true
|
viewBinding true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
packagingOptions {
|
||||||
|
doNotStrip '**/*.so'
|
||||||
|
}
|
||||||
namespace 'eu.toldi.infinityforlemmy'
|
namespace 'eu.toldi.infinityforlemmy'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -291,18 +291,70 @@
|
|||||||
|
|
||||||
<data android:scheme="https" />
|
<data android:scheme="https" />
|
||||||
<data android:scheme="http" />
|
<data android:scheme="http" />
|
||||||
<data android:host="www.reddit.com" />
|
<data android:host="lemmy.world" />
|
||||||
<data android:host="reddit.com" />
|
<data android:host="lemmy.ml" />
|
||||||
<data android:host="v.redd.it" />
|
<data android:host="beehaw.org" />
|
||||||
<data android:host="amp.reddit.com" />
|
<data android:host="lemm.ee" />
|
||||||
<data android:host="m.reddit.com" />
|
<data android:host="sh.itjust.works" />
|
||||||
<data android:host="old.reddit.com" />
|
<data android:host="feddit.de" />
|
||||||
<data android:host="new.reddit.com" />
|
<data android:host="lemmy.fmhy.ml" />
|
||||||
<data android:host="np.reddit.com" />
|
<data android:host="lemmy.ca" />
|
||||||
<data android:host="reddit.app.link" />
|
<data android:host="www.hexbear.net" />
|
||||||
<data android:host="redd.it" />
|
<data android:host="programming.dev" />
|
||||||
<data android:host="s.reddit.com" />
|
<data android:host="lemmy.dbzer0.com" />
|
||||||
<data android:host="click.redditmail.com" />
|
<data android:host="lemmy.blahaj.zone" />
|
||||||
|
<data android:host="lemmy.one" />
|
||||||
|
<data android:host="vlemmy.net" />
|
||||||
|
<data android:host="lemmy.sdf.org" />
|
||||||
|
<data android:host="discuss.tchncs.de" />
|
||||||
|
<data android:host="lemmygrad.ml" />
|
||||||
|
<data android:host="sopuli.xyz" />
|
||||||
|
<data android:host="reddthat.com" />
|
||||||
|
<data android:host="aussie.zone" />
|
||||||
|
<data android:host="feddit.uk" />
|
||||||
|
<data android:host="feddit.nl" />
|
||||||
|
<data android:host="midwest.social" />
|
||||||
|
<data android:host="infosec.pub" />
|
||||||
|
<data android:host="feddit.it" />
|
||||||
|
<data android:host="ttrpg.network" />
|
||||||
|
<data android:host="pawb.social" />
|
||||||
|
<data android:host="lemmy.zip" />
|
||||||
|
<data android:host="startrek.website" />
|
||||||
|
<data android:host="burggit.moe" />
|
||||||
|
<data android:host="slrpnk.net" />
|
||||||
|
<data android:host="mander.xyz" />
|
||||||
|
<data android:host="lemmy.eco.br" />
|
||||||
|
<data android:host="lemmy.nz" />
|
||||||
|
<data android:host="dormi.zone" />
|
||||||
|
<data android:host="exploding-heads.com" />
|
||||||
|
<data android:host="delraymisfitsboard.com" />
|
||||||
|
<data android:host="monyet.cc" />
|
||||||
|
<data android:host="feddit.dk" />
|
||||||
|
<data android:host="lemmy.pt" />
|
||||||
|
<data android:host="szmer.info" />
|
||||||
|
<data android:host="yiffit.net" />
|
||||||
|
<data android:host="geddit.social" />
|
||||||
|
<data android:host="waveform.social" />
|
||||||
|
<data android:host="discuss.online" />
|
||||||
|
<data android:host="monero.town" />
|
||||||
|
<data android:host="feddit.cl" />
|
||||||
|
<data android:host="iusearchlinux.fyi" />
|
||||||
|
<data android:host="dataterm.digital" />
|
||||||
|
<data android:host="lemmy.whynotdrs.org" />
|
||||||
|
<data android:host="feddit.ch" />
|
||||||
|
<data android:host="enterprise.lemmy.ml" />
|
||||||
|
<data android:host="lemmy.run" />
|
||||||
|
<data android:host="jlai.lu" />
|
||||||
|
<data android:host="pornlemmy.com" />
|
||||||
|
<data android:host="lemdro.id" />
|
||||||
|
<data android:host="lemmyrs.org" />
|
||||||
|
<data android:host="latte.isnot.coffee" />
|
||||||
|
<data android:host="feddit.nu" />
|
||||||
|
<data android:host="lemmy.film" />
|
||||||
|
<data android:host="bakchodi.org" />
|
||||||
|
<data android:host="mujico.org" />
|
||||||
|
<data android:host="lemmy.studio" />
|
||||||
|
<data android:host="lemmy.toldi.eu" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
|||||||
@@ -307,6 +307,7 @@ public interface AppComponent {
|
|||||||
|
|
||||||
void inject(MorePostsInfoFragment morePostsInfoFragment);
|
void inject(MorePostsInfoFragment morePostsInfoFragment);
|
||||||
|
|
||||||
|
|
||||||
@Component.Factory
|
@Component.Factory
|
||||||
interface Factory {
|
interface Factory {
|
||||||
AppComponent create(@BindsInstance Application application);
|
AppComponent create(@BindsInstance Application application);
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ import dagger.Module;
|
|||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.LoopAvailableExoCreator;
|
import eu.toldi.infinityforlemmy.customviews.LoopAvailableExoCreator;
|
||||||
|
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||||
|
import eu.toldi.infinityforlemmy.post.ObjectResolver;
|
||||||
import eu.toldi.infinityforlemmy.utils.CustomThemeSharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.CustomThemeSharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.videoautoplay.Config;
|
import eu.toldi.infinityforlemmy.videoautoplay.Config;
|
||||||
@@ -202,4 +204,16 @@ abstract class AppModule {
|
|||||||
static Executor provideExecutor() {
|
static Executor provideExecutor() {
|
||||||
return Executors.newFixedThreadPool(4);
|
return Executors.newFixedThreadPool(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
static ObjectResolver provideObjectResolver(@Named("no_oauth") RetrofitHolder retrofitHolder) {
|
||||||
|
return new ObjectResolver(retrofitHolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
static MarkPostAsRead provideMarkPostAsRead(@Named("no_oauth") RetrofitHolder retrofitHolder) {
|
||||||
|
return new MarkPostAsRead(retrofitHolder);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ import androidx.annotation.NonNull;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.DeleteCommentDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.DeletePostDTO;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
@@ -13,10 +15,11 @@ import retrofit2.Response;
|
|||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class DeleteThing {
|
public class DeleteThing {
|
||||||
public static void delete(Retrofit oauthRetrofit, String fullname, String accessToken, DeleteThingListener deleteThingListener) {
|
|
||||||
|
public static void deletePost(Retrofit retrofit, int post_id, String accessToken, DeleteThingListener deleteThingListener) {
|
||||||
Map<String, String> params = new HashMap<>();
|
Map<String, String> params = new HashMap<>();
|
||||||
params.put(APIUtils.ID_KEY, fullname);
|
params.put(APIUtils.ID_KEY, String.valueOf(post_id));
|
||||||
oauthRetrofit.create(RedditAPI.class).delete(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback<String>() {
|
retrofit.create(LemmyAPI.class).postDelete(new DeletePostDTO(post_id, true, accessToken)).enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
@@ -33,6 +36,27 @@ public class DeleteThing {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void deleteComment(Retrofit retrofit, int comment_id, String accessToken, DeleteThingListener deleteThingListener) {
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
params.put(APIUtils.ID_KEY, String.valueOf(comment_id));
|
||||||
|
retrofit.create(LemmyAPI.class).commentDelete(new DeleteCommentDTO(comment_id, true, accessToken)).enqueue(new Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
|
if (response.isSuccessful()) {
|
||||||
|
deleteThingListener.deleteSuccess();
|
||||||
|
} else {
|
||||||
|
deleteThingListener.deleteFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
|
deleteThingListener.deleteFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public interface DeleteThingListener {
|
public interface DeleteThingListener {
|
||||||
void deleteSuccess();
|
void deleteSuccess();
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ import android.app.PendingIntent;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.app.NotificationCompat;
|
import androidx.core.app.NotificationCompat;
|
||||||
import androidx.core.app.NotificationManagerCompat;
|
import androidx.core.app.NotificationManagerCompat;
|
||||||
import androidx.work.Worker;
|
import androidx.work.Worker;
|
||||||
@@ -28,13 +30,11 @@ import javax.inject.Named;
|
|||||||
import eu.toldi.infinityforlemmy.account.Account;
|
import eu.toldi.infinityforlemmy.account.Account;
|
||||||
import eu.toldi.infinityforlemmy.activities.InboxActivity;
|
import eu.toldi.infinityforlemmy.activities.InboxActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||||
|
import eu.toldi.infinityforlemmy.comment.ParseComment;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
import eu.toldi.infinityforlemmy.message.CommentInteraction;
|
||||||
import eu.toldi.infinityforlemmy.message.Message;
|
|
||||||
import eu.toldi.infinityforlemmy.message.ParseMessage;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.NotificationUtils;
|
import eu.toldi.infinityforlemmy.utils.NotificationUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@@ -88,9 +88,16 @@ public class PullNotificationWorker extends Worker {
|
|||||||
|
|
||||||
if (response != null && response.isSuccessful() && response.body() != null) {
|
if (response != null && response.isSuccessful() && response.body() != null) {
|
||||||
String responseBody = response.body();
|
String responseBody = response.body();
|
||||||
JSONArray messageArray = new JSONObject(responseBody).getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
|
JSONArray messageArray = new JSONObject(responseBody).getJSONArray("replies");
|
||||||
ArrayList<Message> messages = ParseMessage.parseMessages(messageArray,
|
List<CommentInteraction> messages = new ArrayList<>();
|
||||||
context.getResources().getConfiguration().locale, FetchMessage.MESSAGE_TYPE_NOTIFICATION);
|
for (int i = 0; i < messageArray.length(); i++) {
|
||||||
|
JSONObject commentInteractionObject = messageArray.getJSONObject(i);
|
||||||
|
Comment comment = ParseComment.parseSingleComment(commentInteractionObject);
|
||||||
|
boolean isRead = !commentInteractionObject.getJSONObject("comment_reply").getBoolean("read");
|
||||||
|
int id = commentInteractionObject.getJSONObject("comment_reply").getInt("id");
|
||||||
|
messages.add(new CommentInteraction(id, comment, isRead));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!messages.isEmpty()) {
|
if (!messages.isEmpty()) {
|
||||||
NotificationCompat.Builder summaryBuilder = NotificationUtils.buildSummaryNotification(context,
|
NotificationCompat.Builder summaryBuilder = NotificationUtils.buildSummaryNotification(context,
|
||||||
@@ -110,77 +117,36 @@ public class PullNotificationWorker extends Worker {
|
|||||||
|
|
||||||
int pendingIntentFlags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE : PendingIntent.FLAG_UPDATE_CURRENT;
|
int pendingIntentFlags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE : PendingIntent.FLAG_UPDATE_CURRENT;
|
||||||
for (int messageIndex = messageSize - 1; messageIndex >= 0; messageIndex--) {
|
for (int messageIndex = messageSize - 1; messageIndex >= 0; messageIndex--) {
|
||||||
Message message = messages.get(messageIndex);
|
CommentInteraction message = messages.get(messageIndex);
|
||||||
if (message.getTimeUTC() <= lastNotificationTime) {
|
if (message.getComment().getCommentTimeMillis() <= lastNotificationTime) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
hasValidMessage = true;
|
hasValidMessage = true;
|
||||||
|
|
||||||
inboxStyle.addLine(message.getAuthor() + " " + message.getBody());
|
inboxStyle.addLine(message.getComment().getAuthorQualifiedName() + " " + message.getComment().getCommentMarkdown());
|
||||||
|
|
||||||
|
|
||||||
|
String title = message.getComment().getAuthorQualifiedName();
|
||||||
|
String summary = message.getComment().getCommunityQualifiedName();
|
||||||
|
|
||||||
String kind = message.getKind();
|
|
||||||
String title;
|
|
||||||
String summary;
|
|
||||||
if (kind.equals(Message.TYPE_COMMENT) || kind.equals(Message.TYPE_LINK)) {
|
|
||||||
title = message.getAuthor();
|
|
||||||
summary = message.getSubject().substring(0, 1).toUpperCase() + message.getSubject().substring(1);
|
|
||||||
} else {
|
|
||||||
title = message.getTitle() == null || message.getTitle().equals("") ? message.getSubject() : message.getTitle();
|
|
||||||
if (kind.equals(Message.TYPE_ACCOUNT)) {
|
|
||||||
summary = context.getString(R.string.notification_summary_account);
|
|
||||||
} else if (kind.equals(Message.TYPE_MESSAGE)) {
|
|
||||||
summary = context.getString(R.string.notification_summary_message);
|
|
||||||
} else if (kind.equals(Message.TYPE_SUBREDDIT)) {
|
|
||||||
summary = context.getString(R.string.notification_summary_community);
|
|
||||||
} else {
|
|
||||||
summary = context.getString(R.string.notification_summary_award);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NotificationCompat.Builder builder = NotificationUtils.buildNotification(notificationManager,
|
NotificationCompat.Builder builder = NotificationUtils.buildNotification(notificationManager,
|
||||||
context, title, message.getBody(), summary,
|
context, title, message.getComment().getCommentMarkdown(), summary,
|
||||||
NotificationUtils.CHANNEL_ID_NEW_MESSAGES,
|
NotificationUtils.CHANNEL_ID_NEW_MESSAGES,
|
||||||
NotificationUtils.CHANNEL_NEW_MESSAGES,
|
NotificationUtils.CHANNEL_NEW_MESSAGES,
|
||||||
NotificationUtils.getAccountGroupName(accountName), color);
|
NotificationUtils.getAccountGroupName(accountName), color);
|
||||||
|
|
||||||
if (kind.equals(Message.TYPE_COMMENT)) {
|
|
||||||
Intent intent = new Intent(context, LinkResolverActivity.class);
|
Intent intent = new Intent(context, LinkResolverActivity.class);
|
||||||
Uri uri = Uri.parse(message.getContext());
|
Uri uri = Uri.parse(message.getComment().getPermalink());
|
||||||
intent.setData(uri);
|
intent.setData(uri);
|
||||||
intent.putExtra(LinkResolverActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
intent.putExtra(LinkResolverActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
||||||
intent.putExtra(LinkResolverActivity.EXTRA_MESSAGE_FULLNAME, message.getFullname());
|
intent.putExtra(LinkResolverActivity.EXTRA_MESSAGE_FULLNAME, message.getId());
|
||||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, accountIndex * 6, intent, pendingIntentFlags);
|
PendingIntent pendingIntent = PendingIntent.getActivity(context, accountIndex * 6, intent, pendingIntentFlags);
|
||||||
builder.setContentIntent(pendingIntent);
|
builder.setContentIntent(pendingIntent);
|
||||||
} else if (kind.equals(Message.TYPE_ACCOUNT)) {
|
|
||||||
Intent intent = new Intent(context, InboxActivity.class);
|
if (ActivityCompat.checkSelfPermission(this.getApplicationContext(), android.Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
|
||||||
intent.putExtra(InboxActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
return Result.failure();
|
||||||
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 1, intent, pendingIntentFlags);
|
|
||||||
builder.setContentIntent(summaryPendingIntent);
|
|
||||||
} else if (kind.equals(Message.TYPE_LINK)) {
|
|
||||||
Intent intent = new Intent(context, LinkResolverActivity.class);
|
|
||||||
Uri uri = Uri.parse(message.getContext());
|
|
||||||
intent.setData(uri);
|
|
||||||
intent.putExtra(LinkResolverActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
|
||||||
intent.putExtra(LinkResolverActivity.EXTRA_MESSAGE_FULLNAME, message.getFullname());
|
|
||||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 2, intent, pendingIntentFlags);
|
|
||||||
builder.setContentIntent(pendingIntent);
|
|
||||||
} else if (kind.equals(Message.TYPE_MESSAGE)) {
|
|
||||||
Intent intent = new Intent(context, InboxActivity.class);
|
|
||||||
intent.putExtra(InboxActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
|
||||||
intent.putExtra(InboxActivity.EXTRA_VIEW_MESSAGE, true);
|
|
||||||
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 3, intent, pendingIntentFlags);
|
|
||||||
builder.setContentIntent(summaryPendingIntent);
|
|
||||||
} else if (kind.equals(Message.TYPE_SUBREDDIT)) {
|
|
||||||
Intent intent = new Intent(context, InboxActivity.class);
|
|
||||||
intent.putExtra(InboxActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
|
||||||
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 4, intent, pendingIntentFlags);
|
|
||||||
builder.setContentIntent(summaryPendingIntent);
|
|
||||||
} else {
|
|
||||||
Intent intent = new Intent(context, InboxActivity.class);
|
|
||||||
intent.putExtra(InboxActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
|
||||||
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 5, intent, pendingIntentFlags);
|
|
||||||
builder.setContentIntent(summaryPendingIntent);
|
|
||||||
}
|
}
|
||||||
notificationManager.notify(NotificationUtils.getNotificationIdUnreadMessage(accountIndex, messageIndex), builder.build());
|
notificationManager.notify(NotificationUtils.getNotificationIdUnreadMessage(accountIndex, messageIndex), builder.build());
|
||||||
}
|
}
|
||||||
@@ -216,10 +182,7 @@ public class PullNotificationWorker extends Worker {
|
|||||||
if (retryCount < 0) {
|
if (retryCount < 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Call<String> call = mRetrofit.getRetrofit().create(LemmyAPI.class).userReplies("New", 1, 25, true, account.getAccessToken());
|
||||||
Call<String> call = mOauthWithoutAuthenticatorRetrofit.create(RedditAPI.class)
|
|
||||||
.getMessages(APIUtils.getOAuthHeader(account.getAccessToken()),
|
|
||||||
FetchMessage.WHERE_UNREAD, null);
|
|
||||||
Response<String> response = call.execute();
|
Response<String> response = call.execute();
|
||||||
|
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import android.view.Menu;
|
|||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@@ -40,6 +41,7 @@ import eu.toldi.infinityforlemmy.events.ChangeNSFWEvent;
|
|||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.fragments.CommentsListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.CommentsListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||||
@@ -64,10 +66,15 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
|||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
MarkPostAsRead markPostAsRead;
|
||||||
private FragmentManager fragmentManager;
|
private FragmentManager fragmentManager;
|
||||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
|
|
||||||
|
private String mAccountQualifiedName;
|
||||||
private PostLayoutBottomSheetFragment postLayoutBottomSheetFragment;
|
private PostLayoutBottomSheetFragment postLayoutBottomSheetFragment;
|
||||||
private ActivityAccountSavedThingBinding binding;
|
private ActivityAccountSavedThingBinding binding;
|
||||||
|
|
||||||
@@ -116,6 +123,7 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
|||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
|
|
||||||
initializeViewPager();
|
initializeViewPager();
|
||||||
}
|
}
|
||||||
@@ -249,7 +257,17 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markPostAsRead(Post post) {
|
public void markPostAsRead(Post post) {
|
||||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
markPostAsRead.markPostAsRead(post.getId(), mAccessToken, new MarkPostAsRead.MarkPostAsReadListener() {
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadSuccess() {
|
||||||
|
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadFailed() {
|
||||||
|
Toast.makeText(AccountSavedThingActivity.this, R.string.mark_post_as_read_failed, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private class SectionsPagerAdapter extends FragmentStateAdapter {
|
private class SectionsPagerAdapter extends FragmentStateAdapter {
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ import androidx.viewpager2.widget.ViewPager2;
|
|||||||
import com.google.android.material.appbar.AppBarLayout;
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
|
import com.google.android.material.shape.CornerFamily;
|
||||||
|
import com.google.android.material.shape.MaterialShapeDrawable;
|
||||||
|
import com.google.android.material.shape.ShapeAppearanceModel;
|
||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@@ -377,9 +380,18 @@ public abstract class BaseActivity extends AppCompatActivity implements CustomFo
|
|||||||
button.setTextColor(customThemeWrapper.getFABIconColor());
|
button.setTextColor(customThemeWrapper.getFABIconColor());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void applyFABTheme(FloatingActionButton fab) {
|
protected void applyFABTheme(FloatingActionButton fab, boolean isCircular) {
|
||||||
fab.setBackgroundTintList(ColorStateList.valueOf(customThemeWrapper.getColorAccent()));
|
fab.setBackgroundTintList(ColorStateList.valueOf(customThemeWrapper.getColorAccent()));
|
||||||
fab.setImageTintList(ColorStateList.valueOf(customThemeWrapper.getFABIconColor()));
|
fab.setImageTintList(ColorStateList.valueOf(customThemeWrapper.getFABIconColor()));
|
||||||
|
if (isCircular) {
|
||||||
|
ShapeAppearanceModel shapeAppearanceModel = ShapeAppearanceModel.builder()
|
||||||
|
.setAllCorners(CornerFamily.ROUNDED, 100) // Adjust the radius value to control the roundness
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// Apply the circular shape to the FAB
|
||||||
|
MaterialShapeDrawable shapeDrawable = new MaterialShapeDrawable(shapeAppearanceModel);
|
||||||
|
fab.setShapeAppearanceModel(shapeAppearanceModel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void fixViewPager2Sensitivity(ViewPager2 viewPager2) {
|
protected void fixViewPager2Sensitivity(ViewPager2 viewPager2) {
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeViewModel;
|
|||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.events.RecreateActivityEvent;
|
import eu.toldi.infinityforlemmy.events.RecreateActivityEvent;
|
||||||
import eu.toldi.infinityforlemmy.utils.CustomThemeSharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.CustomThemeSharedPreferencesUtils;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
|
|
||||||
public class CustomThemeListingActivity extends BaseActivity implements
|
public class CustomThemeListingActivity extends BaseActivity implements
|
||||||
@@ -154,7 +155,7 @@ public class CustomThemeListingActivity extends BaseActivity implements
|
|||||||
@Override
|
@Override
|
||||||
protected void applyCustomTheme() {
|
protected void applyCustomTheme() {
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||||
applyFABTheme(fab);
|
applyFABTheme(fab, sharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,17 +3,20 @@ package eu.toldi.infinityforlemmy.activities;
|
|||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
|
import android.text.Editable;
|
||||||
|
import android.text.TextWatcher;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.TextView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@@ -23,18 +26,22 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|||||||
import androidx.core.content.FileProvider;
|
import androidx.core.content.FileProvider;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.bumptech.glide.RequestManager;
|
||||||
import com.google.android.material.appbar.AppBarLayout;
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
|
import com.google.android.material.button.MaterialButton;
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -48,14 +55,16 @@ import eu.toldi.infinityforlemmy.RetrofitHolder;
|
|||||||
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
|
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
|
||||||
import eu.toldi.infinityforlemmy.UploadedImage;
|
import eu.toldi.infinityforlemmy.UploadedImage;
|
||||||
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
|
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.EditPostDTO;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.UploadImageUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
@@ -64,16 +73,19 @@ import retrofit2.Retrofit;
|
|||||||
|
|
||||||
public class EditPostActivity extends BaseActivity implements UploadImageEnabledActivity {
|
public class EditPostActivity extends BaseActivity implements UploadImageEnabledActivity {
|
||||||
|
|
||||||
public static final String EXTRA_TITLE = "ET";
|
public static final String EXTRA_DATA = "ED";
|
||||||
public static final String EXTRA_CONTENT = "EC";
|
|
||||||
public static final String EXTRA_FULLNAME = "EF";
|
|
||||||
|
|
||||||
|
|
||||||
|
private static final int UPLOAD_IMAGE_REQUEST_CODE = 1;
|
||||||
private static final int PICK_IMAGE_REQUEST_CODE = 100;
|
private static final int PICK_IMAGE_REQUEST_CODE = 100;
|
||||||
private static final int CAPTURE_IMAGE_REQUEST_CODE = 200;
|
private static final int CAPTURE_IMAGE_REQUEST_CODE = 200;
|
||||||
private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300;
|
private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300;
|
||||||
|
|
||||||
private static final String UPLOADED_IMAGES_STATE = "UIS";
|
private static final String UPLOADED_IMAGES_STATE = "UIS";
|
||||||
|
|
||||||
|
private static final String picturePattern = "https:\\/\\/[^\\/]+\\/pictrs\\/image\\/([a-f\\d-]+\\.jpeg)";
|
||||||
|
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_edit_post_activity)
|
@BindView(R.id.coordinator_layout_edit_post_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@BindView(R.id.appbar_layout_edit_post_activity)
|
@BindView(R.id.appbar_layout_edit_post_activity)
|
||||||
@@ -81,13 +93,22 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
@BindView(R.id.toolbar_edit_post_activity)
|
@BindView(R.id.toolbar_edit_post_activity)
|
||||||
Toolbar toolbar;
|
Toolbar toolbar;
|
||||||
@BindView(R.id.post_title_text_view_edit_post_activity)
|
@BindView(R.id.post_title_text_view_edit_post_activity)
|
||||||
TextView titleTextView;
|
EditText titleEditText;
|
||||||
@BindView(R.id.divider_edit_post_activity)
|
@BindView(R.id.divider_edit_post_activity)
|
||||||
View divider;
|
View divider;
|
||||||
@BindView(R.id.post_text_content_edit_text_edit_post_activity)
|
@BindView(R.id.post_text_content_edit_text_edit_post_activity)
|
||||||
EditText contentEditText;
|
EditText contentEditText;
|
||||||
@BindView(R.id.markdown_bottom_bar_recycler_view_edit_post_activity)
|
@BindView(R.id.markdown_bottom_bar_recycler_view_edit_post_activity)
|
||||||
RecyclerView markdownBottomBarRecyclerView;
|
RecyclerView markdownBottomBarRecyclerView;
|
||||||
|
@BindView(R.id.post_link_edit_text_post_edit_activity)
|
||||||
|
EditText linkEditText;
|
||||||
|
|
||||||
|
@BindView(R.id.upload_image_button_post_edit_activity)
|
||||||
|
MaterialButton uploadImageButton;
|
||||||
|
|
||||||
|
@BindView(R.id.image_view_post_edit_activity)
|
||||||
|
ImageView imageView;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@Named("no_oauth")
|
@Named("no_oauth")
|
||||||
RetrofitHolder mRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
@@ -104,13 +125,16 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
private String mFullName;
|
private Post mPost;
|
||||||
|
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mPostContent;
|
|
||||||
private boolean isSubmitting = false;
|
private boolean isSubmitting = false;
|
||||||
private Uri capturedImageUri;
|
private Uri capturedImageUri;
|
||||||
private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
|
private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
private RequestManager mGlide;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
@@ -138,11 +162,49 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mFullName = getIntent().getStringExtra(EXTRA_FULLNAME);
|
mPost = getIntent().getParcelableExtra(EXTRA_DATA);
|
||||||
|
if (mPost == null) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
titleTextView.setText(getIntent().getStringExtra(EXTRA_TITLE));
|
titleEditText.setText(mPost.getTitle());
|
||||||
mPostContent = getIntent().getStringExtra(EXTRA_CONTENT);
|
contentEditText.setText(mPost.getSelfText());
|
||||||
contentEditText.setText(mPostContent);
|
linkEditText.setText(mPost.getUrl());
|
||||||
|
|
||||||
|
mGlide = Glide.with(this);
|
||||||
|
|
||||||
|
if (mPost.getUrl() != null && mPost.getUrl().matches(picturePattern)) {
|
||||||
|
loadImage();
|
||||||
|
}
|
||||||
|
|
||||||
|
linkEditText.addTextChangedListener(new TextWatcher() {
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||||
|
if (charSequence.toString().matches(picturePattern)) {
|
||||||
|
loadImage();
|
||||||
|
} else {
|
||||||
|
uploadImageButton.setVisibility(View.VISIBLE);
|
||||||
|
imageView.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable editable) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
uploadImageButton.setOnClickListener(view -> {
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setType("image/*");
|
||||||
|
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||||
|
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_from_gallery)), UPLOAD_IMAGE_REQUEST_CODE);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
uploadedImages = savedInstanceState.getParcelableArrayList(UPLOADED_IMAGES_STATE);
|
uploadedImages = savedInstanceState.getParcelableArrayList(UPLOADED_IMAGES_STATE);
|
||||||
@@ -190,18 +252,27 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
protected void applyCustomTheme() {
|
protected void applyCustomTheme() {
|
||||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
|
||||||
titleTextView.setTextColor(mCustomThemeWrapper.getPostTitleColor());
|
titleEditText.setTextColor(mCustomThemeWrapper.getPostTitleColor());
|
||||||
divider.setBackgroundColor(mCustomThemeWrapper.getPostTitleColor());
|
divider.setBackgroundColor(mCustomThemeWrapper.getPostTitleColor());
|
||||||
contentEditText.setTextColor(mCustomThemeWrapper.getPostContentColor());
|
contentEditText.setTextColor(mCustomThemeWrapper.getPostContentColor());
|
||||||
|
linkEditText.setTextColor(mCustomThemeWrapper.getPostContentColor());
|
||||||
|
|
||||||
|
uploadImageButton.setTextColor(mCustomThemeWrapper.getButtonTextColor());
|
||||||
|
uploadImageButton.setBackgroundColor(mCustomThemeWrapper.getColorPrimaryLightTheme());
|
||||||
if (titleTypeface != null) {
|
if (titleTypeface != null) {
|
||||||
titleTextView.setTypeface(titleTypeface);
|
titleEditText.setTypeface(titleTypeface);
|
||||||
}
|
}
|
||||||
if (contentTypeface != null) {
|
if (contentTypeface != null) {
|
||||||
contentEditText.setTypeface(contentTypeface);
|
contentEditText.setTypeface(contentTypeface);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadImage() {
|
||||||
|
uploadImageButton.setVisibility(View.GONE);
|
||||||
|
imageView.setVisibility(View.VISIBLE);
|
||||||
|
mGlide.load(mPost.getUrl()).into(imageView);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
@@ -237,21 +308,19 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
isSubmitting = true;
|
isSubmitting = true;
|
||||||
|
|
||||||
Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show();
|
Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show();
|
||||||
|
mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), titleEditText.getText().toString(), linkEditText.getText().toString(), contentEditText.getText().toString(), mPost.isNSFW(), null, mAccessToken))
|
||||||
Map<String, String> params = new HashMap<>();
|
|
||||||
params.put(APIUtils.THING_ID_KEY, mFullName);
|
|
||||||
params.put(APIUtils.TEXT_KEY, contentEditText.getText().toString());
|
|
||||||
|
|
||||||
mRetrofit.getRetrofit().create(RedditAPI.class)
|
|
||||||
.editPostOrComment(APIUtils.getOAuthHeader(mAccessToken), params)
|
|
||||||
.enqueue(new Callback<String>() {
|
.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
isSubmitting = false;
|
isSubmitting = false;
|
||||||
|
if (response.isSuccessful()) {
|
||||||
Toast.makeText(EditPostActivity.this, R.string.edit_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(EditPostActivity.this, R.string.edit_success, Toast.LENGTH_SHORT).show();
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
setResult(RESULT_OK, returnIntent);
|
setResult(RESULT_OK, returnIntent);
|
||||||
finish();
|
finish();
|
||||||
|
} else {
|
||||||
|
Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -275,6 +344,39 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
}
|
}
|
||||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||||
mAccessToken, contentEditText, coordinatorLayout, data.getData(), uploadedImages);
|
mAccessToken, contentEditText, coordinatorLayout, data.getData(), uploadedImages);
|
||||||
|
} else if (requestCode == UPLOAD_IMAGE_REQUEST_CODE) {
|
||||||
|
if (data == null) {
|
||||||
|
Snackbar.make(coordinatorLayout, R.string.error_getting_image, Snackbar.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Toast.makeText(this, R.string.uploading_image, Toast.LENGTH_SHORT).show();
|
||||||
|
Handler handler = new Handler();
|
||||||
|
Uri imageUri = data.getData();
|
||||||
|
mExecutor.execute(() -> {
|
||||||
|
try {
|
||||||
|
Bitmap bitmap = Glide.with(this).asBitmap().load(imageUri).submit().get();
|
||||||
|
String imageUrlOrError = UploadImageUtils.uploadImage(mRetrofit, mAccessToken, bitmap);
|
||||||
|
handler.post(() -> {
|
||||||
|
if (imageUrlOrError != null && !imageUrlOrError.startsWith("Error: ")) {
|
||||||
|
String fileName = Utils.getFileName(this, imageUri);
|
||||||
|
if (fileName == null) {
|
||||||
|
fileName = imageUrlOrError;
|
||||||
|
}
|
||||||
|
mPost.setUrl(imageUrlOrError);
|
||||||
|
linkEditText.setText(imageUrlOrError);
|
||||||
|
Snackbar.make(coordinatorLayout, R.string.upload_image_success, Snackbar.LENGTH_LONG).show();
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this, R.string.upload_image_failed, Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
handler.post(() -> Toast.makeText(this, R.string.get_image_bitmap_failed, Toast.LENGTH_LONG).show());
|
||||||
|
} catch (XmlPullParserException | JSONException | IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
handler.post(() -> Toast.makeText(this, R.string.error_processing_image, Toast.LENGTH_LONG).show());
|
||||||
|
}
|
||||||
|
});
|
||||||
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
|
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
|
||||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||||
mAccessToken, contentEditText, coordinatorLayout, capturedImageUri, uploadedImages);
|
mAccessToken, contentEditText, coordinatorLayout, capturedImageUri, uploadedImages);
|
||||||
@@ -282,6 +384,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
editPost();
|
editPost();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -305,7 +408,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
if (isSubmitting) {
|
if (isSubmitting) {
|
||||||
promptAlertDialog(R.string.exit_when_submit, R.string.exit_when_edit_post_detail);
|
promptAlertDialog(R.string.exit_when_submit, R.string.exit_when_edit_post_detail);
|
||||||
} else {
|
} else {
|
||||||
if (contentEditText.getText().toString().equals(mPostContent)) {
|
if (contentEditText.getText().toString().equals(mPost.getSelfText())) {
|
||||||
finish();
|
finish();
|
||||||
} else {
|
} else {
|
||||||
promptAlertDialog(R.string.discard, R.string.discard_detail);
|
promptAlertDialog(R.string.discard, R.string.discard_detail);
|
||||||
|
|||||||
@@ -103,6 +103,8 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
|||||||
public SubredditViewModel mSubredditViewModel;
|
public SubredditViewModel mSubredditViewModel;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
|
|
||||||
|
private String mAccountQualifiedName;
|
||||||
private String name;
|
private String name;
|
||||||
private String userWhere;
|
private String userWhere;
|
||||||
private int postType;
|
private int postType;
|
||||||
@@ -158,6 +160,7 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
|||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
name = getIntent().getStringExtra(EXTRA_NAME);
|
name = getIntent().getStringExtra(EXTRA_NAME);
|
||||||
postType = getIntent().getIntExtra(EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
postType = getIntent().getIntExtra(EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
||||||
|
|
||||||
@@ -262,7 +265,7 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
|||||||
protected void applyCustomTheme() {
|
protected void applyCustomTheme() {
|
||||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||||
applyFABTheme(fab);
|
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindView(PostFilter postFilter, boolean initializeFragment) {
|
private void bindView(PostFilter postFilter, boolean initializeFragment) {
|
||||||
@@ -470,7 +473,7 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markPostAsRead(Post post) {
|
public void markPostAsRead(Post post) {
|
||||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ import eu.toldi.infinityforlemmy.R;
|
|||||||
import eu.toldi.infinityforlemmy.RecyclerViewContentScrollingInterface;
|
import eu.toldi.infinityforlemmy.RecyclerViewContentScrollingInterface;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
@@ -56,15 +55,11 @@ import eu.toldi.infinityforlemmy.events.PassPrivateMessageEvent;
|
|||||||
import eu.toldi.infinityforlemmy.events.PassPrivateMessageIndexEvent;
|
import eu.toldi.infinityforlemmy.events.PassPrivateMessageIndexEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.fragments.InboxFragment;
|
import eu.toldi.infinityforlemmy.fragments.InboxFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.message.CommentInteraction;
|
||||||
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
||||||
import eu.toldi.infinityforlemmy.message.Message;
|
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import retrofit2.Response;
|
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class InboxActivity extends BaseActivity implements ActivityToolbarInterface, RecyclerViewContentScrollingInterface {
|
public class InboxActivity extends BaseActivity implements ActivityToolbarInterface, RecyclerViewContentScrollingInterface {
|
||||||
|
|
||||||
@@ -93,9 +88,6 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
@Named("base")
|
@Named("base")
|
||||||
RetrofitHolder mRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
|
|
||||||
@Inject
|
|
||||||
@Named("oauth")
|
|
||||||
Retrofit mOauthRetrofit;
|
|
||||||
@Inject
|
@Inject
|
||||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -233,7 +225,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
mCoordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
mCoordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(mAppBarLayout, mCollapsingToolbarLayout, mToolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(mAppBarLayout, mCollapsingToolbarLayout, mToolbar);
|
||||||
applyTabLayoutTheme(tabLayout);
|
applyTabLayoutTheme(tabLayout);
|
||||||
applyFABTheme(fab);
|
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getCurrentAccountAndFetchMessage(Bundle savedInstanceState) {
|
private void getCurrentAccountAndFetchMessage(Bundle savedInstanceState) {
|
||||||
@@ -272,13 +264,16 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
viewPager2.setAdapter(sectionsPagerAdapter);
|
viewPager2.setAdapter(sectionsPagerAdapter);
|
||||||
viewPager2.setOffscreenPageLimit(2);
|
viewPager2.setOffscreenPageLimit(3);
|
||||||
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
||||||
switch (position) {
|
switch (position) {
|
||||||
case 0:
|
case 0:
|
||||||
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.notifications));
|
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.replies));
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
|
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.mentions));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.messages));
|
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.messages));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -306,29 +301,19 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.action_read_all_messages_inbox_activity) {
|
} else if (item.getItemId() == R.id.action_read_all_messages_inbox_activity) {
|
||||||
if (mAccessToken != null) {
|
if (mAccessToken != null) {
|
||||||
Toast.makeText(this, R.string.please_wait, Toast.LENGTH_SHORT).show();
|
ReadMessage.readAllMessages(mRetrofit.getRetrofit(), mAccessToken, new ReadMessage.ReadMessageListener() {
|
||||||
mOauthRetrofit.create(RedditAPI.class).readAllMessages(APIUtils.getOAuthHeader(mAccessToken))
|
|
||||||
.enqueue(new Callback<>() {
|
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void readSuccess() {
|
||||||
if (response.isSuccessful()) {
|
|
||||||
Toast.makeText(InboxActivity.this, R.string.read_all_messages_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(InboxActivity.this, R.string.read_all_messages_success, Toast.LENGTH_SHORT).show();
|
||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
sectionsPagerAdapter.readAllMessages();
|
sectionsPagerAdapter.readAllMessages();
|
||||||
}
|
}
|
||||||
EventBus.getDefault().post(new ChangeInboxCountEvent(0));
|
EventBus.getDefault().post(new ChangeInboxCountEvent(0));
|
||||||
} else {
|
|
||||||
if (response.code() == 429) {
|
|
||||||
Toast.makeText(InboxActivity.this, R.string.read_all_messages_time_limit, Toast.LENGTH_LONG).show();
|
|
||||||
} else {
|
|
||||||
Toast.makeText(InboxActivity.this, R.string.read_all_messages_failed, Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
public void readFailed() {
|
||||||
Toast.makeText(InboxActivity.this, R.string.read_all_messages_failed, Toast.LENGTH_LONG).show();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -442,7 +427,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Message getPrivateMessage(int index) {
|
CommentInteraction getPrivateMessage(int index) {
|
||||||
if (viewPager2 == null || fragmentManager == null) {
|
if (viewPager2 == null || fragmentManager == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -456,26 +441,29 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Fragment createFragment(int position) {
|
public Fragment createFragment(int position) {
|
||||||
if (position == 0) {
|
|
||||||
InboxFragment fragment = new InboxFragment();
|
InboxFragment fragment = new InboxFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putString(InboxFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(InboxFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_INBOX);
|
switch (position) {
|
||||||
|
case 0:
|
||||||
|
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_REPLIES);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_MENTIONS);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
break;
|
||||||
} else {
|
case 2:
|
||||||
InboxFragment fragment = new InboxFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putString(InboxFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_MESSAGES);
|
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_MESSAGES);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
break;
|
||||||
}
|
}
|
||||||
|
fragment.setArguments(bundle);
|
||||||
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return 2;
|
return 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,12 @@ import javax.inject.Named;
|
|||||||
|
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
|
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.customtheme.CustomThemeWrapper;
|
||||||
|
import eu.toldi.infinityforlemmy.post.ObjectResolver;
|
||||||
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
@@ -35,10 +40,9 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
public static final String EXTRA_NEW_ACCOUNT_NAME = "ENAN";
|
public static final String EXTRA_NEW_ACCOUNT_NAME = "ENAN";
|
||||||
public static final String EXTRA_IS_NSFW = "EIN";
|
public static final String EXTRA_IS_NSFW = "EIN";
|
||||||
|
|
||||||
private static final String POST_PATTERN = "/r/[\\w-]+/comments/\\w+/?\\w+/?";
|
private static final String POST_PATTERN = "https?:\\/\\/\\S+\\/post\\/\\d+";
|
||||||
private static final String POST_PATTERN_2 = "/(u|U|user)/[\\w-]+/comments/\\w+/?\\w+/?";
|
|
||||||
private static final String POST_PATTERN_3 = "/[\\w-]+$";
|
private static final String POST_PATTERN_3 = "/[\\w-]+$";
|
||||||
private static final String COMMENT_PATTERN = "/(r|u|U|user)/[\\w-]+/comments/\\w+/?[\\w-]+/\\w+/?";
|
private static final String COMMENT_PATTERN = "https?:\\/\\/\\S+\\/comment\\/\\d+";
|
||||||
private static final String SUBREDDIT_PATTERN = "(?:https?://[\\w.-]+)?/c/[\\w-]+(@[\\w.-]+)?";
|
private static final String SUBREDDIT_PATTERN = "(?:https?://[\\w.-]+)?/c/[\\w-]+(@[\\w.-]+)?";
|
||||||
private static final String USER_PATTERN = "(?:https?://[\\w.-]+)?/u(sers)?/[\\w-]+(@[\\w.-]+)?";
|
private static final String USER_PATTERN = "(?:https?://[\\w.-]+)?/u(sers)?/[\\w-]+(@[\\w.-]+)?";
|
||||||
private static final String SIDEBAR_PATTERN = "/[rR]/[\\w-]+/about/sidebar";
|
private static final String SIDEBAR_PATTERN = "/[rR]/[\\w-]+/about/sidebar";
|
||||||
@@ -60,6 +64,19 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
@Inject
|
@Inject
|
||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ObjectResolver mObjectResolver;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named("current_account")
|
||||||
|
SharedPreferences mCurrentAccountSharedPreferences;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named("no_oauth")
|
||||||
|
RetrofitHolder mRetrofit;
|
||||||
|
|
||||||
|
private String mAccessToken;
|
||||||
|
|
||||||
private Uri getRedditUriByPath(String path) {
|
private Uri getRedditUriByPath(String path) {
|
||||||
if (path.charAt(0) != '/') {
|
if (path.charAt(0) != '/') {
|
||||||
return Uri.parse("https://www.reddit.com/" + path);
|
return Uri.parse("https://www.reddit.com/" + path);
|
||||||
@@ -73,6 +90,7 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
|
|
||||||
Uri uri = getIntent().getData();
|
Uri uri = getIntent().getData();
|
||||||
if (uri == null) {
|
if (uri == null) {
|
||||||
@@ -169,6 +187,75 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
intent.putExtra(ViewUserDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
intent.putExtra(ViewUserDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
|
} else if (uri.toString().matches(POST_PATTERN)) {
|
||||||
|
if (mAccessToken == null) {
|
||||||
|
// switch retrofit to use the current instance for anonymous requests
|
||||||
|
mRetrofit.setBaseURL(uri.getScheme() + "://" + uri.getHost() + "/");
|
||||||
|
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
||||||
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, Integer.parseInt(segments.get(segments.size() - 1)));
|
||||||
|
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResolveObjectFailed() {
|
||||||
|
Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (uri.toString().matches(COMMENT_PATTERN)) {
|
||||||
|
if (mAccessToken == null) {
|
||||||
|
mRetrofit.setBaseURL(uri.getScheme() + "://" + uri.getHost() + "/");
|
||||||
|
FetchComment.fetchSingleComment(mRetrofit.getRetrofit(), null, 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());
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchCommentFailed() {
|
||||||
|
Toast.makeText(LinkResolverActivity.this, 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());
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResolveObjectFailed() {
|
||||||
|
Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
} else if (authority.equals("v.redd.it")) {
|
} else if (authority.equals("v.redd.it")) {
|
||||||
Intent intent = new Intent(this, ViewVideoActivity.class);
|
Intent intent = new Intent(this, ViewVideoActivity.class);
|
||||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_V_REDD_IT);
|
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_V_REDD_IT);
|
||||||
@@ -187,35 +274,12 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} else if (path.equals("/report")) {
|
} else if (path.equals("/report")) {
|
||||||
openInWebView(uri);
|
openInWebView(uri);
|
||||||
} else if (path.matches(POST_PATTERN) || path.matches(POST_PATTERN_2)) {
|
|
||||||
int commentsIndex = segments.lastIndexOf("comments");
|
|
||||||
if (commentsIndex >= 0 && commentsIndex < segments.size() - 1) {
|
|
||||||
Intent intent = new Intent(this, ViewPostDetailActivity.class);
|
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, segments.get(commentsIndex + 1));
|
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
|
||||||
startActivity(intent);
|
|
||||||
} else {
|
|
||||||
deepLinkError(uri);
|
|
||||||
}
|
|
||||||
} else if (path.matches(POST_PATTERN_3)) {
|
} else if (path.matches(POST_PATTERN_3)) {
|
||||||
Intent intent = new Intent(this, ViewPostDetailActivity.class);
|
Intent intent = new Intent(this, ViewPostDetailActivity.class);
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, path.substring(1));
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, path.substring(1));
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} else if (path.matches(COMMENT_PATTERN)) {
|
|
||||||
int commentsIndex = segments.lastIndexOf("comments");
|
|
||||||
if (commentsIndex >= 0 && commentsIndex < segments.size() - 1) {
|
|
||||||
Intent intent = new Intent(this, ViewPostDetailActivity.class);
|
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, segments.get(commentsIndex + 1));
|
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, segments.get(segments.size() - 1));
|
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
|
||||||
startActivity(intent);
|
|
||||||
} else {
|
|
||||||
deepLinkError(uri);
|
|
||||||
}
|
|
||||||
} else if (path.matches(WIKI_PATTERN)) {
|
} else if (path.matches(WIKI_PATTERN)) {
|
||||||
String[] pathSegments = path.split("/");
|
String[] pathSegments = path.split("/");
|
||||||
String wikiPage;
|
String wikiPage;
|
||||||
|
|||||||
@@ -21,11 +21,11 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|||||||
|
|
||||||
import com.google.android.material.appbar.AppBarLayout;
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
import com.google.android.material.textfield.TextInputEditText;
|
import com.google.android.material.textfield.TextInputEditText;
|
||||||
import com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar;
|
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -139,9 +139,9 @@ public class LoginActivity extends BaseActivity {
|
|||||||
Log.i("LoginActivity", "Login button clicked");
|
Log.i("LoginActivity", "Login button clicked");
|
||||||
loginButton.setEnabled(false);
|
loginButton.setEnabled(false);
|
||||||
progressBar.setVisibility(ProgressBar.VISIBLE);
|
progressBar.setVisibility(ProgressBar.VISIBLE);
|
||||||
String username = username_input.getText().toString();
|
String username = username_input.getText().toString().trim();
|
||||||
String instance = correctURL(instance_input.getText().toString());
|
String instance = correctURL(instance_input.getText().toString().trim());
|
||||||
if(!Patterns.WEB_URL.matcher(instance).matches()){
|
if (!Patterns.WEB_URL.matcher(instance).matches()) {
|
||||||
instance_input.setError("Invalid instance URL");
|
instance_input.setError("Invalid instance URL");
|
||||||
Toast.makeText(LoginActivity.this, "Invalid instance URL", Toast.LENGTH_SHORT).show();
|
Toast.makeText(LoginActivity.this, "Invalid instance URL", Toast.LENGTH_SHORT).show();
|
||||||
loginButton.setEnabled(true);
|
loginButton.setEnabled(true);
|
||||||
@@ -149,7 +149,7 @@ public class LoginActivity extends BaseActivity {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Log.i("LoginActivity", "Instance: " + instance);
|
Log.i("LoginActivity", "Instance: " + instance);
|
||||||
AccountLoginDTO accountLoginDTO = new AccountLoginDTO(username,password_input.getText().toString(),token_2fa_input.getText().toString());
|
AccountLoginDTO accountLoginDTO = new AccountLoginDTO(username, password_input.getText().toString(), token_2fa_input.getText().toString());
|
||||||
mRetrofit.setBaseURL(instance);
|
mRetrofit.setBaseURL(instance);
|
||||||
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
|
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
|
||||||
Call<String> accessTokenCall = api.userLogin(accountLoginDTO);
|
Call<String> accessTokenCall = api.userLogin(accountLoginDTO);
|
||||||
@@ -158,14 +158,16 @@ public class LoginActivity extends BaseActivity {
|
|||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
progressBar.setVisibility(ProgressBar.GONE);
|
progressBar.setVisibility(ProgressBar.GONE);
|
||||||
loginButton.setEnabled(true);
|
loginButton.setEnabled(true);
|
||||||
|
|
||||||
|
|
||||||
|
if (response.isSuccessful()) {
|
||||||
String accountResponse = response.body();
|
String accountResponse = response.body();
|
||||||
if (accountResponse == null) {
|
if (accountResponse == null) {
|
||||||
Log.e("LoginActivity", "Account response is null");
|
Log.e("LoginActivity", "Account response is null");
|
||||||
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
Toast.makeText(LoginActivity.this, R.string.invalid_response, Toast.LENGTH_SHORT).show();
|
||||||
//Handle error
|
//Handle error
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (response.isSuccessful()) {
|
|
||||||
try {
|
try {
|
||||||
JSONObject responseJSON = new JSONObject(accountResponse);
|
JSONObject responseJSON = new JSONObject(accountResponse);
|
||||||
String accessToken = responseJSON.getString("jwt");
|
String accessToken = responseJSON.getString("jwt");
|
||||||
@@ -173,7 +175,7 @@ public class LoginActivity extends BaseActivity {
|
|||||||
FetchMyInfo.fetchAccountInfo(mRetrofit.getRetrofit(), mRedditDataRoomDatabase, username,
|
FetchMyInfo.fetchAccountInfo(mRetrofit.getRetrofit(), mRedditDataRoomDatabase, username,
|
||||||
accessToken, new FetchMyInfo.FetchMyInfoListener() {
|
accessToken, new FetchMyInfo.FetchMyInfoListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFetchMyInfoSuccess(String name,String display_name, String profileImageUrl, String bannerImageUrl) {
|
public void onFetchMyInfoSuccess(String name, String display_name, String profileImageUrl, String bannerImageUrl) {
|
||||||
mCurrentAccountSharedPreferences.edit().putString(SharedPreferencesUtils.ACCESS_TOKEN, accessToken)
|
mCurrentAccountSharedPreferences.edit().putString(SharedPreferencesUtils.ACCESS_TOKEN, accessToken)
|
||||||
.putString(SharedPreferencesUtils.ACCOUNT_NAME, display_name)
|
.putString(SharedPreferencesUtils.ACCOUNT_NAME, display_name)
|
||||||
.putString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, name)
|
.putString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, name)
|
||||||
@@ -206,18 +208,25 @@ public class LoginActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
JSONObject responseObject = new JSONObject(accountResponse);
|
String errorBody = response.errorBody().string();
|
||||||
if(responseObject.has("error")) {
|
Log.e("LoginActivity", "Error body: " + errorBody.trim());
|
||||||
Toast.makeText(LoginActivity.this, "Error:"+responseObject.getString("error"), Toast.LENGTH_SHORT).show();
|
JSONObject responseObject = new JSONObject(errorBody.trim());
|
||||||
|
if (responseObject.has("error")) {
|
||||||
|
if (responseObject.getString("error").equals("incorrect_login")) {
|
||||||
|
Toast.makeText(LoginActivity.this, R.string.invalid_username_or_password, Toast.LENGTH_SHORT).show();
|
||||||
|
} else {
|
||||||
|
Toast.makeText(LoginActivity.this, "Error:" + responseObject.getString("error"), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
else {
|
} else {
|
||||||
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
||||||
|
} catch (IOException e) {
|
||||||
|
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.e("LoginActivity", "Failed to get access token: " + response.code() + " " + response.message() + " " + response.errorBody());
|
Log.e("LoginActivity", "Failed to get access token: " + response.code() + " " + response.message());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ import org.greenrobot.eventbus.EventBus;
|
|||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
import org.greenrobot.eventbus.ThreadMode;
|
import org.greenrobot.eventbus.ThreadMode;
|
||||||
|
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
@@ -105,12 +107,14 @@ import eu.toldi.infinityforlemmy.events.ChangeLockBottomAppBarEvent;
|
|||||||
import eu.toldi.infinityforlemmy.events.ChangeNSFWEvent;
|
import eu.toldi.infinityforlemmy.events.ChangeNSFWEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.ChangeRequireAuthToAccountSectionEvent;
|
import eu.toldi.infinityforlemmy.events.ChangeRequireAuthToAccountSectionEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.ChangeShowAvatarOnTheRightInTheNavigationDrawerEvent;
|
import eu.toldi.infinityforlemmy.events.ChangeShowAvatarOnTheRightInTheNavigationDrawerEvent;
|
||||||
|
import eu.toldi.infinityforlemmy.events.ChangeUseCircularFabEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.RecreateActivityEvent;
|
import eu.toldi.infinityforlemmy.events.RecreateActivityEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiRedditViewModel;
|
import eu.toldi.infinityforlemmy.multireddit.MultiRedditViewModel;
|
||||||
|
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||||
@@ -211,6 +215,10 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
MarkPostAsRead markPostAsRead;
|
||||||
|
|
||||||
private FragmentManager fragmentManager;
|
private FragmentManager fragmentManager;
|
||||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||||
private NavigationDrawerRecyclerViewMergedAdapter adapter;
|
private NavigationDrawerRecyclerViewMergedAdapter adapter;
|
||||||
@@ -223,9 +231,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
private boolean mFetchUserInfoSuccess = false;
|
private boolean mFetchUserInfoSuccess = false;
|
||||||
private boolean mFetchSubscriptionsSuccess = false;
|
private boolean mFetchSubscriptionsSuccess = false;
|
||||||
private boolean mDrawerOnAccountSwitch = false;
|
private boolean mDrawerOnAccountSwitch = false;
|
||||||
private String mMessageFullname;
|
private int mMessageFullname;
|
||||||
private String mNewAccountName;
|
private String mNewAccountName;
|
||||||
private boolean hideFab;
|
private boolean hideFab;
|
||||||
|
|
||||||
|
private boolean useCircularFab;
|
||||||
private boolean showBottomAppBar;
|
private boolean showBottomAppBar;
|
||||||
private int mBackButtonAction;
|
private int mBackButtonAction;
|
||||||
private boolean mLockBottomAppBar;
|
private boolean mLockBottomAppBar;
|
||||||
@@ -252,6 +262,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
hideFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_FAB_IN_POST_FEED, false);
|
hideFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_FAB_IN_POST_FEED, false);
|
||||||
|
useCircularFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false);
|
||||||
showBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.BOTTOM_APP_BAR_KEY, false);
|
showBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.BOTTOM_APP_BAR_KEY, false);
|
||||||
|
|
||||||
navigationWrapper = new NavigationWrapper(findViewById(R.id.bottom_app_bar_bottom_app_bar), findViewById(R.id.linear_layout_bottom_app_bar),
|
navigationWrapper = new NavigationWrapper(findViewById(R.id.bottom_app_bar_bottom_app_bar), findViewById(R.id.linear_layout_bottom_app_bar),
|
||||||
@@ -325,9 +336,10 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
fragmentManager = getSupportFragmentManager();
|
fragmentManager = getSupportFragmentManager();
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
|
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
String instance = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_INSTANCE, 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);
|
mRetrofit.setBaseURL(instance);
|
||||||
}
|
}
|
||||||
@@ -336,11 +348,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE);
|
mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE);
|
||||||
mFetchSubscriptionsSuccess = savedInstanceState.getBoolean(FETCH_SUBSCRIPTIONS_STATE);
|
mFetchSubscriptionsSuccess = savedInstanceState.getBoolean(FETCH_SUBSCRIPTIONS_STATE);
|
||||||
mDrawerOnAccountSwitch = savedInstanceState.getBoolean(DRAWER_ON_ACCOUNT_SWITCH_STATE);
|
mDrawerOnAccountSwitch = savedInstanceState.getBoolean(DRAWER_ON_ACCOUNT_SWITCH_STATE);
|
||||||
mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE);
|
mMessageFullname = savedInstanceState.getInt(MESSAGE_FULLNAME_STATE);
|
||||||
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
||||||
inboxCount = savedInstanceState.getInt(INBOX_COUNT_STATE);
|
inboxCount = savedInstanceState.getInt(INBOX_COUNT_STATE);
|
||||||
} else {
|
} else {
|
||||||
mMessageFullname = getIntent().getStringExtra(EXTRA_MESSSAGE_FULLNAME);
|
mMessageFullname = getIntent().getIntExtra(EXTRA_MESSSAGE_FULLNAME, 0);
|
||||||
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -348,6 +360,17 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
initializeNotificationAndBindView();
|
initializeNotificationAndBindView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
if (mAccessToken == null) {
|
||||||
|
String instancePreference = mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI);
|
||||||
|
if (!mRetrofit.getBaseURL().equalsIgnoreCase(instancePreference)) {
|
||||||
|
this.recreate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SharedPreferences getDefaultSharedPreferences() {
|
public SharedPreferences getDefaultSharedPreferences() {
|
||||||
return mSharedPreferences;
|
return mSharedPreferences;
|
||||||
@@ -366,7 +389,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
navigationView.setBackgroundColor(backgroundColor);
|
navigationView.setBackgroundColor(backgroundColor);
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||||
applyTabLayoutTheme(tabLayout);
|
applyTabLayoutTheme(tabLayout);
|
||||||
applyFABTheme(navigationWrapper.floatingActionButton);
|
applyFABTheme(navigationWrapper.floatingActionButton, useCircularFab);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeNotificationAndBindView() {
|
private void initializeNotificationAndBindView() {
|
||||||
@@ -858,6 +881,8 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
startActivity(logOutIntent);
|
startActivity(logOutIntent);
|
||||||
finish();
|
finish();
|
||||||
});
|
});
|
||||||
|
} else if (stringId == R.string.anonymous_account_instance) {
|
||||||
|
changeAnonymousAccountInstance();
|
||||||
}
|
}
|
||||||
if (intent != null) {
|
if (intent != null) {
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
@@ -1004,11 +1029,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
loadUserData();
|
loadUserData();
|
||||||
|
|
||||||
if (mAccessToken != null) {
|
if (mAccessToken != null) {
|
||||||
if (mMessageFullname != null) {
|
if (mMessageFullname != 0) {
|
||||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
|
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void readSuccess() {
|
public void readSuccess() {
|
||||||
mMessageFullname = null;
|
mMessageFullname = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1051,16 +1076,25 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
|
|
||||||
private void loadUserData() {
|
private void loadUserData() {
|
||||||
if (!mFetchUserInfoSuccess) {
|
if (!mFetchUserInfoSuccess) {
|
||||||
|
FetchUserData.fetchUnreadCount(mRetrofit.getRetrofit(), mAccessToken, new FetchUserData.FetchUserUnreadCountListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchUserUnreadCountSuccess(int inboxCount) {
|
||||||
|
MainActivity.this.inboxCount = inboxCount;
|
||||||
|
if (adapter != null) {
|
||||||
|
adapter.setInboxCount(inboxCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchUserUnreadCountFailed() {
|
||||||
|
}
|
||||||
|
});
|
||||||
FetchUserData.fetchUserData(mRedditDataRoomDatabase, mRetrofit.getRetrofit(), mAccessToken,
|
FetchUserData.fetchUserData(mRedditDataRoomDatabase, mRetrofit.getRetrofit(), mAccessToken,
|
||||||
mAccountName, new FetchUserData.FetchUserDataListener() {
|
mAccountName, new FetchUserData.FetchUserDataListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFetchUserDataSuccess(UserData userData, int inboxCount) {
|
public void onFetchUserDataSuccess(UserData userData, int inboxCount) {
|
||||||
MainActivity.this.inboxCount = inboxCount;
|
|
||||||
mAccountName = userData.getName();
|
mAccountName = userData.getName();
|
||||||
mFetchUserInfoSuccess = true;
|
mFetchUserInfoSuccess = true;
|
||||||
if (adapter != null) {
|
|
||||||
adapter.setInboxCount(inboxCount);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1156,7 +1190,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
outState.putBoolean(FETCH_USER_INFO_STATE, mFetchUserInfoSuccess);
|
outState.putBoolean(FETCH_USER_INFO_STATE, mFetchUserInfoSuccess);
|
||||||
outState.putBoolean(FETCH_SUBSCRIPTIONS_STATE, mFetchSubscriptionsSuccess);
|
outState.putBoolean(FETCH_SUBSCRIPTIONS_STATE, mFetchSubscriptionsSuccess);
|
||||||
outState.putBoolean(DRAWER_ON_ACCOUNT_SWITCH_STATE, mDrawerOnAccountSwitch);
|
outState.putBoolean(DRAWER_ON_ACCOUNT_SWITCH_STATE, mDrawerOnAccountSwitch);
|
||||||
outState.putString(MESSAGE_FULLNAME_STATE, mMessageFullname);
|
outState.putInt(MESSAGE_FULLNAME_STATE, mMessageFullname);
|
||||||
outState.putString(NEW_ACCOUNT_NAME_STATE, mNewAccountName);
|
outState.putString(NEW_ACCOUNT_NAME_STATE, mNewAccountName);
|
||||||
outState.putInt(INBOX_COUNT_STATE, inboxCount);
|
outState.putInt(INBOX_COUNT_STATE, inboxCount);
|
||||||
}
|
}
|
||||||
@@ -1315,6 +1349,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
navigationWrapper.floatingActionButton.setVisibility(hideFab ? View.GONE : View.VISIBLE);
|
navigationWrapper.floatingActionButton.setVisibility(hideFab ? View.GONE : View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onChangeUseCircularFab(ChangeUseCircularFabEvent event) {
|
||||||
|
useCircularFab = event.isUseCircularFab();
|
||||||
|
applyFABTheme(navigationWrapper.floatingActionButton, useCircularFab);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLongPress() {
|
public void onLongPress() {
|
||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
@@ -1360,10 +1400,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
goToUser();
|
goToUser();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FABMoreOptionsBottomSheetFragment.FAB_RANDOM: {
|
|
||||||
randomThing();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
sectionsPagerAdapter.hideReadPosts();
|
sectionsPagerAdapter.hideReadPosts();
|
||||||
@@ -1385,6 +1421,72 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void changeAnonymousAccountInstance() {
|
||||||
|
View rootView = getLayoutInflater().inflate(R.layout.dialog_go_to_thing_edit_text, coordinatorLayout, false);
|
||||||
|
TextInputEditText thingEditText = rootView.findViewById(R.id.text_input_edit_text_go_to_thing_edit_text);
|
||||||
|
|
||||||
|
thingEditText.requestFocus();
|
||||||
|
thingEditText.setText(mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI));
|
||||||
|
Utils.showKeyboard(this, new Handler(), thingEditText);
|
||||||
|
thingEditText.setOnEditorActionListener((textView, i, keyEvent) -> {
|
||||||
|
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||||
|
Utils.hideKeyboard(this);
|
||||||
|
String url = thingEditText.getText().toString();
|
||||||
|
if (url.isEmpty()) {
|
||||||
|
thingEditText.setError("Instance URL cannot be empty");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!url.startsWith("http://") || !url.startsWith("https://")) {
|
||||||
|
url = "https://" + url;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
URL urlObj = new URL(url);
|
||||||
|
url = urlObj.getProtocol() + "://" + urlObj.getHost() + "/";
|
||||||
|
mSharedPreferences.edit().putString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, url).apply();
|
||||||
|
mRetrofit.setBaseURL(url);
|
||||||
|
sectionsPagerAdapter.getCurrentFragment().refresh();
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
thingEditText.setError("Invalid URL");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||||
|
.setTitle(R.string.anonymous_account_instance)
|
||||||
|
.setView(rootView)
|
||||||
|
.setPositiveButton(R.string.ok, (dialogInterface, i)
|
||||||
|
-> {
|
||||||
|
Utils.hideKeyboard(this);
|
||||||
|
String url = thingEditText.getText().toString();
|
||||||
|
if (url.isEmpty()) {
|
||||||
|
thingEditText.setError("Instance URL cannot be empty");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!url.startsWith("http://") && !url.startsWith("https://")) {
|
||||||
|
url = "https://" + url;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
URL urlObj = new URL(url);
|
||||||
|
url = urlObj.getProtocol() + "://" + urlObj.getHost() + "/";
|
||||||
|
mSharedPreferences.edit().putString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, url).apply();
|
||||||
|
mRetrofit.setBaseURL(url);
|
||||||
|
sectionsPagerAdapter.getCurrentFragment().refresh();
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
thingEditText.setError("Invalid URL");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||||
|
Utils.hideKeyboard(this);
|
||||||
|
})
|
||||||
|
.setOnDismissListener(dialogInterface -> {
|
||||||
|
Utils.hideKeyboard(this);
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
private void goToSubreddit() {
|
private void goToSubreddit() {
|
||||||
View rootView = getLayoutInflater().inflate(R.layout.dialog_go_to_thing_edit_text, coordinatorLayout, false);
|
View rootView = getLayoutInflater().inflate(R.layout.dialog_go_to_thing_edit_text, coordinatorLayout, false);
|
||||||
TextInputEditText thingEditText = rootView.findViewById(R.id.text_input_edit_text_go_to_thing_edit_text);
|
TextInputEditText thingEditText = rootView.findViewById(R.id.text_input_edit_text_go_to_thing_edit_text);
|
||||||
@@ -1526,7 +1628,17 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markPostAsRead(Post post) {
|
public void markPostAsRead(Post post) {
|
||||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
markPostAsRead.markPostAsRead(post.getId(), mAccessToken, new MarkPostAsRead.MarkPostAsReadListener() {
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadSuccess() {
|
||||||
|
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadFailed() {
|
||||||
|
Toast.makeText(MainActivity.this, R.string.mark_post_as_read_failed, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void doNotShowRedditAPIInfoAgain() {
|
public void doNotShowRedditAPIInfoAgain() {
|
||||||
@@ -1648,7 +1760,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_ALL) {
|
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_ALL) {
|
||||||
PostFragment fragment = new PostFragment();
|
PostFragment fragment = new PostFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, mAccessToken == null ? PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE : PostPagingSource.TYPE_FRONT_PAGE);
|
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
||||||
bundle.putString(PostFragment.EXTRA_NAME, "all");
|
bundle.putString(PostFragment.EXTRA_NAME, "all");
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||||
@@ -1712,7 +1824,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
} else {
|
} else {
|
||||||
PostFragment fragment = new PostFragment();
|
PostFragment fragment = new PostFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, mAccessToken == null ? PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE : PostPagingSource.TYPE_FRONT_PAGE);
|
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
||||||
bundle.putString(PostFragment.EXTRA_NAME, "local");
|
bundle.putString(PostFragment.EXTRA_NAME, "local");
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import eu.toldi.infinityforlemmy.post.Post;
|
|||||||
import eu.toldi.infinityforlemmy.postfilter.DeletePostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.DeletePostFilter;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilterViewModel;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilterViewModel;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
public class PostFilterPreferenceActivity extends BaseActivity {
|
public class PostFilterPreferenceActivity extends BaseActivity {
|
||||||
|
|
||||||
@@ -205,7 +206,7 @@ public class PostFilterPreferenceActivity extends BaseActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void applyCustomTheme() {
|
protected void applyCustomTheme() {
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||||
applyFABTheme(fab);
|
applyFABTheme(fab, sharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
coordinatorLayout.setBackgroundColor(customThemeWrapper.getBackgroundColor());
|
coordinatorLayout.setBackgroundColor(customThemeWrapper.getBackgroundColor());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
|||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilterUsage;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilterUsage;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilterUsageViewModel;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilterUsageViewModel;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.SavePostFilterUsage;
|
import eu.toldi.infinityforlemmy.postfilter.SavePostFilterUsage;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
|
|
||||||
public class PostFilterUsageListingActivity extends BaseActivity {
|
public class PostFilterUsageListingActivity extends BaseActivity {
|
||||||
@@ -206,7 +207,7 @@ public class PostFilterUsageListingActivity extends BaseActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void applyCustomTheme() {
|
protected void applyCustomTheme() {
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||||
applyFABTheme(fab);
|
applyFABTheme(fab, sharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
coordinatorLayout.setBackgroundColor(customThemeWrapper.getBackgroundColor());
|
coordinatorLayout.setBackgroundColor(customThemeWrapper.getBackgroundColor());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,6 +74,9 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|||||||
import eu.toldi.infinityforlemmy.events.SubmitGalleryPostEvent;
|
import eu.toldi.infinityforlemmy.events.SubmitGalleryPostEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.UploadImageUtils;
|
import eu.toldi.infinityforlemmy.utils.UploadImageUtils;
|
||||||
@@ -102,6 +105,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||||
private static final int PICK_IMAGE_REQUEST_CODE = 1;
|
private static final int PICK_IMAGE_REQUEST_CODE = 1;
|
||||||
private static final int CAPTURE_IMAGE_REQUEST_CODE = 2;
|
private static final int CAPTURE_IMAGE_REQUEST_CODE = 2;
|
||||||
|
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_post_gallery_activity)
|
@BindView(R.id.coordinator_layout_post_gallery_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@@ -123,10 +127,6 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
MaterialButton rulesButton;
|
MaterialButton rulesButton;
|
||||||
@BindView(R.id.divider_1_post_gallery_activity)
|
@BindView(R.id.divider_1_post_gallery_activity)
|
||||||
MaterialDivider divider1;
|
MaterialDivider divider1;
|
||||||
@BindView(R.id.flair_custom_text_view_post_gallery_activity)
|
|
||||||
CustomTextView flairTextView;
|
|
||||||
@BindView(R.id.spoiler_custom_text_view_post_gallery_activity)
|
|
||||||
CustomTextView spoilerTextView;
|
|
||||||
@BindView(R.id.nsfw_custom_text_view_post_gallery_activity)
|
@BindView(R.id.nsfw_custom_text_view_post_gallery_activity)
|
||||||
CustomTextView nsfwTextView;
|
CustomTextView nsfwTextView;
|
||||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_gallery_activity)
|
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_gallery_activity)
|
||||||
@@ -168,6 +168,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
private String iconUrl;
|
private String iconUrl;
|
||||||
private String subredditName;
|
private String subredditName;
|
||||||
|
private SubscribedSubredditData communityData;
|
||||||
private boolean subredditSelected = false;
|
private boolean subredditSelected = false;
|
||||||
private boolean subredditIsUser;
|
private boolean subredditIsUser;
|
||||||
private boolean loadSubredditIconSuccessful = true;
|
private boolean loadSubredditIconSuccessful = true;
|
||||||
@@ -245,6 +246,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||||
|
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||||
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
||||||
@@ -279,7 +281,6 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
if (subredditName != null) {
|
if (subredditName != null) {
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
if (!loadSubredditIconSuccessful) {
|
if (!loadSubredditIconSuccessful) {
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
}
|
}
|
||||||
@@ -290,17 +291,6 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
mPostingSnackbar.show();
|
mPostingSnackbar.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flair != null) {
|
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
|
||||||
if (isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
}
|
|
||||||
if (isNSFW) {
|
if (isNSFW) {
|
||||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||||
@@ -314,11 +304,25 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||||
loadSubredditIconSuccessful = false;
|
loadSubredditIconSuccessful = false;
|
||||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||||
|
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||||
|
{
|
||||||
|
communityData = new SubscribedSubredditData(subredditData);
|
||||||
|
subredditName = communityData.getName();
|
||||||
|
subredditIsUser = false;
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
mGlide.load(R.drawable.subreddit_default_icon)
|
mGlide.load(R.drawable.subreddit_default_icon)
|
||||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||||
@@ -347,40 +351,12 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
if (subredditIsUser) {
|
if (subredditIsUser) {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||||
} else {
|
} else {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||||
}
|
}
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
flairTextView.setOnClickListener(view -> {
|
|
||||||
if (flair == null) {
|
|
||||||
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
|
||||||
flairSelectionBottomSheetFragment.setArguments(bundle);
|
|
||||||
flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
|
|
||||||
} else {
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
spoilerTextView.setOnClickListener(view -> {
|
|
||||||
if (!isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
isSpoiler = true;
|
|
||||||
} else {
|
|
||||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
isSpoiler = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
nsfwTextView.setOnClickListener(view -> {
|
nsfwTextView.setOnClickListener(view -> {
|
||||||
if (!isNSFW) {
|
if (!isNSFW) {
|
||||||
@@ -449,8 +425,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
nsfwTextView.setTextColor(primaryTextColor);
|
nsfwTextView.setTextColor(primaryTextColor);
|
||||||
titleEditText.setTextColor(primaryTextColor);
|
titleEditText.setTextColor(primaryTextColor);
|
||||||
titleEditText.setHintTextColor(secondaryTextColor);
|
titleEditText.setHintTextColor(secondaryTextColor);
|
||||||
@@ -458,8 +433,6 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
subredditNameTextView.setTypeface(typeface);
|
subredditNameTextView.setTypeface(typeface);
|
||||||
rulesButton.setTypeface(typeface);
|
rulesButton.setTypeface(typeface);
|
||||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||||
flairTextView.setTypeface(typeface);
|
|
||||||
spoilerTextView.setTypeface(typeface);
|
|
||||||
nsfwTextView.setTypeface(typeface);
|
nsfwTextView.setTypeface(typeface);
|
||||||
titleEditText.setTypeface(typeface);
|
titleEditText.setTypeface(typeface);
|
||||||
}
|
}
|
||||||
@@ -612,7 +585,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
|
|
||||||
Intent intent = new Intent(this, SubmitPostService.class);
|
Intent intent = new Intent(this, SubmitPostService.class);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_GALLERY);
|
intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_GALLERY);
|
||||||
ArrayList<RedditGalleryPayload.Item> items = new ArrayList<>();
|
ArrayList<RedditGalleryPayload.Item> items = new ArrayList<>();
|
||||||
for (RedditGallerySubmissionRecyclerViewAdapter.RedditGalleryImageInfo i : redditGalleryImageInfoList) {
|
for (RedditGallerySubmissionRecyclerViewAdapter.RedditGalleryImageInfo i : redditGalleryImageInfoList) {
|
||||||
@@ -648,6 +621,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||||
|
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||||
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
||||||
@@ -666,19 +640,16 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
subredditName = communityData.getName();
|
||||||
|
iconUrl = communityData.getIconUrl();
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
subredditIsUser = false;
|
||||||
|
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
|
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
flair = null;
|
||||||
}
|
}
|
||||||
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
||||||
@@ -709,10 +680,6 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
@Override
|
@Override
|
||||||
public void flairSelected(Flair flair) {
|
public void flairSelected(Flair flair) {
|
||||||
this.flair = flair;
|
this.flair = flair;
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import android.widget.EditText;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@@ -25,6 +26,8 @@ import androidx.constraintlayout.widget.ConstraintLayout;
|
|||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.core.content.FileProvider;
|
import androidx.core.content.FileProvider;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.RequestManager;
|
import com.bumptech.glide.RequestManager;
|
||||||
@@ -43,6 +46,7 @@ import org.greenrobot.eventbus.Subscribe;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -55,22 +59,31 @@ import eu.toldi.infinityforlemmy.Infinity;
|
|||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
|
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.UploadedImage;
|
||||||
import eu.toldi.infinityforlemmy.account.Account;
|
import eu.toldi.infinityforlemmy.account.Account;
|
||||||
|
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
|
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.AccountChooserBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.AccountChooserBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
import eu.toldi.infinityforlemmy.events.SubmitImagePostEvent;
|
import eu.toldi.infinityforlemmy.events.SubmitImagePostEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SubmitVideoOrGifPostEvent;
|
import eu.toldi.infinityforlemmy.events.SubmitVideoOrGifPostEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
import pl.droidsonroids.gif.GifImageView;
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class PostImageActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
|
public class PostImageActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
|
||||||
AccountChooserBottomSheetFragment.AccountChooserListener {
|
UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener {
|
||||||
|
|
||||||
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
||||||
|
|
||||||
@@ -90,6 +103,10 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
private static final int PICK_IMAGE_REQUEST_CODE = 1;
|
private static final int PICK_IMAGE_REQUEST_CODE = 1;
|
||||||
private static final int CAPTURE_IMAGE_REQUEST_CODE = 2;
|
private static final int CAPTURE_IMAGE_REQUEST_CODE = 2;
|
||||||
|
|
||||||
|
private static final int PICK_IMAGE_REQUEST_CODE_2 = 100;
|
||||||
|
private static final int CAPTURE_IMAGE_REQUEST_CODE_2 = 200;
|
||||||
|
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_post_image_activity)
|
@BindView(R.id.coordinator_layout_post_image_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@BindView(R.id.appbar_layout_post_image_activity)
|
@BindView(R.id.appbar_layout_post_image_activity)
|
||||||
@@ -110,10 +127,6 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
MaterialButton rulesButton;
|
MaterialButton rulesButton;
|
||||||
@BindView(R.id.divider_1_post_image_activity)
|
@BindView(R.id.divider_1_post_image_activity)
|
||||||
MaterialDivider divider1;
|
MaterialDivider divider1;
|
||||||
@BindView(R.id.flair_custom_text_view_post_image_activity)
|
|
||||||
CustomTextView flairTextView;
|
|
||||||
@BindView(R.id.spoiler_custom_text_view_post_image_activity)
|
|
||||||
CustomTextView spoilerTextView;
|
|
||||||
@BindView(R.id.nsfw_custom_text_view_post_image_activity)
|
@BindView(R.id.nsfw_custom_text_view_post_image_activity)
|
||||||
CustomTextView nsfwTextView;
|
CustomTextView nsfwTextView;
|
||||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_image_activity)
|
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_image_activity)
|
||||||
@@ -153,6 +166,11 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
@Inject
|
@Inject
|
||||||
@Named("current_account")
|
@Named("current_account")
|
||||||
SharedPreferences mCurrentAccountSharedPreferences;
|
SharedPreferences mCurrentAccountSharedPreferences;
|
||||||
|
|
||||||
|
@BindView(R.id.post_text_content_edit_text_post_text_activity)
|
||||||
|
EditText contentEditText;
|
||||||
|
@BindView(R.id.markdown_bottom_bar_recycler_view_post_text_activity)
|
||||||
|
RecyclerView markdownBottomBarRecyclerView;
|
||||||
@Inject
|
@Inject
|
||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -162,6 +180,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
private String iconUrl;
|
private String iconUrl;
|
||||||
private String subredditName;
|
private String subredditName;
|
||||||
|
private SubscribedSubredditData communityData;
|
||||||
private boolean subredditSelected = false;
|
private boolean subredditSelected = false;
|
||||||
private boolean subredditIsUser;
|
private boolean subredditIsUser;
|
||||||
private boolean loadSubredditIconSuccessful = true;
|
private boolean loadSubredditIconSuccessful = true;
|
||||||
@@ -183,6 +202,9 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
private FlairBottomSheetFragment flairSelectionBottomSheetFragment;
|
private FlairBottomSheetFragment flairSelectionBottomSheetFragment;
|
||||||
private Snackbar mPostingSnackbar;
|
private Snackbar mPostingSnackbar;
|
||||||
|
|
||||||
|
private Uri capturedImageUri;
|
||||||
|
private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
@@ -217,6 +239,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||||
|
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||||
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
||||||
@@ -247,7 +270,6 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
if (subredditName != null) {
|
if (subredditName != null) {
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
if (!loadSubredditIconSuccessful) {
|
if (!loadSubredditIconSuccessful) {
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
}
|
}
|
||||||
@@ -258,17 +280,6 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
mPostingSnackbar.show();
|
mPostingSnackbar.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flair != null) {
|
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
|
||||||
if (isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
}
|
|
||||||
if (isNSFW) {
|
if (isNSFW) {
|
||||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||||
@@ -282,11 +293,25 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||||
loadSubredditIconSuccessful = false;
|
loadSubredditIconSuccessful = false;
|
||||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||||
|
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||||
|
{
|
||||||
|
communityData = new SubscribedSubredditData(subredditData);
|
||||||
|
subredditName = communityData.getName();
|
||||||
|
subredditIsUser = false;
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
mGlide.load(R.drawable.subreddit_default_icon)
|
mGlide.load(R.drawable.subreddit_default_icon)
|
||||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||||
@@ -320,40 +345,12 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
if (subredditIsUser) {
|
if (subredditIsUser) {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||||
} else {
|
} else {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||||
}
|
}
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
flairTextView.setOnClickListener(view -> {
|
|
||||||
if (flair == null) {
|
|
||||||
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
|
||||||
flairSelectionBottomSheetFragment.setArguments(bundle);
|
|
||||||
flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
|
|
||||||
} else {
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
spoilerTextView.setOnClickListener(view -> {
|
|
||||||
if (!isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
isSpoiler = true;
|
|
||||||
} else {
|
|
||||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
isSpoiler = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
nsfwTextView.setOnClickListener(view -> {
|
nsfwTextView.setOnClickListener(view -> {
|
||||||
if (!isNSFW) {
|
if (!isNSFW) {
|
||||||
@@ -400,6 +397,30 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
imageView.setVisibility(View.GONE);
|
imageView.setVisibility(View.GONE);
|
||||||
constraintLayout.setVisibility(View.VISIBLE);
|
constraintLayout.setVisibility(View.VISIBLE);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(
|
||||||
|
mCustomThemeWrapper, new MarkdownBottomBarRecyclerViewAdapter.ItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(int item) {
|
||||||
|
MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(
|
||||||
|
PostImageActivity.this, contentEditText, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUploadImage() {
|
||||||
|
Utils.hideKeyboard(PostImageActivity.this);
|
||||||
|
UploadedImagesBottomSheetFragment fragment = new UploadedImagesBottomSheetFragment();
|
||||||
|
Bundle arguments = new Bundle();
|
||||||
|
arguments.putParcelableArrayList(UploadedImagesBottomSheetFragment.EXTRA_UPLOADED_IMAGES,
|
||||||
|
uploadedImages);
|
||||||
|
fragment.setArguments(arguments);
|
||||||
|
fragment.show(getSupportFragmentManager(), fragment.getTag());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManagerBugFixed(this,
|
||||||
|
LinearLayoutManager.HORIZONTAL, false));
|
||||||
|
markdownBottomBarRecyclerView.setAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadCurrentAccount() {
|
private void loadCurrentAccount() {
|
||||||
@@ -451,20 +472,17 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
nsfwTextView.setTextColor(primaryTextColor);
|
nsfwTextView.setTextColor(primaryTextColor);
|
||||||
titleEditText.setTextColor(primaryTextColor);
|
titleEditText.setTextColor(primaryTextColor);
|
||||||
titleEditText.setHintTextColor(secondaryTextColor);
|
titleEditText.setHintTextColor(secondaryTextColor);
|
||||||
applyFABTheme(captureFab);
|
boolean circleFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false);
|
||||||
applyFABTheme(selectFromLibraryFab);
|
applyFABTheme(captureFab, circleFab);
|
||||||
|
applyFABTheme(selectFromLibraryFab, circleFab);
|
||||||
selectAgainTextView.setTextColor(mCustomThemeWrapper.getColorAccent());
|
selectAgainTextView.setTextColor(mCustomThemeWrapper.getColorAccent());
|
||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
subredditNameTextView.setTypeface(typeface);
|
subredditNameTextView.setTypeface(typeface);
|
||||||
rulesButton.setTypeface(typeface);
|
rulesButton.setTypeface(typeface);
|
||||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||||
flairTextView.setTypeface(typeface);
|
|
||||||
spoilerTextView.setTypeface(typeface);
|
|
||||||
nsfwTextView.setTypeface(typeface);
|
nsfwTextView.setTypeface(typeface);
|
||||||
titleEditText.setTypeface(typeface);
|
titleEditText.setTypeface(typeface);
|
||||||
selectAgainTextView.setTypeface(typeface);
|
selectAgainTextView.setTypeface(typeface);
|
||||||
@@ -570,8 +588,9 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
Intent intent = new Intent(this, SubmitPostService.class);
|
Intent intent = new Intent(this, SubmitPostService.class);
|
||||||
intent.setData(imageUri);
|
intent.setData(imageUri);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||||
|
intent.putExtra(SubmitPostService.EXTRA_BODY, contentEditText.getText().toString());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_IS_NSFW, isNSFW);
|
intent.putExtra(SubmitPostService.EXTRA_IS_NSFW, isNSFW);
|
||||||
@@ -608,6 +627,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||||
@@ -628,19 +648,15 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
communityData = data.getExtras().getParcelable(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
subredditName = communityData.getName();
|
||||||
|
iconUrl = communityData.getIconUrl();
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
subredditIsUser = false;
|
||||||
|
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
|
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
flair = null;
|
||||||
}
|
}
|
||||||
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
||||||
@@ -657,6 +673,16 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
loadImage();
|
loadImage();
|
||||||
}
|
}
|
||||||
|
} else if (requestCode == PICK_IMAGE_REQUEST_CODE_2) {
|
||||||
|
if (data == null) {
|
||||||
|
Toast.makeText(PostImageActivity.this, R.string.error_getting_image, Toast.LENGTH_LONG).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||||
|
mAccessToken, contentEditText, coordinatorLayout, data.getData(), uploadedImages);
|
||||||
|
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE_2) {
|
||||||
|
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||||
|
mAccessToken, contentEditText, coordinatorLayout, capturedImageUri, uploadedImages);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -669,10 +695,6 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
@Override
|
@Override
|
||||||
public void flairSelected(Flair flair) {
|
public void flairSelected(Flair flair) {
|
||||||
this.flair = flair;
|
this.flair = flair;
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -700,8 +722,8 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
isPosting = false;
|
isPosting = false;
|
||||||
mPostingSnackbar.dismiss();
|
mPostingSnackbar.dismiss();
|
||||||
if (submitImagePostEvent.postSuccess) {
|
if (submitImagePostEvent.postSuccess) {
|
||||||
Intent intent = new Intent(PostImageActivity.this, ViewUserDetailActivity.class);
|
Intent intent = new Intent(PostImageActivity.this, ViewPostDetailActivity.class);
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, submitImagePostEvent.post);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
finish();
|
finish();
|
||||||
} else {
|
} else {
|
||||||
@@ -740,4 +762,37 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void uploadImage() {
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setType("image/*");
|
||||||
|
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||||
|
startActivityForResult(Intent.createChooser(intent,
|
||||||
|
getResources().getString(R.string.select_from_gallery)), PICK_IMAGE_REQUEST_CODE_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void captureImage() {
|
||||||
|
Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||||
|
try {
|
||||||
|
capturedImageUri = FileProvider.getUriForFile(this, "eu.toldi.infinityforlemmy.provider",
|
||||||
|
File.createTempFile("captured_image", ".jpg", getExternalFilesDir(Environment.DIRECTORY_PICTURES)));
|
||||||
|
pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);
|
||||||
|
startActivityForResult(pictureIntent, CAPTURE_IMAGE_REQUEST_CODE_2);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
Toast.makeText(this, R.string.error_creating_temp_file, Toast.LENGTH_SHORT).show();
|
||||||
|
} catch (ActivityNotFoundException e) {
|
||||||
|
Toast.makeText(this, R.string.no_camera_available, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertImageUrl(UploadedImage uploadedImage) {
|
||||||
|
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||||
|
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||||
|
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
||||||
|
"[" + uploadedImage.imageName + "](" + uploadedImage.imageUrl + ")",
|
||||||
|
0, "[]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
package eu.toldi.infinityforlemmy.activities;
|
package eu.toldi.infinityforlemmy.activities;
|
||||||
|
|
||||||
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Environment;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.provider.MediaStore;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
|
||||||
import android.webkit.URLUtil;
|
import android.webkit.URLUtil;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
@@ -20,6 +23,9 @@ import androidx.annotation.Nullable;
|
|||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.core.content.FileProvider;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.RequestManager;
|
import com.bumptech.glide.RequestManager;
|
||||||
@@ -35,6 +41,9 @@ import com.libRG.CustomTextView;
|
|||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -47,17 +56,26 @@ import eu.toldi.infinityforlemmy.Infinity;
|
|||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
|
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.UploadedImage;
|
||||||
import eu.toldi.infinityforlemmy.account.Account;
|
import eu.toldi.infinityforlemmy.account.Account;
|
||||||
|
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.apis.TitleSuggestion;
|
import eu.toldi.infinityforlemmy.apis.TitleSuggestion;
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
|
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.AccountChooserBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.AccountChooserBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
import eu.toldi.infinityforlemmy.events.SubmitTextOrLinkPostEvent;
|
import eu.toldi.infinityforlemmy.events.SubmitTextOrLinkPostEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
import pl.droidsonroids.gif.GifImageView;
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@@ -67,12 +85,13 @@ import retrofit2.Retrofit;
|
|||||||
import retrofit2.converter.scalars.ScalarsConverterFactory;
|
import retrofit2.converter.scalars.ScalarsConverterFactory;
|
||||||
|
|
||||||
public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
|
public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
|
||||||
AccountChooserBottomSheetFragment.AccountChooserListener {
|
UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener {
|
||||||
|
|
||||||
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
||||||
static final String EXTRA_LINK = "EL";
|
static final String EXTRA_LINK = "EL";
|
||||||
|
|
||||||
private static final String SELECTED_ACCOUNT_STATE = "SAS";
|
private static final String SELECTED_ACCOUNT_STATE = "SAS";
|
||||||
|
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||||
private static final String SUBREDDIT_NAME_STATE = "SNS";
|
private static final String SUBREDDIT_NAME_STATE = "SNS";
|
||||||
private static final String SUBREDDIT_ICON_STATE = "SIS";
|
private static final String SUBREDDIT_ICON_STATE = "SIS";
|
||||||
private static final String SUBREDDIT_SELECTED_STATE = "SSS";
|
private static final String SUBREDDIT_SELECTED_STATE = "SSS";
|
||||||
@@ -84,6 +103,9 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
private static final String IS_NSFW_STATE = "INS";
|
private static final String IS_NSFW_STATE = "INS";
|
||||||
|
|
||||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||||
|
private static final int PICK_IMAGE_REQUEST_CODE = 100;
|
||||||
|
private static final int CAPTURE_IMAGE_REQUEST_CODE = 200;
|
||||||
|
private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300;
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_post_link_activity)
|
@BindView(R.id.coordinator_layout_post_link_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@@ -107,10 +129,6 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
MaterialDivider divider1;
|
MaterialDivider divider1;
|
||||||
@BindView(R.id.divider_2_post_link_activity)
|
@BindView(R.id.divider_2_post_link_activity)
|
||||||
MaterialDivider divider2;
|
MaterialDivider divider2;
|
||||||
@BindView(R.id.flair_custom_text_view_post_link_activity)
|
|
||||||
CustomTextView flairTextView;
|
|
||||||
@BindView(R.id.spoiler_custom_text_view_post_link_activity)
|
|
||||||
CustomTextView spoilerTextView;
|
|
||||||
@BindView(R.id.nsfw_custom_text_view_post_link_activity)
|
@BindView(R.id.nsfw_custom_text_view_post_link_activity)
|
||||||
CustomTextView nsfwTextView;
|
CustomTextView nsfwTextView;
|
||||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_link_activity)
|
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_link_activity)
|
||||||
@@ -125,6 +143,11 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
MaterialButton suggestTitleButton;
|
MaterialButton suggestTitleButton;
|
||||||
@BindView(R.id.post_link_edit_text_post_link_activity)
|
@BindView(R.id.post_link_edit_text_post_link_activity)
|
||||||
EditText linkEditText;
|
EditText linkEditText;
|
||||||
|
|
||||||
|
@BindView(R.id.post_text_content_edit_text_post_text_activity)
|
||||||
|
EditText contentEditText;
|
||||||
|
@BindView(R.id.markdown_bottom_bar_recycler_view_post_text_activity)
|
||||||
|
RecyclerView markdownBottomBarRecyclerView;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("no_oauth")
|
@Named("no_oauth")
|
||||||
RetrofitHolder mRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
@@ -147,6 +170,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String iconUrl;
|
private String iconUrl;
|
||||||
private String subredditName;
|
private String subredditName;
|
||||||
|
private SubscribedSubredditData communityData;
|
||||||
private boolean subredditSelected = false;
|
private boolean subredditSelected = false;
|
||||||
private boolean subredditIsUser;
|
private boolean subredditIsUser;
|
||||||
private boolean loadSubredditIconSuccessful = true;
|
private boolean loadSubredditIconSuccessful = true;
|
||||||
@@ -167,6 +191,9 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
private FlairBottomSheetFragment flairSelectionBottomSheetFragment;
|
private FlairBottomSheetFragment flairSelectionBottomSheetFragment;
|
||||||
private Snackbar mPostingSnackbar;
|
private Snackbar mPostingSnackbar;
|
||||||
|
|
||||||
|
private Uri capturedImageUri;
|
||||||
|
private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
@@ -200,6 +227,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||||
|
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||||
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
||||||
@@ -225,7 +253,6 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
if (subredditName != null) {
|
if (subredditName != null) {
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
if (!loadSubredditIconSuccessful) {
|
if (!loadSubredditIconSuccessful) {
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
}
|
}
|
||||||
@@ -236,17 +263,6 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
mPostingSnackbar.show();
|
mPostingSnackbar.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flair != null) {
|
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
|
||||||
if (isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
}
|
|
||||||
if (isNSFW) {
|
if (isNSFW) {
|
||||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||||
@@ -260,11 +276,25 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||||
loadSubredditIconSuccessful = false;
|
loadSubredditIconSuccessful = false;
|
||||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||||
|
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||||
|
{
|
||||||
|
communityData = new SubscribedSubredditData(subredditData);
|
||||||
|
subredditName = communityData.getName();
|
||||||
|
subredditIsUser = false;
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
mGlide.load(R.drawable.subreddit_default_icon)
|
mGlide.load(R.drawable.subreddit_default_icon)
|
||||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||||
@@ -298,40 +328,12 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
if (subredditIsUser) {
|
if (subredditIsUser) {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||||
} else {
|
} else {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||||
}
|
}
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
flairTextView.setOnClickListener(view -> {
|
|
||||||
if (flair == null) {
|
|
||||||
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
|
||||||
flairSelectionBottomSheetFragment.setArguments(bundle);
|
|
||||||
flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
|
|
||||||
} else {
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
spoilerTextView.setOnClickListener(view -> {
|
|
||||||
if (!isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
isSpoiler = true;
|
|
||||||
} else {
|
|
||||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
isSpoiler = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
nsfwTextView.setOnClickListener(view -> {
|
nsfwTextView.setOnClickListener(view -> {
|
||||||
if (!isNSFW) {
|
if (!isNSFW) {
|
||||||
@@ -375,6 +377,31 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(
|
||||||
|
mCustomThemeWrapper, new MarkdownBottomBarRecyclerViewAdapter.ItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(int item) {
|
||||||
|
MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(
|
||||||
|
PostLinkActivity.this, contentEditText, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUploadImage() {
|
||||||
|
Utils.hideKeyboard(PostLinkActivity.this);
|
||||||
|
UploadedImagesBottomSheetFragment fragment = new UploadedImagesBottomSheetFragment();
|
||||||
|
Bundle arguments = new Bundle();
|
||||||
|
arguments.putParcelableArrayList(UploadedImagesBottomSheetFragment.EXTRA_UPLOADED_IMAGES,
|
||||||
|
uploadedImages);
|
||||||
|
fragment.setArguments(arguments);
|
||||||
|
fragment.show(getSupportFragmentManager(), fragment.getTag());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManagerBugFixed(this,
|
||||||
|
LinearLayoutManager.HORIZONTAL, false));
|
||||||
|
markdownBottomBarRecyclerView.setAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadCurrentAccount() {
|
private void loadCurrentAccount() {
|
||||||
@@ -426,8 +453,6 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
nsfwTextView.setTextColor(primaryTextColor);
|
nsfwTextView.setTextColor(primaryTextColor);
|
||||||
titleEditText.setTextColor(primaryTextColor);
|
titleEditText.setTextColor(primaryTextColor);
|
||||||
titleEditText.setHintTextColor(secondaryTextColor);
|
titleEditText.setHintTextColor(secondaryTextColor);
|
||||||
@@ -439,8 +464,6 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
subredditNameTextView.setTypeface(typeface);
|
subredditNameTextView.setTypeface(typeface);
|
||||||
rulesButton.setTypeface(typeface);
|
rulesButton.setTypeface(typeface);
|
||||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||||
flairTextView.setTypeface(typeface);
|
|
||||||
spoilerTextView.setTypeface(typeface);
|
|
||||||
nsfwTextView.setTypeface(typeface);
|
nsfwTextView.setTypeface(typeface);
|
||||||
titleEditText.setTypeface(typeface);
|
titleEditText.setTypeface(typeface);
|
||||||
suggestTitleButton.setTypeface(typeface);
|
suggestTitleButton.setTypeface(typeface);
|
||||||
@@ -541,9 +564,10 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
|
|
||||||
Intent intent = new Intent(this, SubmitPostService.class);
|
Intent intent = new Intent(this, SubmitPostService.class);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_CONTENT, linkEditText.getText().toString());
|
intent.putExtra(SubmitPostService.EXTRA_BODY, contentEditText.getText().toString());
|
||||||
|
intent.putExtra(SubmitPostService.EXTRA_URL, linkEditText.getText().toString());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_LINK);
|
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_LINK);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
||||||
@@ -575,6 +599,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||||
|
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||||
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
||||||
@@ -589,22 +614,29 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
communityData = data.getExtras().getParcelable(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||||
|
subredditName = communityData.getName();
|
||||||
|
iconUrl = communityData.getIconUrl();
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
subredditIsUser = false;
|
||||||
|
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
|
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
flair = null;
|
||||||
|
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
||||||
|
if (data == null) {
|
||||||
|
Toast.makeText(PostLinkActivity.this, R.string.error_getting_image, Toast.LENGTH_LONG).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||||
|
mAccessToken, contentEditText, coordinatorLayout, data.getData(), uploadedImages);
|
||||||
|
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
|
||||||
|
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||||
|
mAccessToken, contentEditText, coordinatorLayout, capturedImageUri, uploadedImages);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -618,10 +650,6 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
@Override
|
@Override
|
||||||
public void flairSelected(Flair flair) {
|
public void flairSelected(Flair flair) {
|
||||||
this.flair = flair;
|
this.flair = flair;
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -664,4 +692,37 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void uploadImage() {
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setType("image/*");
|
||||||
|
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||||
|
startActivityForResult(Intent.createChooser(intent,
|
||||||
|
getResources().getString(R.string.select_from_gallery)), PICK_IMAGE_REQUEST_CODE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void captureImage() {
|
||||||
|
Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||||
|
try {
|
||||||
|
capturedImageUri = FileProvider.getUriForFile(this, "eu.toldi.infinityforlemmy.provider",
|
||||||
|
File.createTempFile("captured_image", ".jpg", getExternalFilesDir(Environment.DIRECTORY_PICTURES)));
|
||||||
|
pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);
|
||||||
|
startActivityForResult(pictureIntent, CAPTURE_IMAGE_REQUEST_CODE);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
Toast.makeText(this, R.string.error_creating_temp_file, Toast.LENGTH_SHORT).show();
|
||||||
|
} catch (ActivityNotFoundException e) {
|
||||||
|
Toast.makeText(this, R.string.no_camera_available, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertImageUrl(UploadedImage uploadedImage) {
|
||||||
|
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||||
|
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||||
|
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
||||||
|
"[" + uploadedImage.imageName + "](" + uploadedImage.imageUrl + ")",
|
||||||
|
0, "[]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import android.os.Bundle;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -64,6 +63,9 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|||||||
import eu.toldi.infinityforlemmy.events.SubmitPollPostEvent;
|
import eu.toldi.infinityforlemmy.events.SubmitPollPostEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
@@ -87,6 +89,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
private static final String IS_NSFW_STATE = "INS";
|
private static final String IS_NSFW_STATE = "INS";
|
||||||
|
|
||||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||||
|
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_post_poll_activity)
|
@BindView(R.id.coordinator_layout_post_poll_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@@ -108,10 +111,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
MaterialButton rulesButton;
|
MaterialButton rulesButton;
|
||||||
@BindView(R.id.divider_1_post_poll_activity)
|
@BindView(R.id.divider_1_post_poll_activity)
|
||||||
MaterialDivider divider1;
|
MaterialDivider divider1;
|
||||||
@BindView(R.id.flair_custom_text_view_post_poll_activity)
|
|
||||||
CustomTextView flairTextView;
|
|
||||||
@BindView(R.id.spoiler_custom_text_view_post_poll_activity)
|
|
||||||
CustomTextView spoilerTextView;
|
|
||||||
@BindView(R.id.nsfw_custom_text_view_post_poll_activity)
|
@BindView(R.id.nsfw_custom_text_view_post_poll_activity)
|
||||||
CustomTextView nsfwTextView;
|
CustomTextView nsfwTextView;
|
||||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_poll_activity)
|
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_poll_activity)
|
||||||
@@ -173,6 +172,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
private Account selectedAccount;
|
private Account selectedAccount;
|
||||||
|
private SubscribedSubredditData communityData;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
private String iconUrl;
|
private String iconUrl;
|
||||||
@@ -232,6 +232,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||||
|
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||||
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
||||||
@@ -257,7 +258,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
if (subredditName != null) {
|
if (subredditName != null) {
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
if (!loadSubredditIconSuccessful) {
|
if (!loadSubredditIconSuccessful) {
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
}
|
}
|
||||||
@@ -268,17 +268,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
mPostingSnackbar.show();
|
mPostingSnackbar.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flair != null) {
|
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
|
||||||
if (isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
}
|
|
||||||
if (isNSFW) {
|
if (isNSFW) {
|
||||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||||
@@ -292,11 +281,25 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||||
loadSubredditIconSuccessful = false;
|
loadSubredditIconSuccessful = false;
|
||||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||||
|
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||||
|
{
|
||||||
|
communityData = new SubscribedSubredditData(subredditData);
|
||||||
|
subredditName = communityData.getName();
|
||||||
|
subredditIsUser = false;
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
mGlide.load(R.drawable.subreddit_default_icon)
|
mGlide.load(R.drawable.subreddit_default_icon)
|
||||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||||
@@ -325,40 +328,12 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
if (subredditIsUser) {
|
if (subredditIsUser) {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||||
} else {
|
} else {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||||
}
|
}
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
flairTextView.setOnClickListener(view -> {
|
|
||||||
if (flair == null) {
|
|
||||||
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
|
||||||
flairSelectionBottomSheetFragment.setArguments(bundle);
|
|
||||||
flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
|
|
||||||
} else {
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
spoilerTextView.setOnClickListener(view -> {
|
|
||||||
if (!isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
isSpoiler = true;
|
|
||||||
} else {
|
|
||||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
isSpoiler = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
nsfwTextView.setOnClickListener(view -> {
|
nsfwTextView.setOnClickListener(view -> {
|
||||||
if (!isNSFW) {
|
if (!isNSFW) {
|
||||||
@@ -431,8 +406,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
nsfwTextView.setTextColor(primaryTextColor);
|
nsfwTextView.setTextColor(primaryTextColor);
|
||||||
titleEditText.setTextColor(primaryTextColor);
|
titleEditText.setTextColor(primaryTextColor);
|
||||||
titleEditText.setHintTextColor(secondaryTextColor);
|
titleEditText.setHintTextColor(secondaryTextColor);
|
||||||
@@ -481,8 +454,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
subredditNameTextView.setTypeface(typeface);
|
subredditNameTextView.setTypeface(typeface);
|
||||||
rulesButton.setTypeface(typeface);
|
rulesButton.setTypeface(typeface);
|
||||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||||
flairTextView.setTypeface(typeface);
|
|
||||||
spoilerTextView.setTypeface(typeface);
|
|
||||||
nsfwTextView.setTypeface(typeface);
|
nsfwTextView.setTypeface(typeface);
|
||||||
titleEditText.setTypeface(typeface);
|
titleEditText.setTypeface(typeface);
|
||||||
option1TextInputEditText.setTypeface(typeface);
|
option1TextInputEditText.setTypeface(typeface);
|
||||||
@@ -631,7 +602,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
|
|
||||||
Intent intent = new Intent(this, SubmitPostService.class);
|
Intent intent = new Intent(this, SubmitPostService.class);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_POLL);
|
intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_POLL);
|
||||||
PollPayload payload = new PollPayload(subredditName, titleEditText.getText().toString(),
|
PollPayload payload = new PollPayload(subredditName, titleEditText.getText().toString(),
|
||||||
optionList.toArray(new String[0]), (int) votingLengthSlider.getValue(), isNSFW, isSpoiler, flair, receivePostReplyNotificationsSwitchMaterial.isChecked(),
|
optionList.toArray(new String[0]), (int) votingLengthSlider.getValue(), isNSFW, isSpoiler, flair, receivePostReplyNotificationsSwitchMaterial.isChecked(),
|
||||||
@@ -669,6 +640,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||||
|
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||||
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
||||||
@@ -685,19 +657,16 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
subredditName = communityData.getName();
|
||||||
|
iconUrl = communityData.getIconUrl();
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
subredditIsUser = false;
|
||||||
|
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
|
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
flair = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -706,10 +675,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
@Override
|
@Override
|
||||||
public void flairSelected(Flair flair) {
|
public void flairSelected(Flair flair) {
|
||||||
this.flair = flair;
|
this.flair = flair;
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import android.os.Handler;
|
|||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -69,6 +68,9 @@ import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
|||||||
import eu.toldi.infinityforlemmy.events.SubmitTextOrLinkPostEvent;
|
import eu.toldi.infinityforlemmy.events.SubmitTextOrLinkPostEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
@@ -78,7 +80,6 @@ import retrofit2.Retrofit;
|
|||||||
|
|
||||||
public class PostTextActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
|
public class PostTextActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
|
||||||
UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener {
|
UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener {
|
||||||
|
|
||||||
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
||||||
static final String EXTRA_CONTENT = "EC";
|
static final String EXTRA_CONTENT = "EC";
|
||||||
|
|
||||||
@@ -98,6 +99,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
private static final int PICK_IMAGE_REQUEST_CODE = 100;
|
private static final int PICK_IMAGE_REQUEST_CODE = 100;
|
||||||
private static final int CAPTURE_IMAGE_REQUEST_CODE = 200;
|
private static final int CAPTURE_IMAGE_REQUEST_CODE = 200;
|
||||||
private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300;
|
private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300;
|
||||||
|
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_post_text_activity)
|
@BindView(R.id.coordinator_layout_post_text_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@@ -119,10 +121,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
MaterialButton rulesButton;
|
MaterialButton rulesButton;
|
||||||
@BindView(R.id.divider_1_post_text_activity)
|
@BindView(R.id.divider_1_post_text_activity)
|
||||||
MaterialDivider divider1;
|
MaterialDivider divider1;
|
||||||
@BindView(R.id.flair_custom_text_view_post_text_activity)
|
|
||||||
CustomTextView flairTextView;
|
|
||||||
@BindView(R.id.spoiler_custom_text_view_post_text_activity)
|
|
||||||
CustomTextView spoilerTextView;
|
|
||||||
@BindView(R.id.nsfw_custom_text_view_post_text_activity)
|
@BindView(R.id.nsfw_custom_text_view_post_text_activity)
|
||||||
CustomTextView nsfwTextView;
|
CustomTextView nsfwTextView;
|
||||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_text_activity)
|
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_text_activity)
|
||||||
@@ -164,6 +162,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String iconUrl;
|
private String iconUrl;
|
||||||
private String subredditName;
|
private String subredditName;
|
||||||
|
private SubscribedSubredditData communityData;
|
||||||
private boolean subredditSelected = false;
|
private boolean subredditSelected = false;
|
||||||
private boolean subredditIsUser;
|
private boolean subredditIsUser;
|
||||||
private boolean loadSubredditIconSuccessful = true;
|
private boolean loadSubredditIconSuccessful = true;
|
||||||
@@ -219,6 +218,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||||
|
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||||
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
||||||
@@ -245,7 +245,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
if (subredditName != null) {
|
if (subredditName != null) {
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
if (!loadSubredditIconSuccessful) {
|
if (!loadSubredditIconSuccessful) {
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
}
|
}
|
||||||
@@ -256,17 +255,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
mPostingSnackbar.show();
|
mPostingSnackbar.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flair != null) {
|
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
|
||||||
if (isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
}
|
|
||||||
if (isNSFW) {
|
if (isNSFW) {
|
||||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||||
@@ -280,11 +268,25 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||||
loadSubredditIconSuccessful = false;
|
loadSubredditIconSuccessful = false;
|
||||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||||
|
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||||
|
{
|
||||||
|
communityData = new SubscribedSubredditData(subredditData);
|
||||||
|
subredditName = communityData.getName();
|
||||||
|
subredditIsUser = false;
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
mGlide.load(R.drawable.subreddit_default_icon)
|
mGlide.load(R.drawable.subreddit_default_icon)
|
||||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||||
@@ -318,44 +320,12 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
if (subredditIsUser) {
|
if (subredditIsUser) {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||||
} else {
|
} else {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||||
}
|
}
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
flairTextView.setOnClickListener(view -> {
|
|
||||||
if (flair == null) {
|
|
||||||
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
if (subredditIsUser) {
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
|
||||||
} else {
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
|
||||||
}
|
|
||||||
flairSelectionBottomSheetFragment.setArguments(bundle);
|
|
||||||
flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
|
|
||||||
} else {
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
spoilerTextView.setOnClickListener(view -> {
|
|
||||||
if (!isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
isSpoiler = true;
|
|
||||||
} else {
|
|
||||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
isSpoiler = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
nsfwTextView.setOnClickListener(view -> {
|
nsfwTextView.setOnClickListener(view -> {
|
||||||
if (!isNSFW) {
|
if (!isNSFW) {
|
||||||
@@ -448,8 +418,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
nsfwTextView.setTextColor(primaryTextColor);
|
nsfwTextView.setTextColor(primaryTextColor);
|
||||||
titleEditText.setTextColor(primaryTextColor);
|
titleEditText.setTextColor(primaryTextColor);
|
||||||
titleEditText.setHintTextColor(secondaryTextColor);
|
titleEditText.setHintTextColor(secondaryTextColor);
|
||||||
@@ -459,8 +427,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
subredditNameTextView.setTypeface(typeface);
|
subredditNameTextView.setTypeface(typeface);
|
||||||
rulesButton.setTypeface(typeface);
|
rulesButton.setTypeface(typeface);
|
||||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||||
flairTextView.setTypeface(typeface);
|
|
||||||
spoilerTextView.setTypeface(typeface);
|
|
||||||
nsfwTextView.setTypeface(typeface);
|
nsfwTextView.setTypeface(typeface);
|
||||||
titleEditText.setTypeface(typeface);
|
titleEditText.setTypeface(typeface);
|
||||||
}
|
}
|
||||||
@@ -562,18 +528,12 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
|
|
||||||
mPostingSnackbar.show();
|
mPostingSnackbar.show();
|
||||||
|
|
||||||
String subredditName;
|
|
||||||
if (subredditIsUser) {
|
|
||||||
subredditName = "u_" + subredditNameTextView.getText().toString();
|
|
||||||
} else {
|
|
||||||
subredditName = subredditNameTextView.getText().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
Intent intent = new Intent(this, SubmitPostService.class);
|
Intent intent = new Intent(this, SubmitPostService.class);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_CONTENT, contentEditText.getText().toString());
|
intent.putExtra(SubmitPostService.EXTRA_BODY, contentEditText.getText().toString());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_SELF);
|
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_SELF);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
||||||
@@ -599,6 +559,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||||
@@ -617,19 +578,16 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
subredditName = communityData.getName();
|
||||||
|
iconUrl = communityData.getIconUrl();
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
subredditIsUser = false;
|
||||||
|
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
|
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
flair = null;
|
||||||
|
|
||||||
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
||||||
@@ -658,10 +616,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
@Override
|
@Override
|
||||||
public void flairSelected(Flair flair) {
|
public void flairSelected(Flair flair) {
|
||||||
this.flair = flair;
|
this.flair = flair;
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|||||||
import eu.toldi.infinityforlemmy.events.SubmitVideoOrGifPostEvent;
|
import eu.toldi.infinityforlemmy.events.SubmitVideoOrGifPostEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
import pl.droidsonroids.gif.GifImageView;
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
@@ -92,6 +95,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||||
private static final int PICK_VIDEO_REQUEST_CODE = 1;
|
private static final int PICK_VIDEO_REQUEST_CODE = 1;
|
||||||
private static final int CAPTURE_VIDEO_REQUEST_CODE = 2;
|
private static final int CAPTURE_VIDEO_REQUEST_CODE = 2;
|
||||||
|
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_post_video_activity)
|
@BindView(R.id.coordinator_layout_post_video_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@@ -113,10 +117,6 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
MaterialButton rulesButton;
|
MaterialButton rulesButton;
|
||||||
@BindView(R.id.divider_1_post_video_activity)
|
@BindView(R.id.divider_1_post_video_activity)
|
||||||
MaterialDivider divider1;
|
MaterialDivider divider1;
|
||||||
@BindView(R.id.flair_custom_text_view_post_video_activity)
|
|
||||||
CustomTextView flairTextView;
|
|
||||||
@BindView(R.id.spoiler_custom_text_view_post_video_activity)
|
|
||||||
CustomTextView spoilerTextView;
|
|
||||||
@BindView(R.id.nsfw_custom_text_view_post_video_activity)
|
@BindView(R.id.nsfw_custom_text_view_post_video_activity)
|
||||||
CustomTextView nsfwTextView;
|
CustomTextView nsfwTextView;
|
||||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_video_activity)
|
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_video_activity)
|
||||||
@@ -168,6 +168,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
private String iconUrl;
|
private String iconUrl;
|
||||||
private String subredditName;
|
private String subredditName;
|
||||||
|
private SubscribedSubredditData communityData;
|
||||||
private boolean subredditSelected = false;
|
private boolean subredditSelected = false;
|
||||||
private boolean subredditIsUser;
|
private boolean subredditIsUser;
|
||||||
private Uri videoUri;
|
private Uri videoUri;
|
||||||
@@ -235,6 +236,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
|
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||||
@@ -266,7 +268,6 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
if (subredditName != null) {
|
if (subredditName != null) {
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
if (!loadSubredditIconSuccessful) {
|
if (!loadSubredditIconSuccessful) {
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
}
|
}
|
||||||
@@ -277,17 +278,6 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
mPostingSnackbar.show();
|
mPostingSnackbar.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flair != null) {
|
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
|
||||||
if (isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
}
|
|
||||||
if (isNSFW) {
|
if (isNSFW) {
|
||||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||||
@@ -301,11 +291,25 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||||
loadSubredditIconSuccessful = false;
|
loadSubredditIconSuccessful = false;
|
||||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||||
|
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||||
|
{
|
||||||
|
communityData = new SubscribedSubredditData(subredditData);
|
||||||
|
subredditName = communityData.getName();
|
||||||
|
subredditIsUser = false;
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
mGlide.load(R.drawable.subreddit_default_icon)
|
mGlide.load(R.drawable.subreddit_default_icon)
|
||||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||||
@@ -341,40 +345,12 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
if (subredditIsUser) {
|
if (subredditIsUser) {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||||
} else {
|
} else {
|
||||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||||
}
|
}
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
flairTextView.setOnClickListener(view -> {
|
|
||||||
if (flair == null) {
|
|
||||||
mFlairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
|
||||||
mFlairSelectionBottomSheetFragment.setArguments(bundle);
|
|
||||||
mFlairSelectionBottomSheetFragment.show(getSupportFragmentManager(), mFlairSelectionBottomSheetFragment.getTag());
|
|
||||||
} else {
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
spoilerTextView.setOnClickListener(view -> {
|
|
||||||
if (!isSpoiler) {
|
|
||||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
|
||||||
spoilerTextView.setTextColor(spoilerTextColor);
|
|
||||||
isSpoiler = true;
|
|
||||||
} else {
|
|
||||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
isSpoiler = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
nsfwTextView.setOnClickListener(view -> {
|
nsfwTextView.setOnClickListener(view -> {
|
||||||
if (!isNSFW) {
|
if (!isNSFW) {
|
||||||
@@ -468,20 +444,17 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
nsfwTextView.setTextColor(primaryTextColor);
|
nsfwTextView.setTextColor(primaryTextColor);
|
||||||
titleEditText.setTextColor(primaryTextColor);
|
titleEditText.setTextColor(primaryTextColor);
|
||||||
titleEditText.setHintTextColor(secondaryTextColor);
|
titleEditText.setHintTextColor(secondaryTextColor);
|
||||||
applyFABTheme(captureFab);
|
boolean circularFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false);
|
||||||
applyFABTheme(selectFromLibraryFab);
|
applyFABTheme(captureFab, circularFab);
|
||||||
|
applyFABTheme(selectFromLibraryFab, circularFab);
|
||||||
selectAgainTextView.setTextColor(mCustomThemeWrapper.getColorAccent());
|
selectAgainTextView.setTextColor(mCustomThemeWrapper.getColorAccent());
|
||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
subredditNameTextView.setTypeface(typeface);
|
subredditNameTextView.setTypeface(typeface);
|
||||||
rulesButton.setTypeface(typeface);
|
rulesButton.setTypeface(typeface);
|
||||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||||
flairTextView.setTypeface(typeface);
|
|
||||||
spoilerTextView.setTypeface(typeface);
|
|
||||||
nsfwTextView.setTypeface(typeface);
|
nsfwTextView.setTypeface(typeface);
|
||||||
titleEditText.setTypeface(typeface);
|
titleEditText.setTypeface(typeface);
|
||||||
selectAgainTextView.setTypeface(typeface);
|
selectAgainTextView.setTypeface(typeface);
|
||||||
@@ -589,7 +562,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
Intent intent = new Intent(this, SubmitPostService.class);
|
Intent intent = new Intent(this, SubmitPostService.class);
|
||||||
intent.setData(videoUri);
|
intent.setData(videoUri);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
||||||
@@ -637,6 +610,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||||
|
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||||
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
||||||
@@ -657,19 +631,16 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
subredditName = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||||
iconUrl = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
subredditName = communityData.getName();
|
||||||
|
iconUrl = communityData.getIconUrl();
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditIsUser = data.getBooleanExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER, false);
|
subredditIsUser = false;
|
||||||
|
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
|
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
flair = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -707,10 +678,6 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
@Override
|
@Override
|
||||||
public void flairSelected(Flair flair) {
|
public void flairSelected(Flair flair) {
|
||||||
this.flair = flair;
|
this.flair = flair;
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import android.content.SharedPreferences;
|
|||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
@@ -31,7 +30,6 @@ import javax.inject.Named;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import eu.toldi.infinityforlemmy.FetchRules;
|
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
@@ -41,6 +39,8 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.widget.SliderPanel;
|
import eu.toldi.infinityforlemmy.customviews.slidr.widget.SliderPanel;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
@@ -134,26 +134,27 @@ public class RulesActivity extends BaseActivity {
|
|||||||
|
|
||||||
mAdapter = new RulesRecyclerViewAdapter(this, mCustomThemeWrapper, sliderPanel);
|
mAdapter = new RulesRecyclerViewAdapter(this, mCustomThemeWrapper, sliderPanel);
|
||||||
recyclerView.setAdapter(mAdapter);
|
recyclerView.setAdapter(mAdapter);
|
||||||
|
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), mSubredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||||
FetchRules.fetchRules(mExecutor, new Handler(), mAccessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit, mAccessToken, mSubredditName, new FetchRules.FetchRulesListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void success(ArrayList<Rule> rules) {
|
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||||
progressBar.setVisibility(View.GONE);
|
progressBar.setVisibility(View.GONE);
|
||||||
if (rules == null || rules.size() == 0) {
|
String description = subredditData.getDescription();
|
||||||
|
if (description == null || description.isEmpty()) {
|
||||||
errorTextView.setVisibility(View.VISIBLE);
|
errorTextView.setVisibility(View.VISIBLE);
|
||||||
errorTextView.setText(R.string.no_rule);
|
errorTextView.setText(R.string.no_rule);
|
||||||
errorTextView.setOnClickListener(view -> {
|
errorTextView.setOnClickListener(view -> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
ArrayList<Rule> rules = new ArrayList<>();
|
||||||
|
rules.add(new Rule("Rules", description));
|
||||||
mAdapter.changeDataset(rules);
|
mAdapter.changeDataset(rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void failed() {
|
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||||
displayError();
|
displayError();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -184,21 +185,24 @@ public class RulesActivity extends BaseActivity {
|
|||||||
errorTextView.setOnClickListener(view -> {
|
errorTextView.setOnClickListener(view -> {
|
||||||
progressBar.setVisibility(View.VISIBLE);
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
errorTextView.setVisibility(View.GONE);
|
errorTextView.setVisibility(View.GONE);
|
||||||
FetchRules.fetchRules(mExecutor, new Handler(), mAccessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit, mAccessToken, mSubredditName, new FetchRules.FetchRulesListener() {
|
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), mSubredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success(ArrayList<Rule> rules) {
|
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||||
progressBar.setVisibility(View.GONE);
|
progressBar.setVisibility(View.GONE);
|
||||||
if (rules == null || rules.size() == 0) {
|
String description = subredditData.getDescription();
|
||||||
|
if (description == null || description.isEmpty()) {
|
||||||
errorTextView.setVisibility(View.VISIBLE);
|
errorTextView.setVisibility(View.VISIBLE);
|
||||||
errorTextView.setText(R.string.no_rule);
|
errorTextView.setText(R.string.no_rule);
|
||||||
errorTextView.setOnClickListener(view -> {
|
errorTextView.setOnClickListener(view -> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
ArrayList<Rule> rules = new ArrayList<>();
|
||||||
|
rules.add(new Rule("Rules", description));
|
||||||
mAdapter.changeDataset(rules);
|
mAdapter.changeDataset(rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void failed() {
|
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||||
displayError();
|
displayError();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQuery;
|
|||||||
import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQueryViewModel;
|
import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQueryViewModel;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
@@ -128,6 +129,8 @@ public class SearchActivity extends BaseActivity {
|
|||||||
private String query;
|
private String query;
|
||||||
private String subredditName;
|
private String subredditName;
|
||||||
|
|
||||||
|
private SubscribedSubredditData communityData;
|
||||||
|
|
||||||
private String communityQualifiedName;
|
private String communityQualifiedName;
|
||||||
private boolean subredditIsUser;
|
private boolean subredditIsUser;
|
||||||
private boolean searchOnlySubreddits;
|
private boolean searchOnlySubreddits;
|
||||||
@@ -183,7 +186,7 @@ public class SearchActivity extends BaseActivity {
|
|||||||
subredditNameList.add(subredditData.getName());
|
subredditNameList.add(subredditData.getName());
|
||||||
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, subredditNameList);
|
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, subredditNameList);
|
||||||
} else {
|
} else {
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, subredditData.getName());
|
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, new SubscribedSubredditData(subredditData));
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, subredditData.getIconUrl());
|
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, subredditData.getIconUrl());
|
||||||
}
|
}
|
||||||
setResult(Activity.RESULT_OK, returnIntent);
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
@@ -429,8 +432,9 @@ public class SearchActivity extends BaseActivity {
|
|||||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||||
if (resultCode == RESULT_OK && data != null) {
|
if (resultCode == RESULT_OK && data != null) {
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||||
subredditName = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||||
subredditIsUser = data.getBooleanExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER, false);
|
subredditName = communityData.getName();
|
||||||
|
subredditIsUser = false;
|
||||||
|
|
||||||
if (subredditName == null) {
|
if (subredditName == null) {
|
||||||
subredditNameTextView.setText(R.string.all_communities);
|
subredditNameTextView.setText(R.string.all_communities);
|
||||||
@@ -442,9 +446,9 @@ public class SearchActivity extends BaseActivity {
|
|||||||
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
||||||
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, data.getStringArrayListExtra(SearchSubredditsResultActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES));
|
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, data.getStringArrayListExtra(SearchSubredditsResultActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES));
|
||||||
} else {
|
} else {
|
||||||
String name = data.getStringExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
SubscribedSubredditData communityData = data.getParcelableExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||||
String iconUrl = data.getStringExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
String iconUrl = data.getStringExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name);
|
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, communityData);
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl);
|
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl);
|
||||||
}
|
}
|
||||||
setResult(Activity.RESULT_OK, returnIntent);
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||||
applyTabLayoutTheme(tabLayout);
|
applyTabLayoutTheme(tabLayout);
|
||||||
applyFABTheme(fab);
|
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindView(Bundle savedInstanceState) {
|
private void bindView(Bundle savedInstanceState) {
|
||||||
@@ -558,10 +558,6 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
goToUser();
|
goToUser();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FABMoreOptionsBottomSheetFragment.FAB_RANDOM: {
|
|
||||||
random();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
sectionsPagerAdapter.hideReadPosts();
|
sectionsPagerAdapter.hideReadPosts();
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.fragments.SubredditListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.SubredditListingFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
public class SearchSubredditsResultActivity extends BaseActivity implements ActivityToolbarInterface {
|
public class SearchSubredditsResultActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||||
@@ -144,10 +146,10 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti
|
|||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getSelectedSubreddit(String name, String iconUrl) {
|
public void getSelectedSubreddit(SubredditData subredditData) {
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name);
|
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, new SubscribedSubredditData(subredditData));
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl);
|
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, subredditData.getIconUrl());
|
||||||
setResult(Activity.RESULT_OK, returnIntent);
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
protected void applyCustomTheme() {
|
protected void applyCustomTheme() {
|
||||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||||
applyFABTheme(fab);
|
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ import eu.toldi.infinityforlemmy.events.SubmitCrosspostEvent;
|
|||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||||
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
@@ -87,6 +88,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
private static final String IS_NSFW_STATE = "INS";
|
private static final String IS_NSFW_STATE = "INS";
|
||||||
|
|
||||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||||
|
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_submit_crosspost_activity)
|
@BindView(R.id.coordinator_layout_submit_crosspost_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@@ -159,6 +161,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
private Post post;
|
private Post post;
|
||||||
private String iconUrl;
|
private String iconUrl;
|
||||||
private String subredditName;
|
private String subredditName;
|
||||||
|
private SubscribedSubredditData communityData;
|
||||||
private boolean subredditSelected = false;
|
private boolean subredditSelected = false;
|
||||||
private boolean subredditIsUser;
|
private boolean subredditIsUser;
|
||||||
private boolean loadSubredditIconSuccessful = true;
|
private boolean loadSubredditIconSuccessful = true;
|
||||||
@@ -212,6 +215,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
|
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||||
@@ -566,12 +570,12 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
|
|
||||||
Intent intent = new Intent(this, SubmitPostService.class);
|
Intent intent = new Intent(this, SubmitPostService.class);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||||
if (post.isCrosspost()) {
|
if (post.isCrosspost()) {
|
||||||
intent.putExtra(SubmitPostService.EXTRA_CONTENT, "t3_" + post.getCrosspostParentId());
|
intent.putExtra(SubmitPostService.EXTRA_BODY, "t3_" + post.getCrosspostParentId());
|
||||||
} else {
|
} else {
|
||||||
intent.putExtra(SubmitPostService.EXTRA_CONTENT, post.getFullName());
|
intent.putExtra(SubmitPostService.EXTRA_BODY, post.getFullName());
|
||||||
}
|
}
|
||||||
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_CROSSPOST);
|
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_CROSSPOST);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||||
@@ -604,6 +608,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||||
|
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||||
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
||||||
@@ -620,10 +625,11 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
subredditName = communityData.getName();
|
||||||
|
iconUrl = communityData.getIconUrl();
|
||||||
subredditSelected = true;
|
subredditSelected = true;
|
||||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
subredditIsUser = false;
|
||||||
|
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import org.greenrobot.eventbus.Subscribe;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
@@ -33,7 +32,6 @@ import javax.inject.Named;
|
|||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import eu.toldi.infinityforlemmy.ActivityToolbarInterface;
|
import eu.toldi.infinityforlemmy.ActivityToolbarInterface;
|
||||||
import eu.toldi.infinityforlemmy.AnyAccountAccessTokenAuthenticator;
|
|
||||||
import eu.toldi.infinityforlemmy.FetchSubscribedThing;
|
import eu.toldi.infinityforlemmy.FetchSubscribedThing;
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
@@ -49,17 +47,12 @@ import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
|||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subscribeduser.SubscribedUserData;
|
import eu.toldi.infinityforlemmy.subscribeduser.SubscribedUserData;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import okhttp3.ConnectionPool;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class SubredditSelectionActivity extends BaseActivity implements ActivityToolbarInterface {
|
public class SubredditSelectionActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||||
|
|
||||||
public static final String EXTRA_SPECIFIED_ACCOUNT = "ESA";
|
public static final String EXTRA_SPECIFIED_ACCOUNT = "ESA";
|
||||||
public static final String EXTRA_EXTRA_CLEAR_SELECTION = "EECS";
|
public static final String EXTRA_EXTRA_CLEAR_SELECTION = "EECS";
|
||||||
public static final String EXTRA_RETURN_SUBREDDIT_NAME = "ERSN";
|
public static final String EXTRA_RETURN_COMMUNITY_DATA = "ERCD";
|
||||||
public static final String EXTRA_RETURN_SUBREDDIT_ICON_URL = "ERSIURL";
|
|
||||||
public static final String EXTRA_RETURN_SUBREDDIT_IS_USER = "ERSIU";
|
|
||||||
|
|
||||||
private static final int SUBREDDIT_SEARCH_REQUEST_CODE = 0;
|
private static final int SUBREDDIT_SEARCH_REQUEST_CODE = 0;
|
||||||
private static final String INSERT_SUBSCRIBED_SUBREDDIT_STATE = "ISSS";
|
private static final String INSERT_SUBSCRIBED_SUBREDDIT_STATE = "ISSS";
|
||||||
@@ -77,9 +70,6 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
|
|||||||
@Named("no_oauth")
|
@Named("no_oauth")
|
||||||
RetrofitHolder mRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("oauth")
|
|
||||||
Retrofit mOauthRetrofit;
|
|
||||||
@Inject
|
|
||||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("default")
|
@Named("default")
|
||||||
@@ -142,21 +132,14 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
|
|||||||
mAccountName = specifiedAccount.getAccountName();
|
mAccountName = specifiedAccount.getAccountName();
|
||||||
mAccountProfileImageUrl = specifiedAccount.getProfileImageUrl();
|
mAccountProfileImageUrl = specifiedAccount.getProfileImageUrl();
|
||||||
|
|
||||||
mOauthRetrofit = mOauthRetrofit.newBuilder().client(new OkHttpClient.Builder().authenticator(new AnyAccountAccessTokenAuthenticator(mRetrofit.getRetrofit(), mRedditDataRoomDatabase, specifiedAccount, mCurrentAccountSharedPreferences))
|
|
||||||
.connectTimeout(30, TimeUnit.SECONDS)
|
|
||||||
.readTimeout(30, TimeUnit.SECONDS)
|
|
||||||
.writeTimeout(30, TimeUnit.SECONDS)
|
|
||||||
.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
|
|
||||||
.build())
|
|
||||||
.build();
|
|
||||||
} else {
|
} else {
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
mAccountProfileImageUrl = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null);
|
mAccountProfileImageUrl = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
mAccountProfileImageUrl = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null);
|
mAccountProfileImageUrl = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,6 +181,7 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
|
|||||||
mFragment = new SubscribedSubredditsListingFragment();
|
mFragment = new SubscribedSubredditsListingFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||||
|
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_QUALIFIED_NAME, mAccountName);
|
||||||
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_PROFILE_IMAGE_URL, mAccountProfileImageUrl);
|
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_PROFILE_IMAGE_URL, mAccountProfileImageUrl);
|
||||||
bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, true);
|
bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, true);
|
||||||
@@ -262,11 +246,9 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getSelectedSubreddit(String name, String iconUrl, boolean subredditIsUser) {
|
public void getSelectedSubreddit(SubscribedSubredditData communityData) {
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name);
|
returnIntent.putExtra(EXTRA_RETURN_COMMUNITY_DATA, communityData);
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl);
|
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_IS_USER, subredditIsUser);
|
|
||||||
setResult(Activity.RESULT_OK, returnIntent);
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
@@ -275,13 +257,13 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
|
|||||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||||
if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {
|
if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
String name = data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
|
||||||
String iconUrl = data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
SubscribedSubredditData communityData = data.getParcelableExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||||
|
String iconUrl = communityData.getIconUrl();
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name);
|
returnIntent.putExtra(EXTRA_RETURN_COMMUNITY_DATA, communityData);
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl);
|
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_IS_USER, false);
|
|
||||||
setResult(Activity.RESULT_OK, returnIntent);
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||||
applyTabLayoutTheme(tabLayout);
|
applyTabLayoutTheme(tabLayout);
|
||||||
applyFABTheme(fab);
|
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
searchEditText.setTextColor(mCustomThemeWrapper.getToolbarPrimaryTextAndIconColor());
|
searchEditText.setTextColor(mCustomThemeWrapper.getToolbarPrimaryTextAndIconColor());
|
||||||
searchEditText.setHintTextColor(mCustomThemeWrapper.getToolbarSecondaryTextColor());
|
searchEditText.setHintTextColor(mCustomThemeWrapper.getToolbarSecondaryTextColor());
|
||||||
}
|
}
|
||||||
@@ -233,7 +233,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
});
|
});
|
||||||
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
||||||
viewPager.setAdapter(sectionsPagerAdapter);
|
viewPager.setAdapter(sectionsPagerAdapter);
|
||||||
viewPager.setOffscreenPageLimit(3);
|
viewPager.setOffscreenPageLimit(1);
|
||||||
if (viewPager.getCurrentItem() != 2) {
|
if (viewPager.getCurrentItem() != 2) {
|
||||||
fab.hide();
|
fab.hide();
|
||||||
}
|
}
|
||||||
@@ -358,7 +358,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!(!forceLoad && mInsertMultiredditSuccess)) {
|
if (!(!forceLoad && mInsertMultiredditSuccess)) {
|
||||||
loadMultiReddits();
|
//loadMultiReddits();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,7 +412,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
public void success() {
|
public void success() {
|
||||||
Toast.makeText(SubscribedThingListingActivity.this,
|
Toast.makeText(SubscribedThingListingActivity.this,
|
||||||
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
||||||
loadMultiReddits();
|
//loadMultiReddits();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -439,7 +439,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onRefreshMultiRedditsEvent(RefreshMultiRedditsEvent event) {
|
public void onRefreshMultiRedditsEvent(RefreshMultiRedditsEvent event) {
|
||||||
loadMultiReddits();
|
//loadMultiReddits();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -477,6 +477,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
@Override
|
@Override
|
||||||
public Fragment getItem(int position) {
|
public Fragment getItem(int position) {
|
||||||
switch (position) {
|
switch (position) {
|
||||||
|
default:
|
||||||
case 0: {
|
case 0: {
|
||||||
SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
|
SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
@@ -487,28 +488,12 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
case 1: {
|
|
||||||
FollowedUsersListingFragment fragment = new FollowedUsersListingFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putString(FollowedUsersListingFragment.EXTRA_ACCOUNT_NAME, mAccountName == null ? "-" : mAccountName);
|
|
||||||
bundle.putString(FollowedUsersListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
fragment.setArguments(bundle);
|
|
||||||
return fragment;
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
MultiRedditListingFragment fragment = new MultiRedditListingFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putString(MultiRedditListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
bundle.putString(MultiRedditListingFragment.EXTRA_ACCOUNT_NAME, mAccountName == null ? "-" : mAccountName);
|
|
||||||
fragment.setArguments(bundle);
|
|
||||||
return fragment;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCount() {
|
public int getCount() {
|
||||||
return 3;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
|||||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.DeleteMultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.DeleteMultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
|
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||||
@@ -131,8 +132,11 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
|
@Inject
|
||||||
|
MarkPostAsRead markPostAsRead;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
|
private String mAccountQualifiedName;
|
||||||
private String multiPath;
|
private String multiPath;
|
||||||
private Fragment mFragment;
|
private Fragment mFragment;
|
||||||
private int fabOption;
|
private int fabOption;
|
||||||
@@ -221,6 +225,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
lockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false);
|
lockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false);
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
@@ -848,7 +853,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||||
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
||||||
applyFABTheme(navigationWrapper.floatingActionButton);
|
applyFABTheme(navigationWrapper.floatingActionButton, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -868,7 +873,17 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markPostAsRead(Post post) {
|
public void markPostAsRead(Post post) {
|
||||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
markPostAsRead.markPostAsRead(post.getId(), mAccessToken, new MarkPostAsRead.MarkPostAsReadListener() {
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadSuccess() {
|
||||||
|
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadFailed() {
|
||||||
|
Toast.makeText(ViewMultiRedditDetailActivity.this, R.string.mark_post_as_read_failed, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -931,10 +946,6 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
goToUser();
|
goToUser();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FABMoreOptionsBottomSheetFragment.FAB_RANDOM: {
|
|
||||||
random();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
||||||
if (mFragment instanceof PostFragment) {
|
if (mFragment instanceof PostFragment) {
|
||||||
((PostFragment) mFragment).hideReadPosts();
|
((PostFragment) mFragment).hideReadPosts();
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
protected void applyCustomTheme() {
|
protected void applyCustomTheme() {
|
||||||
mCoordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
mCoordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(mAppBarLayout, mCollapsingToolbarLayout, mToolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(mAppBarLayout, mCollapsingToolbarLayout, mToolbar);
|
||||||
applyFABTheme(fab);
|
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
searchPanelMaterialCardView.setBackgroundTintList(ColorStateList.valueOf(mCustomThemeWrapper.getColorPrimary()));
|
searchPanelMaterialCardView.setBackgroundTintList(ColorStateList.valueOf(mCustomThemeWrapper.getColorPrimary()));
|
||||||
int searchPanelTextAndIconColor = mCustomThemeWrapper.getToolbarPrimaryTextAndIconColor();
|
int searchPanelTextAndIconColor = mCustomThemeWrapper.getToolbarPrimaryTextAndIconColor();
|
||||||
searchTextInputLayout.setBoxStrokeColor(searchPanelTextAndIconColor);
|
searchTextInputLayout.setBoxStrokeColor(searchPanelTextAndIconColor);
|
||||||
@@ -425,11 +425,11 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void deleteComment(String fullName, int position) {
|
public void deleteComment(int comment_id, int position) {
|
||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
||||||
if (fragment != null) {
|
if (fragment != null) {
|
||||||
fragment.deleteComment(fullName, position);
|
fragment.deleteComment(comment_id, position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -468,7 +468,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
comment.setSaved(true);
|
comment.setSaved(true);
|
||||||
saveComment.saveThing(mOauthRetrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
saveComment.saveThing(mRetrofit.getRetrofit(), mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
||||||
@@ -869,7 +869,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
if (postListPosition == position && post != null) {
|
if (postListPosition == position && post != null) {
|
||||||
bundle.putParcelable(ViewPostDetailFragment.EXTRA_POST_DATA, post);
|
bundle.putParcelable(ViewPostDetailFragment.EXTRA_POST_DATA, post);
|
||||||
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_LIST_POSITION, position);
|
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_LIST_POSITION, position);
|
||||||
bundle.putString(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_ID, getIntent().getStringExtra(EXTRA_SINGLE_COMMENT_ID));
|
bundle.putInt(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_ID, getIntent().getIntExtra(EXTRA_SINGLE_COMMENT_ID, 0));
|
||||||
bundle.putString(ViewPostDetailFragment.EXTRA_CONTEXT_NUMBER, getIntent().getStringExtra(EXTRA_CONTEXT_NUMBER));
|
bundle.putString(ViewPostDetailFragment.EXTRA_CONTEXT_NUMBER, getIntent().getStringExtra(EXTRA_CONTEXT_NUMBER));
|
||||||
bundle.putString(ViewPostDetailFragment.EXTRA_MESSAGE_FULLNAME, getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME));
|
bundle.putString(ViewPostDetailFragment.EXTRA_MESSAGE_FULLNAME, getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME));
|
||||||
} else {
|
} else {
|
||||||
@@ -885,12 +885,12 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (post == null) {
|
if (post == null) {
|
||||||
bundle.putString(ViewPostDetailFragment.EXTRA_POST_ID, getIntent().getStringExtra(EXTRA_POST_ID));
|
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_ID, getIntent().getIntExtra(EXTRA_POST_ID, 0));
|
||||||
} else {
|
} else {
|
||||||
bundle.putParcelable(ViewPostDetailFragment.EXTRA_POST_DATA, post);
|
bundle.putParcelable(ViewPostDetailFragment.EXTRA_POST_DATA, post);
|
||||||
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_LIST_POSITION, postListPosition);
|
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_LIST_POSITION, postListPosition);
|
||||||
}
|
}
|
||||||
bundle.putString(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_ID, getIntent().getStringExtra(EXTRA_SINGLE_COMMENT_ID));
|
bundle.putInt(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_ID, getIntent().getIntExtra(EXTRA_SINGLE_COMMENT_ID, 0));
|
||||||
bundle.putString(ViewPostDetailFragment.EXTRA_CONTEXT_NUMBER, getIntent().getStringExtra(EXTRA_CONTEXT_NUMBER));
|
bundle.putString(ViewPostDetailFragment.EXTRA_CONTEXT_NUMBER, getIntent().getStringExtra(EXTRA_CONTEXT_NUMBER));
|
||||||
bundle.putString(ViewPostDetailFragment.EXTRA_MESSAGE_FULLNAME, getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME));
|
bundle.putString(ViewPostDetailFragment.EXTRA_MESSAGE_FULLNAME, getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -229,13 +229,15 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
|||||||
}
|
}
|
||||||
if (fullnames.length() > 0) {
|
if (fullnames.length() > 0) {
|
||||||
fullnames.deleteCharAt(fullnames.length() - 1);
|
fullnames.deleteCharAt(fullnames.length() - 1);
|
||||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, fullnames.toString(),
|
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, 0,
|
||||||
new ReadMessage.ReadMessageListener() {
|
new ReadMessage.ReadMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void readSuccess() {}
|
public void readSuccess() {
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFailed() {}
|
public void readFailed() {
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -332,7 +334,7 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
|||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onPassPrivateMessageEvent(PassPrivateMessageEvent passPrivateMessageEvent) {
|
public void onPassPrivateMessageEvent(PassPrivateMessageEvent passPrivateMessageEvent) {
|
||||||
privateMessage = passPrivateMessageEvent.message;
|
/* privateMessage = passPrivateMessageEvent.message;
|
||||||
if (privateMessage != null) {
|
if (privateMessage != null) {
|
||||||
if (privateMessage.getAuthor().equals(mAccountName)) {
|
if (privateMessage.getAuthor().equals(mAccountName)) {
|
||||||
if (privateMessage.getReplies() != null) {
|
if (privateMessage.getReplies() != null) {
|
||||||
@@ -351,7 +353,7 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
|||||||
}
|
}
|
||||||
|
|
||||||
bindView();
|
bindView();
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ProvideUserAvatarCallback {
|
public interface ProvideUserAvatarCallback {
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ import eu.toldi.infinityforlemmy.fragments.SidebarFragment;
|
|||||||
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
|
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||||
@@ -196,6 +197,9 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
|
@Inject
|
||||||
|
MarkPostAsRead markPostAsRead;
|
||||||
|
|
||||||
private FragmentManager fragmentManager;
|
private FragmentManager fragmentManager;
|
||||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||||
private NavigationWrapper navigationWrapper;
|
private NavigationWrapper navigationWrapper;
|
||||||
@@ -217,7 +221,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
private boolean hideFab;
|
private boolean hideFab;
|
||||||
private boolean showBottomAppBar;
|
private boolean showBottomAppBar;
|
||||||
private boolean lockBottomAppBar;
|
private boolean lockBottomAppBar;
|
||||||
private String mMessageFullname;
|
private int mMessageFullname;
|
||||||
private String mNewAccountName;
|
private String mNewAccountName;
|
||||||
private RequestManager glide;
|
private RequestManager glide;
|
||||||
private int expandedTabTextColor;
|
private int expandedTabTextColor;
|
||||||
@@ -348,12 +352,12 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
mMessageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME);
|
mMessageFullname = getIntent().getIntExtra(EXTRA_MESSAGE_FULLNAME, 0);
|
||||||
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
||||||
} else {
|
} else {
|
||||||
mFetchSubredditInfoSuccess = savedInstanceState.getBoolean(FETCH_SUBREDDIT_INFO_STATE);
|
mFetchSubredditInfoSuccess = savedInstanceState.getBoolean(FETCH_SUBREDDIT_INFO_STATE);
|
||||||
mNCurrentOnlineSubscribers = savedInstanceState.getInt(CURRENT_ONLINE_SUBSCRIBERS_STATE);
|
mNCurrentOnlineSubscribers = savedInstanceState.getInt(CURRENT_ONLINE_SUBSCRIBERS_STATE);
|
||||||
mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE);
|
mMessageFullname = savedInstanceState.getInt(MESSAGE_FULLNAME_STATE);
|
||||||
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
||||||
|
|
||||||
if (mFetchSubredditInfoSuccess) {
|
if (mFetchSubredditInfoSuccess) {
|
||||||
@@ -416,7 +420,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
descriptionTextView.setTextColor(primaryTextColor);
|
descriptionTextView.setTextColor(primaryTextColor);
|
||||||
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
||||||
applyTabLayoutTheme(tabLayout);
|
applyTabLayoutTheme(tabLayout);
|
||||||
applyFABTheme(navigationWrapper.floatingActionButton);
|
applyFABTheme(navigationWrapper.floatingActionButton, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
subredditNameTextView.setTypeface(typeface);
|
subredditNameTextView.setTypeface(typeface);
|
||||||
subscribeSubredditChip.setTypeface(typeface);
|
subscribeSubredditChip.setTypeface(typeface);
|
||||||
@@ -550,12 +554,9 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
creationTimeTextView.setText(subredditData.getCreatedUTC());
|
creationTimeTextView.setText(subredditData.getCreatedUTC());
|
||||||
description = subredditData.getDescription();
|
description = subredditData.getDescription();
|
||||||
|
|
||||||
if (hideSubredditDescription || description.equals("")) {
|
|
||||||
descriptionTextView.setVisibility(View.GONE);
|
descriptionTextView.setVisibility(View.GONE);
|
||||||
} else {
|
|
||||||
descriptionTextView.setVisibility(View.VISIBLE);
|
|
||||||
markwon.setMarkdown(descriptionTextView, description);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (subredditData.isNSFW()) {
|
if (subredditData.isNSFW()) {
|
||||||
if (nsfwWarningBuilder == null
|
if (nsfwWarningBuilder == null
|
||||||
@@ -582,7 +583,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
subscriptionReady = false;
|
subscriptionReady = false;
|
||||||
if (getResources().getString(R.string.subscribe).contentEquals(subscribeSubredditChip.getText())) {
|
if (getResources().getString(R.string.subscribe).contentEquals(subscribeSubredditChip.getText())) {
|
||||||
CommunitySubscription.anonymousSubscribeToSubreddit(mExecutor, new Handler(),
|
CommunitySubscription.anonymousSubscribeToSubreddit(mExecutor, new Handler(),
|
||||||
mRetrofit.getRetrofit(), mRedditDataRoomDatabase, communityName,
|
mRetrofit.getRetrofit(), mRedditDataRoomDatabase, qualifiedName,
|
||||||
new CommunitySubscription.SubredditSubscriptionListener() {
|
new CommunitySubscription.SubredditSubscriptionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubredditSubscriptionSuccess() {
|
public void onSubredditSubscriptionSuccess() {
|
||||||
@@ -600,7 +601,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
CommunitySubscription.anonymousUnsubscribeToSubreddit(mExecutor, new Handler(),
|
CommunitySubscription.anonymousUnsubscribeToSubreddit(mExecutor, new Handler(),
|
||||||
mRedditDataRoomDatabase, communityName,
|
mRedditDataRoomDatabase, qualifiedName,
|
||||||
new CommunitySubscription.SubredditSubscriptionListener() {
|
new CommunitySubscription.SubredditSubscriptionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubredditSubscriptionSuccess() {
|
public void onSubredditSubscriptionSuccess() {
|
||||||
@@ -868,11 +869,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void bindView() {
|
private void bindView() {
|
||||||
if (mMessageFullname != null) {
|
if (mMessageFullname != 0) {
|
||||||
ReadMessage.readMessage(mRetrofit.getRetrofit(), mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
|
ReadMessage.readMessage(mRetrofit.getRetrofit(), mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void readSuccess() {
|
public void readSuccess() {
|
||||||
mMessageFullname = null;
|
mMessageFullname = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1174,7 +1175,8 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
} else if (itemId == R.id.action_share_view_subreddit_detail_activity) {
|
} else if (itemId == R.id.action_share_view_subreddit_detail_activity) {
|
||||||
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
||||||
shareIntent.setType("text/plain");
|
shareIntent.setType("text/plain");
|
||||||
shareIntent.putExtra(Intent.EXTRA_TEXT, qualifiedName);
|
String baseURL = mRetrofit.getBaseURL().endsWith("/") ? mRetrofit.getBaseURL() : mRetrofit.getBaseURL() + "/";
|
||||||
|
shareIntent.putExtra(Intent.EXTRA_TEXT, baseURL + "/" + qualifiedName);
|
||||||
if (shareIntent.resolveActivity(getPackageManager()) != null) {
|
if (shareIntent.resolveActivity(getPackageManager()) != null) {
|
||||||
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
||||||
} else {
|
} else {
|
||||||
@@ -1229,7 +1231,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putBoolean(FETCH_SUBREDDIT_INFO_STATE, mFetchSubredditInfoSuccess);
|
outState.putBoolean(FETCH_SUBREDDIT_INFO_STATE, mFetchSubredditInfoSuccess);
|
||||||
outState.putInt(CURRENT_ONLINE_SUBSCRIBERS_STATE, mNCurrentOnlineSubscribers);
|
outState.putInt(CURRENT_ONLINE_SUBSCRIBERS_STATE, mNCurrentOnlineSubscribers);
|
||||||
outState.putString(MESSAGE_FULLNAME_STATE, mMessageFullname);
|
outState.putInt(MESSAGE_FULLNAME_STATE, mMessageFullname);
|
||||||
outState.putString(NEW_ACCOUNT_NAME_STATE, mNewAccountName);
|
outState.putString(NEW_ACCOUNT_NAME_STATE, mNewAccountName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1278,7 +1280,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
switch (postType) {
|
switch (postType) {
|
||||||
case PostTypeBottomSheetFragment.TYPE_TEXT:
|
case PostTypeBottomSheetFragment.TYPE_TEXT:
|
||||||
intent = new Intent(this, PostTextActivity.class);
|
intent = new Intent(this, PostTextActivity.class);
|
||||||
intent.putExtra(PostTextActivity.EXTRA_SUBREDDIT_NAME, communityName);
|
intent.putExtra(PostTextActivity.EXTRA_SUBREDDIT_NAME, qualifiedName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
break;
|
break;
|
||||||
case PostTypeBottomSheetFragment.TYPE_LINK:
|
case PostTypeBottomSheetFragment.TYPE_LINK:
|
||||||
@@ -1397,10 +1399,6 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
goToUser();
|
goToUser();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FABMoreOptionsBottomSheetFragment.FAB_RANDOM: {
|
|
||||||
random();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
sectionsPagerAdapter.hideReadPosts();
|
sectionsPagerAdapter.hideReadPosts();
|
||||||
@@ -1561,7 +1559,18 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markPostAsRead(Post post) {
|
public void markPostAsRead(Post post) {
|
||||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
markPostAsRead.markPostAsRead(post.getId(), mAccessToken, new MarkPostAsRead.MarkPostAsReadListener() {
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadSuccess() {
|
||||||
|
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadFailed() {
|
||||||
|
Toast.makeText(ViewSubredditDetailActivity.this, R.string.mark_post_as_read_failed, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
|||||||
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
|
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||||
@@ -202,6 +203,9 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
MarkPostAsRead markPostAsRead;
|
||||||
public UserViewModel userViewModel;
|
public UserViewModel userViewModel;
|
||||||
private FragmentManager fragmentManager;
|
private FragmentManager fragmentManager;
|
||||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||||
@@ -210,6 +214,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
private Call<String> subredditAutocompleteCall;
|
private Call<String> subredditAutocompleteCall;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
|
private String mAccountQualifiedName;
|
||||||
private String username;
|
private String username;
|
||||||
private String qualifiedName;
|
private String qualifiedName;
|
||||||
private String description;
|
private String description;
|
||||||
@@ -228,7 +233,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
private boolean hideFab;
|
private boolean hideFab;
|
||||||
private boolean showBottomAppBar;
|
private boolean showBottomAppBar;
|
||||||
private boolean lockBottomAppBar;
|
private boolean lockBottomAppBar;
|
||||||
private String mMessageFullname;
|
private int mMessageId;
|
||||||
private String mNewAccountName;
|
private String mNewAccountName;
|
||||||
|
|
||||||
private UserData mUserData;
|
private UserData mUserData;
|
||||||
@@ -272,15 +277,16 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
lockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false);
|
lockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false);
|
||||||
|
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
mMessageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME);
|
mMessageId = getIntent().getIntExtra(EXTRA_MESSAGE_FULLNAME, 0);
|
||||||
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
||||||
} else {
|
} else {
|
||||||
mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE);
|
mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE);
|
||||||
mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE);
|
mMessageId = savedInstanceState.getInt(MESSAGE_FULLNAME_STATE);
|
||||||
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -625,7 +631,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
karmaTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
karmaTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||||
cakedayTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
cakedayTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||||
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
||||||
applyFABTheme(navigationWrapper.floatingActionButton);
|
applyFABTheme(navigationWrapper.floatingActionButton, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
descriptionTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
descriptionTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||||
subscribeUserChip.setTextColor(mCustomThemeWrapper.getChipTextColor());
|
subscribeUserChip.setTextColor(mCustomThemeWrapper.getChipTextColor());
|
||||||
applyTabLayoutTheme(tabLayout);
|
applyTabLayoutTheme(tabLayout);
|
||||||
@@ -700,11 +706,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
|
|
||||||
fixViewPager2Sensitivity(viewPager2);
|
fixViewPager2Sensitivity(viewPager2);
|
||||||
|
|
||||||
if (mMessageFullname != null) {
|
if (mMessageId != 0) {
|
||||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
|
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageId, new ReadMessage.ReadMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void readSuccess() {
|
public void readSuccess() {
|
||||||
mMessageFullname = null;
|
mMessageId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1092,12 +1098,12 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteComment(String fullName) {
|
public void deleteComment(int commentId) {
|
||||||
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||||
.setTitle(R.string.delete_this_comment)
|
.setTitle(R.string.delete_this_comment)
|
||||||
.setMessage(R.string.are_you_sure)
|
.setMessage(R.string.are_you_sure)
|
||||||
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
||||||
-> DeleteThing.delete(mOauthRetrofit, fullName, mAccessToken, new DeleteThing.DeleteThingListener() {
|
-> DeleteThing.deleteComment(mRetrofit.getRetrofit(), commentId, mAccessToken, new DeleteThing.DeleteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void deleteSuccess() {
|
public void deleteSuccess() {
|
||||||
Toast.makeText(ViewUserDetailActivity.this, R.string.delete_post_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(ViewUserDetailActivity.this, R.string.delete_post_success, Toast.LENGTH_SHORT).show();
|
||||||
@@ -1154,7 +1160,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
} else if (itemId == R.id.action_share_view_user_detail_activity) {
|
} else if (itemId == R.id.action_share_view_user_detail_activity) {
|
||||||
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
||||||
shareIntent.setType("text/plain");
|
shareIntent.setType("text/plain");
|
||||||
shareIntent.putExtra(Intent.EXTRA_TEXT, "https://www.reddit.com/user/" + username);
|
String baseURL = mRetrofit.getBaseURL().endsWith("/") ? mRetrofit.getBaseURL() : mRetrofit.getBaseURL() + "/";
|
||||||
|
shareIntent.putExtra(Intent.EXTRA_TEXT, baseURL + qualifiedName);
|
||||||
if (shareIntent.resolveActivity(getPackageManager()) != null) {
|
if (shareIntent.resolveActivity(getPackageManager()) != null) {
|
||||||
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
||||||
} else {
|
} else {
|
||||||
@@ -1261,7 +1268,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putBoolean(FETCH_USER_INFO_STATE, mFetchUserInfoSuccess);
|
outState.putBoolean(FETCH_USER_INFO_STATE, mFetchUserInfoSuccess);
|
||||||
outState.putString(MESSAGE_FULLNAME_STATE, mMessageFullname);
|
outState.putInt(MESSAGE_FULLNAME_STATE, mMessageId);
|
||||||
outState.putString(NEW_ACCOUNT_NAME_STATE, mNewAccountName);
|
outState.putString(NEW_ACCOUNT_NAME_STATE, mNewAccountName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1334,10 +1341,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
goToUser();
|
goToUser();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FABMoreOptionsBottomSheetFragment.FAB_RANDOM: {
|
|
||||||
random();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
sectionsPagerAdapter.hideReadPosts();
|
sectionsPagerAdapter.hideReadPosts();
|
||||||
@@ -1549,7 +1553,17 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markPostAsRead(Post post) {
|
public void markPostAsRead(Post post) {
|
||||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
markPostAsRead.markPostAsRead(post.getId(), mAccessToken, new MarkPostAsRead.MarkPostAsReadListener() {
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadSuccess() {
|
||||||
|
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadFailed() {
|
||||||
|
Toast.makeText(ViewUserDetailActivity.this, R.string.mark_post_as_read_failed, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
private BaseActivity mActivity;
|
private BaseActivity mActivity;
|
||||||
private Retrofit mOauthRetrofit;
|
private Retrofit retrofit;
|
||||||
private Locale mLocale;
|
private Locale mLocale;
|
||||||
private Markwon mMarkwon;
|
private Markwon mMarkwon;
|
||||||
private RecyclerView.RecycledViewPool recycledViewPool;
|
private RecyclerView.RecycledViewPool recycledViewPool;
|
||||||
@@ -110,7 +110,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
String accountName, RetryLoadingMoreCallback retryLoadingMoreCallback) {
|
String accountName, RetryLoadingMoreCallback retryLoadingMoreCallback) {
|
||||||
super(DIFF_CALLBACK);
|
super(DIFF_CALLBACK);
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
mOauthRetrofit = oauthRetrofit;
|
retrofit = oauthRetrofit;
|
||||||
mCommentColor = customThemeWrapper.getCommentColor();
|
mCommentColor = customThemeWrapper.getCommentColor();
|
||||||
int commentSpoilerBackgroundColor = mCommentColor | 0xFF000000;
|
int commentSpoilerBackgroundColor = mCommentColor | 0xFF000000;
|
||||||
mLocale = locale;
|
mLocale = locale;
|
||||||
@@ -190,7 +190,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
if (holder instanceof CommentViewHolder) {
|
if (holder instanceof CommentViewHolder) {
|
||||||
Comment comment = getItem(holder.getBindingAdapterPosition());
|
Comment comment = getItem(holder.getBindingAdapterPosition());
|
||||||
if (comment != null) {
|
if (comment != null) {
|
||||||
String name = "r/" + comment.getCommunityName();
|
String name = comment.getCommunityQualifiedName();
|
||||||
((CommentViewHolder) holder).authorTextView.setText(name);
|
((CommentViewHolder) holder).authorTextView.setText(name);
|
||||||
((CommentViewHolder) holder).authorTextView.setTextColor(mSubredditColor);
|
((CommentViewHolder) holder).authorTextView.setTextColor(mSubredditColor);
|
||||||
|
|
||||||
@@ -437,6 +437,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
if (comment != null) {
|
if (comment != null) {
|
||||||
Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
||||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, comment.getCommunityName());
|
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, comment.getCommunityName());
|
||||||
|
intent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, comment.getCommunityQualifiedName());
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -469,7 +470,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
Comment comment = getItem(getBindingAdapterPosition());
|
Comment comment = getItem(getBindingAdapterPosition());
|
||||||
if (comment != null) {
|
if (comment != null) {
|
||||||
Intent intent = new Intent(mActivity, ViewPostDetailActivity.class);
|
Intent intent = new Intent(mActivity, ViewPostDetailActivity.class);
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getLinkId());
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getPostId());
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
}
|
}
|
||||||
@@ -537,7 +538,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
comment.getScore() + comment.getVoteType()));
|
comment.getScore() + comment.getVoteType()));
|
||||||
|
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
@@ -607,7 +608,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
comment.getScore() + comment.getVoteType()));
|
comment.getScore() + comment.getVoteType()));
|
||||||
|
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
@@ -650,7 +651,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
SaveComment saveComment = new SaveComment();
|
SaveComment saveComment = new SaveComment();
|
||||||
if (comment.isSaved()) {
|
if (comment.isSaved()) {
|
||||||
comment.setSaved(false);
|
comment.setSaved(false);
|
||||||
saveComment.unsaveThing(mOauthRetrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
saveComment.unsaveThing(retrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
comment.setSaved(false);
|
comment.setSaved(false);
|
||||||
@@ -671,7 +672,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
comment.setSaved(true);
|
comment.setSaved(true);
|
||||||
saveComment.saveThing(mOauthRetrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
saveComment.saveThing(retrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
comment.setSaved(true);
|
comment.setSaved(true);
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
|||||||
|
|
||||||
public CommentsRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
|
public CommentsRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
|
||||||
CustomThemeWrapper customThemeWrapper,
|
CustomThemeWrapper customThemeWrapper,
|
||||||
Executor executor, Retrofit retrofit, Retrofit oauthRetrofit,
|
Executor executor, Retrofit retrofit,
|
||||||
String accessToken, String accountName,
|
String accessToken, String accountName,
|
||||||
Post post, Locale locale, Integer singleCommentId,
|
Post post, Locale locale, Integer singleCommentId,
|
||||||
boolean isSingleCommentThreadMode,
|
boolean isSingleCommentThreadMode,
|
||||||
@@ -171,7 +171,6 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
|||||||
mFragment = fragment;
|
mFragment = fragment;
|
||||||
mExecutor = executor;
|
mExecutor = executor;
|
||||||
mRetrofit = retrofit;
|
mRetrofit = retrofit;
|
||||||
mOauthRetrofit = oauthRetrofit;
|
|
||||||
mGlide = Glide.with(activity);
|
mGlide = Glide.with(activity);
|
||||||
mSecondaryTextColor = customThemeWrapper.getSecondaryTextColor();
|
mSecondaryTextColor = customThemeWrapper.getSecondaryTextColor();
|
||||||
mCommentTextColor = customThemeWrapper.getCommentColor();
|
mCommentTextColor = customThemeWrapper.getCommentColor();
|
||||||
@@ -1570,7 +1569,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
comment.setSaved(true);
|
comment.setSaved(true);
|
||||||
saveComment.saveThing(mOauthRetrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
saveComment.saveThing(mRetrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
comment.setSaved(true);
|
comment.setSaved(true);
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
private SharedPreferences mSharedPreferences;
|
private SharedPreferences mSharedPreferences;
|
||||||
private SharedPreferences mCurrentAccountSharedPreferences;
|
private SharedPreferences mCurrentAccountSharedPreferences;
|
||||||
private Executor mExecutor;
|
private Executor mExecutor;
|
||||||
private Retrofit mOauthRetrofit;
|
private Retrofit retrofit;
|
||||||
private Retrofit mGfycatRetrofit;
|
private Retrofit mGfycatRetrofit;
|
||||||
private Retrofit mRedgifsRetrofit;
|
private Retrofit mRedgifsRetrofit;
|
||||||
private Provider<StreamableAPI> mStreamableApiProvider;
|
private Provider<StreamableAPI> mStreamableApiProvider;
|
||||||
@@ -237,7 +237,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
mSharedPreferences = sharedPreferences;
|
mSharedPreferences = sharedPreferences;
|
||||||
mCurrentAccountSharedPreferences = currentAccountSharedPreferences;
|
mCurrentAccountSharedPreferences = currentAccountSharedPreferences;
|
||||||
mExecutor = executor;
|
mExecutor = executor;
|
||||||
mOauthRetrofit = oauthRetrofit;
|
retrofit = oauthRetrofit;
|
||||||
mGfycatRetrofit = gfycatRetrofit;
|
mGfycatRetrofit = gfycatRetrofit;
|
||||||
mRedgifsRetrofit = redgifsRetrofit;
|
mRedgifsRetrofit = redgifsRetrofit;
|
||||||
mStreamableApiProvider = streambleApiProvider;
|
mStreamableApiProvider = streambleApiProvider;
|
||||||
@@ -2327,7 +2327,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
@@ -2419,7 +2419,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
@@ -2480,7 +2480,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
SavePost savePost = new SavePost();
|
SavePost savePost = new SavePost();
|
||||||
if (post.isSaved()) {
|
if (post.isSaved()) {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||||
savePost.unsaveThing(mOauthRetrofit, mAccessToken, post.getId(),
|
savePost.unsaveThing(retrofit, mAccessToken, post.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
@@ -2504,7 +2504,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||||
savePost.saveThing(mOauthRetrofit, mAccessToken, post.getId(),
|
savePost.saveThing(retrofit, mAccessToken, post.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
@@ -3653,7 +3653,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
@@ -3745,7 +3745,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
@@ -3808,7 +3808,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
SavePost savePost = new SavePost();
|
SavePost savePost = new SavePost();
|
||||||
if (post.isSaved()) {
|
if (post.isSaved()) {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||||
savePost.unsaveThing(mOauthRetrofit, mAccessToken, post.getId(),
|
savePost.unsaveThing(retrofit, mAccessToken, post.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
@@ -3832,7 +3832,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||||
savePost.saveThing(mOauthRetrofit, mAccessToken, post.getId(),
|
savePost.saveThing(retrofit, mAccessToken, post.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
|
|||||||
@@ -19,10 +19,24 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
import eu.toldi.infinityforlemmy.NetworkState;
|
||||||
|
import eu.toldi.infinityforlemmy.R;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.ViewPostDetailActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.ViewPrivateMessagesActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
import eu.toldi.infinityforlemmy.events.ChangeInboxCountEvent;
|
||||||
|
import eu.toldi.infinityforlemmy.markdown.RedditHeadingPlugin;
|
||||||
|
import eu.toldi.infinityforlemmy.markdown.SpoilerAwareMovementMethod;
|
||||||
|
import eu.toldi.infinityforlemmy.markdown.SpoilerParserPlugin;
|
||||||
|
import eu.toldi.infinityforlemmy.markdown.SuperscriptPlugin;
|
||||||
|
import eu.toldi.infinityforlemmy.message.CommentInteraction;
|
||||||
|
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
||||||
|
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||||
import io.noties.markwon.Markwon;
|
import io.noties.markwon.Markwon;
|
||||||
import io.noties.markwon.MarkwonConfiguration;
|
import io.noties.markwon.MarkwonConfiguration;
|
||||||
@@ -33,40 +47,25 @@ import io.noties.markwon.inlineparser.HtmlInlineProcessor;
|
|||||||
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin;
|
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin;
|
||||||
import io.noties.markwon.linkify.LinkifyPlugin;
|
import io.noties.markwon.linkify.LinkifyPlugin;
|
||||||
import io.noties.markwon.movement.MovementMethodPlugin;
|
import io.noties.markwon.movement.MovementMethodPlugin;
|
||||||
import eu.toldi.infinityforlemmy.NetworkState;
|
|
||||||
import eu.toldi.infinityforlemmy.R;
|
|
||||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
|
||||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
|
||||||
import eu.toldi.infinityforlemmy.activities.ViewPrivateMessagesActivity;
|
|
||||||
import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
|
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|
||||||
import eu.toldi.infinityforlemmy.events.ChangeInboxCountEvent;
|
|
||||||
import eu.toldi.infinityforlemmy.markdown.RedditHeadingPlugin;
|
|
||||||
import eu.toldi.infinityforlemmy.markdown.SpoilerAwareMovementMethod;
|
|
||||||
import eu.toldi.infinityforlemmy.markdown.SpoilerParserPlugin;
|
|
||||||
import eu.toldi.infinityforlemmy.markdown.SuperscriptPlugin;
|
|
||||||
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
|
||||||
import eu.toldi.infinityforlemmy.message.Message;
|
|
||||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, RecyclerView.ViewHolder> {
|
public class MessageRecyclerViewAdapter extends PagedListAdapter<CommentInteraction, RecyclerView.ViewHolder> {
|
||||||
private static final int VIEW_TYPE_DATA = 0;
|
private static final int VIEW_TYPE_DATA = 0;
|
||||||
private static final int VIEW_TYPE_ERROR = 1;
|
private static final int VIEW_TYPE_ERROR = 1;
|
||||||
private static final int VIEW_TYPE_LOADING = 2;
|
private static final int VIEW_TYPE_LOADING = 2;
|
||||||
private static final DiffUtil.ItemCallback<Message> DIFF_CALLBACK = new DiffUtil.ItemCallback<>() {
|
private static final DiffUtil.ItemCallback<CommentInteraction> DIFF_CALLBACK = new DiffUtil.ItemCallback<>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean areItemsTheSame(@NonNull Message message, @NonNull Message t1) {
|
public boolean areItemsTheSame(@NonNull CommentInteraction message, @NonNull CommentInteraction t1) {
|
||||||
return message.getId().equals(t1.getId());
|
return message.getComment().getId() == t1.getComment().getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean areContentsTheSame(@NonNull Message message, @NonNull Message t1) {
|
public boolean areContentsTheSame(@NonNull CommentInteraction message, @NonNull CommentInteraction t1) {
|
||||||
return message.getBody().equals(t1.getBody());
|
return message.getComment().getCommentMarkdown().equals(t1.getComment().getCommentMarkdown());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private BaseActivity mActivity;
|
private BaseActivity mActivity;
|
||||||
private Retrofit mOauthRetrofit;
|
private Retrofit retrofit;
|
||||||
private Markwon mMarkwon;
|
private Markwon mMarkwon;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private int mMessageType;
|
private int mMessageType;
|
||||||
@@ -88,7 +87,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
|||||||
RetryLoadingMoreCallback retryLoadingMoreCallback) {
|
RetryLoadingMoreCallback retryLoadingMoreCallback) {
|
||||||
super(DIFF_CALLBACK);
|
super(DIFF_CALLBACK);
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
mOauthRetrofit = oauthRetrofit;
|
retrofit = oauthRetrofit;
|
||||||
mRetryLoadingMoreCallback = retryLoadingMoreCallback;
|
mRetryLoadingMoreCallback = retryLoadingMoreCallback;
|
||||||
|
|
||||||
mColorAccent = customThemeWrapper.getColorAccent();
|
mColorAccent = customThemeWrapper.getColorAccent();
|
||||||
@@ -154,41 +153,35 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
|||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||||
if (holder instanceof DataViewHolder) {
|
if (holder instanceof DataViewHolder) {
|
||||||
Message message = getItem(holder.getBindingAdapterPosition());
|
CommentInteraction message = getItem(holder.getBindingAdapterPosition());
|
||||||
if (message != null) {
|
if (message != null) {
|
||||||
ArrayList<Message> replies = message.getReplies();
|
|
||||||
Message displayedMessage;
|
if (message.isRead()) {
|
||||||
if (replies != null && !replies.isEmpty() && replies.get(replies.size() - 1) != null) {
|
|
||||||
displayedMessage = replies.get(replies.size() - 1);
|
|
||||||
} else {
|
|
||||||
displayedMessage = message;
|
|
||||||
}
|
|
||||||
if (message.isNew()) {
|
|
||||||
if (markAllMessagesAsRead) {
|
if (markAllMessagesAsRead) {
|
||||||
message.setNew(false);
|
message.markAsRead();
|
||||||
} else {
|
} else {
|
||||||
holder.itemView.setBackgroundColor(
|
holder.itemView.setBackgroundColor(
|
||||||
mUnreadMessageBackgroundColor);
|
mUnreadMessageBackgroundColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.wasComment()) {
|
|
||||||
((DataViewHolder) holder).titleTextView.setText(message.getTitle());
|
|
||||||
} else {
|
|
||||||
((DataViewHolder) holder).titleTextView.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
((DataViewHolder) holder).authorTextView.setText(displayedMessage.getAuthor());
|
((DataViewHolder) holder).titleTextView.setVisibility(View.GONE);
|
||||||
String subject = displayedMessage.getSubject().substring(0, 1).toUpperCase() + displayedMessage.getSubject().substring(1);
|
|
||||||
|
|
||||||
|
((DataViewHolder) holder).authorTextView.setText(message.getComment().getAuthorQualifiedName());
|
||||||
|
String subject = message.getComment().getCommunityQualifiedName();
|
||||||
((DataViewHolder) holder).subjectTextView.setText(subject);
|
((DataViewHolder) holder).subjectTextView.setText(subject);
|
||||||
mMarkwon.setMarkdown(((DataViewHolder) holder).contentCustomMarkwonView, displayedMessage.getBody());
|
mMarkwon.setMarkdown(((DataViewHolder) holder).contentCustomMarkwonView, message.getComment().getCommentMarkdown());
|
||||||
|
|
||||||
holder.itemView.setOnClickListener(view -> {
|
holder.itemView.setOnClickListener(view -> {
|
||||||
if (mMessageType == FetchMessage.MESSAGE_TYPE_INBOX
|
if (mMessageType == FetchMessage.MESSAGE_TYPE_INBOX
|
||||||
&& message.getContext() != null && !message.getContext().equals("")) {
|
&& message.getComment() != null) {
|
||||||
Uri uri = Uri.parse(message.getContext());
|
|
||||||
Intent intent = new Intent(mActivity, LinkResolverActivity.class);
|
Intent intent = new Intent(mActivity, ViewPostDetailActivity.class);
|
||||||
intent.setData(uri);
|
|
||||||
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, message.getComment().getPostId());
|
||||||
|
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, message.getComment().getId());
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
} else if (mMessageType == FetchMessage.MESSAGE_TYPE_PRIVATE_MESSAGE) {
|
} else if (mMessageType == FetchMessage.MESSAGE_TYPE_PRIVATE_MESSAGE) {
|
||||||
Intent intent = new Intent(mActivity, ViewPrivateMessagesActivity.class);
|
Intent intent = new Intent(mActivity, ViewPrivateMessagesActivity.class);
|
||||||
@@ -197,20 +190,21 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
|||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (displayedMessage.isNew()) {
|
if (message.isRead()) {
|
||||||
holder.itemView.setBackgroundColor(mMessageBackgroundColor);
|
holder.itemView.setBackgroundColor(mMessageBackgroundColor);
|
||||||
message.setNew(false);
|
|
||||||
|
|
||||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, message.getFullname(),
|
|
||||||
|
ReadMessage.readMessage(retrofit, mAccessToken, message.getId(),
|
||||||
new ReadMessage.ReadMessageListener() {
|
new ReadMessage.ReadMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void readSuccess() {
|
public void readSuccess() {
|
||||||
|
message.markAsRead();
|
||||||
EventBus.getDefault().post(new ChangeInboxCountEvent(-1));
|
EventBus.getDefault().post(new ChangeInboxCountEvent(-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFailed() {
|
public void readFailed() {
|
||||||
message.setNew(true);
|
message.markAsUnRead();
|
||||||
holder.itemView.setBackgroundColor(mUnreadMessageBackgroundColor);
|
holder.itemView.setBackgroundColor(mUnreadMessageBackgroundColor);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -218,11 +212,10 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
|||||||
});
|
});
|
||||||
|
|
||||||
((DataViewHolder) holder).authorTextView.setOnClickListener(view -> {
|
((DataViewHolder) holder).authorTextView.setOnClickListener(view -> {
|
||||||
if (message.isAuthorDeleted()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Intent intent = new Intent(mActivity, ViewUserDetailActivity.class);
|
Intent intent = new Intent(mActivity, ViewUserDetailActivity.class);
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getAuthor());
|
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getComment().getAuthor());
|
||||||
|
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, message.getComment().getAuthorQualifiedName());
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -280,9 +273,9 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateMessageReply(Message newReply, int position) {
|
public void updateMessageReply(CommentInteraction newReply, int position) {
|
||||||
if (position >= 0 && position < super.getItemCount()) {
|
if (position >= 0 && position < super.getItemCount()) {
|
||||||
Message message = getItem(position);
|
CommentInteraction message = getItem(position);
|
||||||
if (message != null) {
|
if (message != null) {
|
||||||
notifyItemChanged(position);
|
notifyItemChanged(position);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,9 @@ import com.bumptech.glide.load.DataSource;
|
|||||||
import com.bumptech.glide.load.engine.GlideException;
|
import com.bumptech.glide.load.engine.GlideException;
|
||||||
import com.bumptech.glide.request.RequestListener;
|
import com.bumptech.glide.request.RequestListener;
|
||||||
import com.bumptech.glide.request.RequestOptions;
|
import com.bumptech.glide.request.RequestOptions;
|
||||||
|
import com.bumptech.glide.request.target.CustomTarget;
|
||||||
import com.bumptech.glide.request.target.Target;
|
import com.bumptech.glide.request.target.Target;
|
||||||
|
import com.bumptech.glide.request.transition.Transition;
|
||||||
import com.google.android.exoplayer2.Tracks;
|
import com.google.android.exoplayer2.Tracks;
|
||||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
||||||
import com.google.android.exoplayer2.ui.DefaultTimeBar;
|
import com.google.android.exoplayer2.ui.DefaultTimeBar;
|
||||||
@@ -214,7 +216,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
|
|
||||||
public PostDetailRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
|
public PostDetailRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
|
||||||
Executor executor, CustomThemeWrapper customThemeWrapper,
|
Executor executor, CustomThemeWrapper customThemeWrapper,
|
||||||
Retrofit retrofit, Retrofit oauthRetrofit, Retrofit gfycatRetrofit,
|
Retrofit retrofit, Retrofit gfycatRetrofit,
|
||||||
Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
|
Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
|
||||||
RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide,
|
RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide,
|
||||||
boolean separatePostAndComments, String accessToken,
|
boolean separatePostAndComments, String accessToken,
|
||||||
@@ -229,7 +231,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
mFragment = fragment;
|
mFragment = fragment;
|
||||||
mExecutor = executor;
|
mExecutor = executor;
|
||||||
mRetrofit = retrofit;
|
mRetrofit = retrofit;
|
||||||
mOauthRetrofit = oauthRetrofit;
|
|
||||||
mGfycatRetrofit = gfycatRetrofit;
|
mGfycatRetrofit = gfycatRetrofit;
|
||||||
mRedgifsRetrofit = redgifsRetrofit;
|
mRedgifsRetrofit = redgifsRetrofit;
|
||||||
mStreamableApiProvider = streamableApiProvider;
|
mStreamableApiProvider = streamableApiProvider;
|
||||||
@@ -508,7 +509,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
} else {
|
} else {
|
||||||
if (mPost.getSubredditIconUrl() == null) {
|
if (mPost.getSubredditIconUrl() == null) {
|
||||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(),
|
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(),
|
||||||
mRedditDataRoomDatabase, mPost.getSubredditNamePrefixed().substring(2),
|
mRedditDataRoomDatabase, mPost.getSubredditNamePrefixed(),
|
||||||
mAccessToken, mOauthRetrofit, mRetrofit, iconImageUrl -> {
|
mAccessToken, mOauthRetrofit, mRetrofit, iconImageUrl -> {
|
||||||
if (iconImageUrl == null || iconImageUrl.equals("")) {
|
if (iconImageUrl == null || iconImageUrl.equals("")) {
|
||||||
mGlide.load(R.drawable.subreddit_default_icon)
|
mGlide.load(R.drawable.subreddit_default_icon)
|
||||||
@@ -635,8 +636,20 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
((PostDetailVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE);
|
((PostDetailVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE);
|
||||||
Post.Preview preview = getSuitablePreview(mPost.getPreviews());
|
Post.Preview preview = getSuitablePreview(mPost.getPreviews());
|
||||||
if (preview != null) {
|
if (preview != null) {
|
||||||
((PostDetailVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) preview.getPreviewWidth() / preview.getPreviewHeight());
|
mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||||
mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostDetailVideoAutoplayViewHolder) holder).previewImageView);
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
int width = resource.getIntrinsicWidth();
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
((PostDetailVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) width / height);
|
||||||
|
((PostDetailVideoAutoplayViewHolder) holder).previewImageView.setImageDrawable(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
((PostDetailVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1);
|
((PostDetailVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1);
|
||||||
}
|
}
|
||||||
@@ -844,9 +857,45 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (blurImage) {
|
if (blurImage) {
|
||||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))).into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
|
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))).into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
int width = resource.getIntrinsicWidth();
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||||
|
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setRatio((float) height / width);
|
||||||
|
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||||
|
preview.setPreviewHeight(height);
|
||||||
|
preview.setPreviewWidth(width);
|
||||||
|
}
|
||||||
|
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setImageDrawable(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setImageDrawable(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
|
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
int width = resource.getIntrinsicWidth();
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||||
|
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setRatio((float) height / width);
|
||||||
|
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||||
|
preview.setPreviewHeight(height);
|
||||||
|
preview.setPreviewWidth(width);
|
||||||
|
}
|
||||||
|
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setImageDrawable(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setImageDrawable(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else if (holder instanceof PostDetailVideoAndGifPreviewHolder) {
|
} else if (holder instanceof PostDetailVideoAndGifPreviewHolder) {
|
||||||
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(preview.getPreviewUrl())
|
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(preview.getPreviewUrl())
|
||||||
@@ -872,9 +921,45 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
|
|
||||||
if ((mPost.isNSFW() && mNeedBlurNsfw && !(mDoNotBlurNsfwInNsfwSubreddits && mFragment != null && mFragment.getIsNsfwSubreddit()))) {
|
if ((mPost.isNSFW() && mNeedBlurNsfw && !(mDoNotBlurNsfwInNsfwSubreddits && mFragment != null && mFragment.getIsNsfwSubreddit()))) {
|
||||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
||||||
.into(((PostDetailVideoAndGifPreviewHolder) holder).mImageView);
|
.into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
int width = resource.getIntrinsicWidth();
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||||
|
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setRatio((float) height / width);
|
||||||
|
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||||
|
preview.setPreviewHeight(height);
|
||||||
|
preview.setPreviewWidth(width);
|
||||||
|
}
|
||||||
|
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setImageDrawable(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setImageDrawable(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostDetailVideoAndGifPreviewHolder) holder).mImageView);
|
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
int width = resource.getIntrinsicWidth();
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||||
|
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setRatio((float) height / width);
|
||||||
|
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||||
|
preview.setPreviewHeight(height);
|
||||||
|
preview.setPreviewWidth(width);
|
||||||
|
}
|
||||||
|
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setImageDrawable(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setImageDrawable(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else if (holder instanceof PostDetailLinkViewHolder) {
|
} else if (holder instanceof PostDetailLinkViewHolder) {
|
||||||
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(preview.getPreviewUrl())
|
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(preview.getPreviewUrl())
|
||||||
@@ -900,9 +985,51 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
|
|
||||||
if ((mPost.isNSFW() && mNeedBlurNsfw && !(mDoNotBlurNsfwInNsfwSubreddits && mFragment != null && mFragment.getIsNsfwSubreddit()))) {
|
if ((mPost.isNSFW() && mNeedBlurNsfw && !(mDoNotBlurNsfwInNsfwSubreddits && mFragment != null && mFragment.getIsNsfwSubreddit()))) {
|
||||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
||||||
.into(((PostDetailLinkViewHolder) holder).mImageView);
|
.into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
int width = resource.getIntrinsicWidth();
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||||
|
((PostDetailLinkViewHolder) holder).mImageView.setRatio((float) height / width);
|
||||||
|
((PostDetailLinkViewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||||
|
preview.setPreviewHeight(height);
|
||||||
|
preview.setPreviewWidth(width);
|
||||||
} else {
|
} else {
|
||||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostDetailLinkViewHolder) holder).mImageView);
|
((PostDetailLinkViewHolder) holder).mImageView.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
||||||
|
((PostDetailLinkViewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||||
|
}
|
||||||
|
((PostDetailLinkViewHolder) holder).mImageView.setImageDrawable(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
((PostDetailLinkViewHolder) holder).mImageView.setImageDrawable(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
int width = resource.getIntrinsicWidth();
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
((PostDetailLinkViewHolder) holder).mImageView.setImageDrawable(resource);
|
||||||
|
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||||
|
((PostDetailLinkViewHolder) holder).mImageView.setRatio((float) height / width);
|
||||||
|
((PostDetailLinkViewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||||
|
preview.setPreviewHeight(height);
|
||||||
|
preview.setPreviewWidth(width);
|
||||||
|
} else {
|
||||||
|
((PostDetailLinkViewHolder) holder).mImageView.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
((PostDetailLinkViewHolder) holder).mImageView.setImageDrawable(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1374,7 +1501,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
mSaveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
mSaveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||||
savePost.saveThing(mOauthRetrofit, mAccessToken, mPost.getId(),
|
savePost.saveThing(mRetrofit, mAccessToken, mPost.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
|
|||||||
@@ -44,7 +44,9 @@ import com.bumptech.glide.load.DataSource;
|
|||||||
import com.bumptech.glide.load.engine.GlideException;
|
import com.bumptech.glide.load.engine.GlideException;
|
||||||
import com.bumptech.glide.request.RequestListener;
|
import com.bumptech.glide.request.RequestListener;
|
||||||
import com.bumptech.glide.request.RequestOptions;
|
import com.bumptech.glide.request.RequestOptions;
|
||||||
|
import com.bumptech.glide.request.target.CustomTarget;
|
||||||
import com.bumptech.glide.request.target.Target;
|
import com.bumptech.glide.request.target.Target;
|
||||||
|
import com.bumptech.glide.request.transition.Transition;
|
||||||
import com.google.android.exoplayer2.Tracks;
|
import com.google.android.exoplayer2.Tracks;
|
||||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
||||||
import com.google.android.exoplayer2.ui.DefaultTimeBar;
|
import com.google.android.exoplayer2.ui.DefaultTimeBar;
|
||||||
@@ -146,7 +148,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
private SharedPreferences mSharedPreferences;
|
private SharedPreferences mSharedPreferences;
|
||||||
private SharedPreferences mCurrentAccountSharedPreferences;
|
private SharedPreferences mCurrentAccountSharedPreferences;
|
||||||
private Executor mExecutor;
|
private Executor mExecutor;
|
||||||
private Retrofit mOauthRetrofit;
|
private Retrofit retrofit;
|
||||||
private Retrofit mGfycatRetrofit;
|
private Retrofit mGfycatRetrofit;
|
||||||
private Retrofit mRedgifsRetrofit;
|
private Retrofit mRedgifsRetrofit;
|
||||||
private Provider<StreamableAPI> mStreamableApiProvider;
|
private Provider<StreamableAPI> mStreamableApiProvider;
|
||||||
@@ -250,7 +252,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
mSharedPreferences = sharedPreferences;
|
mSharedPreferences = sharedPreferences;
|
||||||
mCurrentAccountSharedPreferences = currentAccountSharedPreferences;
|
mCurrentAccountSharedPreferences = currentAccountSharedPreferences;
|
||||||
mExecutor = executor;
|
mExecutor = executor;
|
||||||
mOauthRetrofit = oauthRetrofit;
|
retrofit = oauthRetrofit;
|
||||||
mGfycatRetrofit = gfycatRetrofit;
|
mGfycatRetrofit = gfycatRetrofit;
|
||||||
mRedgifsRetrofit = redgifsRetrofit;
|
mRedgifsRetrofit = redgifsRetrofit;
|
||||||
mStreamableApiProvider = streamableApiProvider;
|
mStreamableApiProvider = streamableApiProvider;
|
||||||
@@ -439,7 +441,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
switch (post.getPostType()) {
|
switch (post.getPostType()) {
|
||||||
case Post.VIDEO_TYPE:
|
case Post.VIDEO_TYPE:
|
||||||
if (mAutoplay) {
|
if (mAutoplay) {
|
||||||
if ((!mAutoplayNsfwVideos && post.isNSFW()) ) {
|
if ((!mAutoplayNsfwVideos && post.isNSFW())) {
|
||||||
return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE;
|
return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE;
|
||||||
}
|
}
|
||||||
return VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE;
|
return VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE;
|
||||||
@@ -714,8 +716,28 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
((PostVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE);
|
((PostVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE);
|
||||||
Post.Preview preview = getSuitablePreview(post.getPreviews());
|
Post.Preview preview = getSuitablePreview(post.getPreviews());
|
||||||
if (!mFixedHeightPreviewInCard && preview != null) {
|
if (!mFixedHeightPreviewInCard && preview != null) {
|
||||||
((PostVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) preview.getPreviewWidth() / preview.getPreviewHeight());
|
mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||||
mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostVideoAutoplayViewHolder) holder).previewImageView);
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
int width = resource.getIntrinsicWidth();
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
((PostVideoAutoplayViewHolder) holder).previewImageView.setImageDrawable(resource);
|
||||||
|
if (preview.getPreviewHeight() <= 0 || preview.getPreviewWidth() <= 0) {
|
||||||
|
((PostVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) height / width);
|
||||||
|
((PostVideoAutoplayViewHolder) holder).previewImageView.getLayoutParams().height = height;
|
||||||
|
preview.setPreviewHeight(height);
|
||||||
|
preview.setPreviewWidth(width);
|
||||||
|
} else {
|
||||||
|
((PostVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
||||||
|
((PostVideoAutoplayViewHolder) holder).previewImageView.getLayoutParams().height = preview.getPreviewHeight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
((PostVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1);
|
((PostVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1);
|
||||||
}
|
}
|
||||||
@@ -752,7 +774,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if(post.isStreamable() && !post.isLoadGfycatOrStreamableVideoSuccess()) {
|
} else if (post.isStreamable() && !post.isLoadGfycatOrStreamableVideoSuccess()) {
|
||||||
((PostVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
((PostVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
||||||
mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode());
|
mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode());
|
||||||
FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(),
|
FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(),
|
||||||
@@ -833,21 +855,12 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
if (preview != null) {
|
if (preview != null) {
|
||||||
((PostWithPreviewTypeViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
((PostWithPreviewTypeViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||||
((PostWithPreviewTypeViewHolder) holder).imageWrapperRelativeLayout.setVisibility(View.VISIBLE);
|
((PostWithPreviewTypeViewHolder) holder).imageWrapperRelativeLayout.setVisibility(View.VISIBLE);
|
||||||
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
if (mFixedHeightPreviewInCard) {
|
||||||
int height = (int) (400 * mScale);
|
int height = (int) (400 * mScale);
|
||||||
((PostWithPreviewTypeViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
((PostWithPreviewTypeViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||||
((PostWithPreviewTypeViewHolder) holder).imageView.getLayoutParams().height = height;
|
((PostWithPreviewTypeViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
} else {
|
|
||||||
((PostWithPreviewTypeViewHolder) holder).imageView
|
|
||||||
.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
|
||||||
}
|
}
|
||||||
((PostWithPreviewTypeViewHolder) holder).imageView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
|
||||||
((PostWithPreviewTypeViewHolder) holder).imageView.removeOnLayoutChangeListener(this);
|
|
||||||
loadImage(holder);
|
loadImage(holder);
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setVisibility(View.VISIBLE);
|
((PostWithPreviewTypeViewHolder) holder).noPreviewLinkImageView.setVisibility(View.VISIBLE);
|
||||||
if (post.getPostType() == Post.VIDEO_TYPE) {
|
if (post.getPostType() == Post.VIDEO_TYPE) {
|
||||||
@@ -873,10 +886,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
((PostBaseGalleryTypeViewHolder) holder).imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, 1, post.getGallery().size()));
|
((PostBaseGalleryTypeViewHolder) holder).imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, 1, post.getGallery().size()));
|
||||||
Post.Preview preview = getSuitablePreview(post.getPreviews());
|
Post.Preview preview = getSuitablePreview(post.getPreviews());
|
||||||
if (preview != null) {
|
if (preview != null) {
|
||||||
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
if (mFixedHeightPreviewInCard) {
|
||||||
((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
||||||
} else {
|
|
||||||
((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
||||||
@@ -897,8 +908,28 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
((PostCard2VideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE);
|
((PostCard2VideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE);
|
||||||
Post.Preview preview = getSuitablePreview(post.getPreviews());
|
Post.Preview preview = getSuitablePreview(post.getPreviews());
|
||||||
if (!mFixedHeightPreviewInCard && preview != null) {
|
if (!mFixedHeightPreviewInCard && preview != null) {
|
||||||
((PostCard2VideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) preview.getPreviewWidth() / preview.getPreviewHeight());
|
mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||||
mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostCard2VideoAutoplayViewHolder) holder).previewImageView);
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
int width = resource.getIntrinsicWidth();
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
((PostVideoAutoplayViewHolder) holder).previewImageView.setImageDrawable(resource);
|
||||||
|
if (preview.getPreviewHeight() <= 0 || preview.getPreviewWidth() <= 0) {
|
||||||
|
((PostVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) height / width);
|
||||||
|
((PostVideoAutoplayViewHolder) holder).previewImageView.getLayoutParams().height = height;
|
||||||
|
preview.setPreviewHeight(height);
|
||||||
|
preview.setPreviewWidth(width);
|
||||||
|
} else {
|
||||||
|
((PostVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
||||||
|
((PostVideoAutoplayViewHolder) holder).previewImageView.getLayoutParams().height = height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
((PostCard2VideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1);
|
((PostCard2VideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1);
|
||||||
}
|
}
|
||||||
@@ -935,7 +966,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if(post.isStreamable() && !post.isLoadGfycatOrStreamableVideoSuccess()) {
|
} else if (post.isStreamable() && !post.isLoadGfycatOrStreamableVideoSuccess()) {
|
||||||
((PostCard2VideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
((PostCard2VideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
||||||
mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode());
|
mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode());
|
||||||
FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(),
|
FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(),
|
||||||
@@ -1023,21 +1054,12 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
((PostCard2WithPreviewViewHolder) holder).preview = preview;
|
((PostCard2WithPreviewViewHolder) holder).preview = preview;
|
||||||
if (preview != null) {
|
if (preview != null) {
|
||||||
((PostCard2WithPreviewViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
((PostCard2WithPreviewViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||||
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
if (mFixedHeightPreviewInCard) {
|
||||||
int height = (int) (400 * mScale);
|
int height = (int) (400 * mScale);
|
||||||
((PostCard2WithPreviewViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
((PostCard2WithPreviewViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||||
((PostCard2WithPreviewViewHolder) holder).imageView.getLayoutParams().height = height;
|
((PostCard2WithPreviewViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
} else {
|
|
||||||
((PostCard2WithPreviewViewHolder) holder).imageView
|
|
||||||
.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
|
||||||
}
|
}
|
||||||
((PostCard2WithPreviewViewHolder) holder).imageView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
|
||||||
((PostCard2WithPreviewViewHolder) holder).imageView.removeOnLayoutChangeListener(this);
|
|
||||||
loadImage(holder);
|
loadImage(holder);
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
((PostCard2WithPreviewViewHolder) holder).progressBar.setVisibility(View.GONE);
|
((PostCard2WithPreviewViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||||
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
((PostCard2WithPreviewViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
||||||
@@ -1155,7 +1177,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
if (mHideSubredditAndUserPrefix) {
|
if (mHideSubredditAndUserPrefix) {
|
||||||
((PostCompactBaseViewHolder) holder).nameTextView.setText(post.getSubredditName());
|
((PostCompactBaseViewHolder) holder).nameTextView.setText(post.getSubredditName());
|
||||||
} else {
|
} else {
|
||||||
((PostCompactBaseViewHolder) holder).nameTextView.setText("r/" + post.getSubredditName());
|
((PostCompactBaseViewHolder) holder).nameTextView.setText(post.getSubredditNamePrefixed());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (post.getAuthorIconUrl() == null) {
|
if (post.getAuthorIconUrl() == null) {
|
||||||
@@ -1401,21 +1423,12 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
((PostGalleryViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
((PostGalleryViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||||
((PostGalleryViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
((PostGalleryViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
if (mFixedHeightPreviewInCard) {
|
||||||
int height = (int) (400 * mScale);
|
int height = (int) (400 * mScale);
|
||||||
((PostGalleryViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
((PostGalleryViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||||
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
} else {
|
|
||||||
((PostGalleryViewHolder) holder).imageView
|
|
||||||
.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
|
||||||
}
|
}
|
||||||
((PostGalleryViewHolder) holder).imageView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
|
||||||
((PostGalleryViewHolder) holder).imageView.removeOnLayoutChangeListener(this);
|
|
||||||
loadImage(holder);
|
loadImage(holder);
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_image_24dp);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_image_24dp);
|
||||||
@@ -1423,7 +1436,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Post.GIF_TYPE: {
|
case Post.GIF_TYPE: {
|
||||||
if (post.getPostType() == Post.GIF_TYPE && ((post.isNSFW() && mNeedBlurNsfw && !(mDoNotBlurNsfwInNsfwSubreddits && mFragment != null && mFragment.getIsNsfwSubreddit()) && !(mAutoplay && mAutoplayNsfwVideos)) )) {
|
if (post.getPostType() == Post.GIF_TYPE && ((post.isNSFW() && mNeedBlurNsfw && !(mDoNotBlurNsfwInNsfwSubreddits && mFragment != null && mFragment.getIsNsfwSubreddit()) && !(mAutoplay && mAutoplayNsfwVideos)))) {
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_image_24dp);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_image_24dp);
|
||||||
} else {
|
} else {
|
||||||
@@ -1435,21 +1448,12 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.VISIBLE);
|
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.VISIBLE);
|
||||||
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp));
|
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp));
|
||||||
|
|
||||||
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
if (mFixedHeightPreviewInCard) {
|
||||||
int height = (int) (400 * mScale);
|
int height = (int) (400 * mScale);
|
||||||
((PostGalleryViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
((PostGalleryViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||||
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
} else {
|
|
||||||
((PostGalleryViewHolder) holder).imageView
|
|
||||||
.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
|
||||||
}
|
}
|
||||||
((PostGalleryViewHolder) holder).imageView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
|
||||||
((PostGalleryViewHolder) holder).imageView.removeOnLayoutChangeListener(this);
|
|
||||||
loadImage(holder);
|
loadImage(holder);
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_image_24dp);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_image_24dp);
|
||||||
@@ -1466,21 +1470,12 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.VISIBLE);
|
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.VISIBLE);
|
||||||
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp));
|
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp));
|
||||||
|
|
||||||
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
if (mFixedHeightPreviewInCard) {
|
||||||
int height = (int) (400 * mScale);
|
int height = (int) (400 * mScale);
|
||||||
((PostGalleryViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
((PostGalleryViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||||
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
} else {
|
|
||||||
((PostGalleryViewHolder) holder).imageView
|
|
||||||
.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
|
||||||
}
|
}
|
||||||
((PostGalleryViewHolder) holder).imageView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
|
||||||
((PostGalleryViewHolder) holder).imageView.removeOnLayoutChangeListener(this);
|
|
||||||
loadImage(holder);
|
loadImage(holder);
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_outline_video_24dp);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_outline_video_24dp);
|
||||||
@@ -1496,21 +1491,12 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.VISIBLE);
|
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setVisibility(View.VISIBLE);
|
||||||
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_link_post_type_indicator));
|
((PostGalleryViewHolder) holder).videoOrGifIndicatorImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_link_post_type_indicator));
|
||||||
|
|
||||||
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
if (mFixedHeightPreviewInCard) {
|
||||||
int height = (int) (400 * mScale);
|
int height = (int) (400 * mScale);
|
||||||
((PostGalleryViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
((PostGalleryViewHolder) holder).imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||||
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
} else {
|
|
||||||
((PostGalleryViewHolder) holder).imageView
|
|
||||||
.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
|
||||||
}
|
}
|
||||||
((PostGalleryViewHolder) holder).imageView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
|
||||||
((PostGalleryViewHolder) holder).imageView.removeOnLayoutChangeListener(this);
|
|
||||||
loadImage(holder);
|
loadImage(holder);
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE);
|
||||||
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_link);
|
((PostGalleryViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_link);
|
||||||
@@ -1549,10 +1535,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
((PostGalleryBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.VISIBLE);
|
((PostGalleryBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.VISIBLE);
|
||||||
((PostGalleryBaseGalleryTypeViewHolder) holder).imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, 1, post.getGallery().size()));
|
((PostGalleryBaseGalleryTypeViewHolder) holder).imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, 1, post.getGallery().size()));
|
||||||
if (preview != null) {
|
if (preview != null) {
|
||||||
if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) {
|
if (mFixedHeightPreviewInCard) {
|
||||||
((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
||||||
} else {
|
|
||||||
((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1);
|
||||||
@@ -1605,9 +1589,71 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(url).listener(((PostWithPreviewTypeViewHolder) holder).glideRequestListener);
|
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(url).listener(((PostWithPreviewTypeViewHolder) holder).glideRequestListener);
|
||||||
if (blurImage) {
|
if (blurImage) {
|
||||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
||||||
.into(((PostWithPreviewTypeViewHolder) holder).imageView);
|
.into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(@Nullable Drawable placeholder) {
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (!mFixedHeightPreviewInCard) {
|
||||||
|
float imageRatio = (float) resource.getIntrinsicHeight() / resource.getIntrinsicWidth();
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setRatio(imageRatio);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
} else {
|
} else {
|
||||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostWithPreviewTypeViewHolder) holder).imageView);
|
((PostWithPreviewTypeViewHolder) holder).imageView.setRatio(-1);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
|
}
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
// Reset to default aspect ratio
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setRatio(1);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setImageDrawable(placeholder);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(@Nullable Drawable placeholder) {
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (!mFixedHeightPreviewInCard) {
|
||||||
|
float imageRatio = (float) resource.getIntrinsicHeight() / resource.getIntrinsicWidth();
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setRatio(imageRatio);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
|
} else {
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setRatio(-1);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
|
}
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
// Reset to default aspect ratio
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setRatio(1);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setImageDrawable(placeholder);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostWithPreviewTypeViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (holder instanceof PostCompactBaseViewHolder) {
|
} else if (holder instanceof PostCompactBaseViewHolder) {
|
||||||
@@ -1645,9 +1691,71 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
|
|
||||||
if (blurImage) {
|
if (blurImage) {
|
||||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
||||||
.into(((PostGalleryViewHolder) holder).imageView);
|
.into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(@Nullable Drawable placeholder) {
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostGalleryViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (!mFixedHeightPreviewInCard) {
|
||||||
|
float imageRatio = (float) resource.getIntrinsicHeight() / resource.getIntrinsicWidth();
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setRatio(imageRatio);
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
} else {
|
} else {
|
||||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostGalleryViewHolder) holder).imageView);
|
((PostGalleryViewHolder) holder).imageView.setRatio(-1);
|
||||||
|
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
|
}
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||||
|
((PostGalleryViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
// Reset to default aspect ratio
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setRatio(1);
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setImageDrawable(placeholder);
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostGalleryViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(@Nullable Drawable placeholder) {
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostGalleryViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (!mFixedHeightPreviewInCard) {
|
||||||
|
float imageRatio = (float) resource.getIntrinsicHeight() / resource.getIntrinsicWidth();
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setRatio(imageRatio);
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
|
} else {
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setRatio(-1);
|
||||||
|
((PostGalleryViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
|
}
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||||
|
((PostGalleryViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
// Reset to default aspect ratio
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setRatio(1);
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setImageDrawable(placeholder);
|
||||||
|
((PostGalleryViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostGalleryViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (holder instanceof PostCard2WithPreviewViewHolder) {
|
} else if (holder instanceof PostCard2WithPreviewViewHolder) {
|
||||||
@@ -1665,9 +1773,71 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
|
|
||||||
if (blurImage) {
|
if (blurImage) {
|
||||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
||||||
.into(((PostCard2WithPreviewViewHolder) holder).imageView);
|
.into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(@Nullable Drawable placeholder) {
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (!mFixedHeightPreviewInCard) {
|
||||||
|
float imageRatio = (float) resource.getIntrinsicHeight() / resource.getIntrinsicWidth();
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setRatio(imageRatio);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
} else {
|
} else {
|
||||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostCard2WithPreviewViewHolder) holder).imageView);
|
((PostCard2WithPreviewViewHolder) holder).imageView.setRatio(-1);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
|
}
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
// Reset to default aspect ratio
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setRatio(1);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setImageDrawable(placeholder);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public void onLoadStarted(@Nullable Drawable placeholder) {
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
|
int height = resource.getIntrinsicHeight();
|
||||||
|
if (!mFixedHeightPreviewInCard) {
|
||||||
|
float imageRatio = (float) resource.getIntrinsicHeight() / resource.getIntrinsicWidth();
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setRatio(imageRatio);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setImageDrawable(resource);
|
||||||
|
} else {
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setRatio(-1);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.getLayoutParams().height = height;
|
||||||
|
}
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setVisibility(View.VISIBLE);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
// Reset to default aspect ratio
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setRatio(1);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setImageDrawable(placeholder);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).imageView.setVisibility(View.GONE);
|
||||||
|
((PostCard2WithPreviewViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2434,7 +2604,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
@@ -2530,7 +2700,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
@@ -2591,7 +2761,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
SavePost savePost = new SavePost();
|
SavePost savePost = new SavePost();
|
||||||
if (post.isSaved()) {
|
if (post.isSaved()) {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||||
savePost.unsaveThing(mOauthRetrofit, mAccessToken, post.getId(),
|
savePost.unsaveThing(retrofit, mAccessToken, post.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
@@ -2615,7 +2785,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||||
savePost.saveThing(mOauthRetrofit, mAccessToken, post.getId(),
|
savePost.saveThing(retrofit, mAccessToken, post.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
@@ -3307,7 +3477,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
downY = e.getRawY();
|
downY = e.getRawY();
|
||||||
break;
|
break;
|
||||||
case MotionEvent.ACTION_MOVE:
|
case MotionEvent.ACTION_MOVE:
|
||||||
if(Math.abs(e.getRawX() - downX) > minTouchSlop || Math.abs(e.getRawY() - downY) > minTouchSlop) {
|
if (Math.abs(e.getRawX() - downX) > minTouchSlop || Math.abs(e.getRawY() - downY) > minTouchSlop) {
|
||||||
dragged = true;
|
dragged = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -3793,7 +3963,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
@@ -3889,7 +4059,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
@@ -3952,7 +4122,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
SavePost postSave = new SavePost();
|
SavePost postSave = new SavePost();
|
||||||
if (post.isSaved()) {
|
if (post.isSaved()) {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||||
postSave.unsaveThing(mOauthRetrofit, mAccessToken, post.getId(),
|
postSave.unsaveThing(retrofit, mAccessToken, post.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
@@ -3976,7 +4146,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||||
postSave.saveThing(mOauthRetrofit, mAccessToken, post.getId(),
|
postSave.saveThing(retrofit, mAccessToken, post.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
@@ -4419,7 +4589,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
|
|||||||
downTime = System.currentTimeMillis();
|
downTime = System.currentTimeMillis();
|
||||||
break;
|
break;
|
||||||
case MotionEvent.ACTION_MOVE:
|
case MotionEvent.ACTION_MOVE:
|
||||||
if(Math.abs(e.getRawX() - downX) > minTouchSlop || Math.abs(e.getRawY() - downY) > minTouchSlop) {
|
if (Math.abs(e.getRawX() - downX) > minTouchSlop || Math.abs(e.getRawY() - downY) > minTouchSlop) {
|
||||||
dragged = true;
|
dragged = true;
|
||||||
}
|
}
|
||||||
if (!dragged) {
|
if (!dragged) {
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
|||||||
if (isMultiSelection) {
|
if (isMultiSelection) {
|
||||||
((DataViewHolder) holder).checkBox.performClick();
|
((DataViewHolder) holder).checkBox.performClick();
|
||||||
} else {
|
} else {
|
||||||
callback.subredditSelected(subredditData.getName(), LemmyUtils.actorID2FullName(subredditData.getActorId()), subredditData.getIconUrl());
|
callback.subredditSelected(subredditData);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -252,7 +252,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
|||||||
public interface Callback {
|
public interface Callback {
|
||||||
void retryLoadingMore();
|
void retryLoadingMore();
|
||||||
|
|
||||||
void subredditSelected(String subredditName, String communityFullName,String iconUrl);
|
void subredditSelected(SubredditData communityData);
|
||||||
}
|
}
|
||||||
|
|
||||||
class DataViewHolder extends RecyclerView.ViewHolder {
|
class DataViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|||||||
@@ -149,39 +149,17 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
|||||||
|
|
||||||
if (hasClearSelectionRow && viewHolder.getBindingAdapterPosition() == 0) {
|
if (hasClearSelectionRow && viewHolder.getBindingAdapterPosition() == 0) {
|
||||||
((SubredditViewHolder) viewHolder).subredditNameTextView.setText(R.string.all_communities);
|
((SubredditViewHolder) viewHolder).subredditNameTextView.setText(R.string.all_communities);
|
||||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(null, null, false));
|
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(null));
|
||||||
return;
|
return;
|
||||||
} else if (itemClickListener != null && !hasClearSelectionRow && viewHolder.getBindingAdapterPosition() == 0) {
|
|
||||||
name = username;
|
|
||||||
iconUrl = userIconUrl;
|
|
||||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, true));
|
|
||||||
} else if (hasClearSelectionRow && viewHolder.getBindingAdapterPosition() == 1) {
|
|
||||||
name = username;
|
|
||||||
iconUrl = userIconUrl;
|
|
||||||
if (itemClickListener != null) {
|
|
||||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, true));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
int offset;
|
int offset = hasClearSelectionRow ? 1 : 0;
|
||||||
if (itemClickListener != null) {
|
SubscribedSubredditData communityData = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset);
|
||||||
if (hasClearSelectionRow) {
|
|
||||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
|
||||||
mFavoriteSubscribedSubredditData.size() + 4 : 2;
|
|
||||||
} else {
|
|
||||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
|
||||||
mFavoriteSubscribedSubredditData.size() + 3 : 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
|
||||||
mFavoriteSubscribedSubredditData.size() + 2 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
name = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
name = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
||||||
fullname = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getQualified_name();
|
fullname = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getQualified_name();
|
||||||
iconUrl = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
|
iconUrl = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
|
||||||
|
|
||||||
if (itemClickListener != null) {
|
if (itemClickListener != null) {
|
||||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, false));
|
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(communityData));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,11 +197,12 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
|||||||
} else {
|
} else {
|
||||||
offset = 1;
|
offset = 1;
|
||||||
}
|
}
|
||||||
|
SubscribedSubredditData communityData = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset);
|
||||||
String name = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
String name = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
||||||
String iconUrl = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
|
String iconUrl = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
|
||||||
|
|
||||||
if (itemClickListener != null) {
|
if (itemClickListener != null) {
|
||||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, false));
|
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(communityData));
|
||||||
} else {
|
} else {
|
||||||
viewHolder.itemView.setOnClickListener(view -> {
|
viewHolder.itemView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
||||||
@@ -250,26 +229,9 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
|||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
if (mSubscribedSubredditData != null) {
|
if (mSubscribedSubredditData != null) {
|
||||||
if(mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) {
|
|
||||||
if (itemClickListener != null) {
|
|
||||||
if (hasClearSelectionRow) {
|
|
||||||
return mSubscribedSubredditData.size() > 0 ?
|
|
||||||
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 4 : 0;
|
|
||||||
} else {
|
|
||||||
return mSubscribedSubredditData.size() > 0 ?
|
|
||||||
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 3 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return mSubscribedSubredditData.size() > 0 ?
|
|
||||||
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 2 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (itemClickListener != null) {
|
if (itemClickListener != null) {
|
||||||
if (hasClearSelectionRow) {
|
return mSubscribedSubredditData.size() > 0 ? mSubscribedSubredditData.size() + ((hasClearSelectionRow) ? 1 : 0) : 0;
|
||||||
return mSubscribedSubredditData.size() > 0 ? mSubscribedSubredditData.size() + 2 : 0;
|
|
||||||
} else {
|
|
||||||
return mSubscribedSubredditData.size() > 0 ? mSubscribedSubredditData.size() + 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mSubscribedSubredditData.size();
|
return mSubscribedSubredditData.size();
|
||||||
@@ -347,7 +309,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
|||||||
}
|
}
|
||||||
|
|
||||||
public interface ItemClickListener {
|
public interface ItemClickListener {
|
||||||
void onClick(String name, String iconUrl, boolean subredditIsUser);
|
void onClick(SubscribedSubredditData subredditData);
|
||||||
}
|
}
|
||||||
|
|
||||||
class SubredditViewHolder extends RecyclerView.ViewHolder {
|
class SubredditViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ public class AccountSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
|||||||
|
|
||||||
private static final int VIEW_TYPE_MENU_GROUP_TITLE = 1;
|
private static final int VIEW_TYPE_MENU_GROUP_TITLE = 1;
|
||||||
private static final int VIEW_TYPE_MENU_ITEM = 2;
|
private static final int VIEW_TYPE_MENU_ITEM = 2;
|
||||||
private static final int ACCOUNT_SECTION_ITEMS = 5;
|
private static final int ACCOUNT_SECTION_ITEMS = 4;
|
||||||
private static final int ANONYMOUS_ACCOUNT_SECTION_ITEMS = 3;
|
private static final int ANONYMOUS_ACCOUNT_SECTION_ITEMS = 2;
|
||||||
|
|
||||||
private BaseActivity baseActivity;
|
private BaseActivity baseActivity;
|
||||||
private int inboxCount;
|
private int inboxCount;
|
||||||
@@ -101,10 +101,6 @@ public class AccountSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
|||||||
drawableId = R.drawable.ic_subscritptions_bottom_app_bar_24dp;
|
drawableId = R.drawable.ic_subscritptions_bottom_app_bar_24dp;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
stringId = R.string.multi_reddit;
|
|
||||||
drawableId = R.drawable.ic_multi_reddit_24dp;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
setOnClickListener = false;
|
setOnClickListener = false;
|
||||||
if (inboxCount > 0) {
|
if (inboxCount > 0) {
|
||||||
((MenuItemViewHolder) holder).menuTextView.setText(baseActivity.getString(R.string.inbox_with_count, inboxCount));
|
((MenuItemViewHolder) holder).menuTextView.setText(baseActivity.getString(R.string.inbox_with_count, inboxCount));
|
||||||
@@ -118,23 +114,21 @@ public class AccountSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
stringId = R.string.history;
|
stringId = R.string.account_saved_thing_activity_label;
|
||||||
drawableId = R.drawable.ic_history_24dp;
|
drawableId = R.drawable.ic_outline_bookmarks_24dp;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (position) {
|
switch (position) {
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
stringId = R.string.subscriptions;
|
stringId = R.string.subscriptions;
|
||||||
drawableId = R.drawable.ic_subscritptions_bottom_app_bar_24dp;
|
drawableId = R.drawable.ic_subscritptions_bottom_app_bar_24dp;
|
||||||
break;
|
break;
|
||||||
case 2:
|
|
||||||
stringId = R.string.multi_reddit;
|
|
||||||
drawableId = R.drawable.ic_multi_reddit_24dp;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
stringId = R.string.history;
|
stringId = R.string.anonymous_account_instance;
|
||||||
drawableId = R.drawable.ic_history_24dp;
|
drawableId = R.drawable.ic_account_circle_24dp;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
|||||||
public class NavigationDrawerRecyclerViewMergedAdapter {
|
public class NavigationDrawerRecyclerViewMergedAdapter {
|
||||||
private HeaderSectionRecyclerViewAdapter headerSectionRecyclerViewAdapter;
|
private HeaderSectionRecyclerViewAdapter headerSectionRecyclerViewAdapter;
|
||||||
private AccountSectionRecyclerViewAdapter accountSectionRecyclerViewAdapter;
|
private AccountSectionRecyclerViewAdapter accountSectionRecyclerViewAdapter;
|
||||||
private RedditSectionRecyclerViewAdapter redditSectionRecyclerViewAdapter;
|
|
||||||
private PostSectionRecyclerViewAdapter postSectionRecyclerViewAdapter;
|
|
||||||
private PreferenceSectionRecyclerViewAdapter preferenceSectionRecyclerViewAdapter;
|
private PreferenceSectionRecyclerViewAdapter preferenceSectionRecyclerViewAdapter;
|
||||||
private FavoriteSubscribedSubredditsSectionRecyclerViewAdapter favoriteSubscribedSubredditsSectionRecyclerViewAdapter;
|
private FavoriteSubscribedSubredditsSectionRecyclerViewAdapter favoriteSubscribedSubredditsSectionRecyclerViewAdapter;
|
||||||
private SubscribedSubredditsRecyclerViewAdapter subscribedSubredditsRecyclerViewAdapter;
|
private SubscribedSubredditsRecyclerViewAdapter subscribedSubredditsRecyclerViewAdapter;
|
||||||
@@ -49,10 +47,6 @@ public class NavigationDrawerRecyclerViewMergedAdapter {
|
|||||||
});
|
});
|
||||||
accountSectionRecyclerViewAdapter = new AccountSectionRecyclerViewAdapter(baseActivity, customThemeWrapper,
|
accountSectionRecyclerViewAdapter = new AccountSectionRecyclerViewAdapter(baseActivity, customThemeWrapper,
|
||||||
navigationDrawerSharedPreferences, accountName != null, itemClickListener);
|
navigationDrawerSharedPreferences, accountName != null, itemClickListener);
|
||||||
redditSectionRecyclerViewAdapter = new RedditSectionRecyclerViewAdapter(baseActivity, customThemeWrapper,
|
|
||||||
navigationDrawerSharedPreferences, itemClickListener);
|
|
||||||
postSectionRecyclerViewAdapter = new PostSectionRecyclerViewAdapter(baseActivity, customThemeWrapper,
|
|
||||||
navigationDrawerSharedPreferences, accountName != null, itemClickListener);
|
|
||||||
preferenceSectionRecyclerViewAdapter = new PreferenceSectionRecyclerViewAdapter(baseActivity, customThemeWrapper,
|
preferenceSectionRecyclerViewAdapter = new PreferenceSectionRecyclerViewAdapter(baseActivity, customThemeWrapper,
|
||||||
accountName, nsfwAndSpoilerSharedPreferences, navigationDrawerSharedPreferences, itemClickListener);
|
accountName, nsfwAndSpoilerSharedPreferences, navigationDrawerSharedPreferences, itemClickListener);
|
||||||
favoriteSubscribedSubredditsSectionRecyclerViewAdapter = new FavoriteSubscribedSubredditsSectionRecyclerViewAdapter(
|
favoriteSubscribedSubredditsSectionRecyclerViewAdapter = new FavoriteSubscribedSubredditsSectionRecyclerViewAdapter(
|
||||||
@@ -65,8 +59,6 @@ public class NavigationDrawerRecyclerViewMergedAdapter {
|
|||||||
mainPageConcatAdapter = new ConcatAdapter(
|
mainPageConcatAdapter = new ConcatAdapter(
|
||||||
headerSectionRecyclerViewAdapter,
|
headerSectionRecyclerViewAdapter,
|
||||||
accountSectionRecyclerViewAdapter,
|
accountSectionRecyclerViewAdapter,
|
||||||
redditSectionRecyclerViewAdapter,
|
|
||||||
postSectionRecyclerViewAdapter,
|
|
||||||
preferenceSectionRecyclerViewAdapter,
|
preferenceSectionRecyclerViewAdapter,
|
||||||
favoriteSubscribedSubredditsSectionRecyclerViewAdapter,
|
favoriteSubscribedSubredditsSectionRecyclerViewAdapter,
|
||||||
subscribedSubredditsRecyclerViewAdapter);
|
subscribedSubredditsRecyclerViewAdapter);
|
||||||
@@ -78,8 +70,6 @@ public class NavigationDrawerRecyclerViewMergedAdapter {
|
|||||||
|
|
||||||
private void openAccountSection() {
|
private void openAccountSection() {
|
||||||
mainPageConcatAdapter.removeAdapter(accountSectionRecyclerViewAdapter);
|
mainPageConcatAdapter.removeAdapter(accountSectionRecyclerViewAdapter);
|
||||||
mainPageConcatAdapter.removeAdapter(redditSectionRecyclerViewAdapter);
|
|
||||||
mainPageConcatAdapter.removeAdapter(postSectionRecyclerViewAdapter);
|
|
||||||
mainPageConcatAdapter.removeAdapter(preferenceSectionRecyclerViewAdapter);
|
mainPageConcatAdapter.removeAdapter(preferenceSectionRecyclerViewAdapter);
|
||||||
mainPageConcatAdapter.removeAdapter(favoriteSubscribedSubredditsSectionRecyclerViewAdapter);
|
mainPageConcatAdapter.removeAdapter(favoriteSubscribedSubredditsSectionRecyclerViewAdapter);
|
||||||
mainPageConcatAdapter.removeAdapter(subscribedSubredditsRecyclerViewAdapter);
|
mainPageConcatAdapter.removeAdapter(subscribedSubredditsRecyclerViewAdapter);
|
||||||
@@ -91,8 +81,6 @@ public class NavigationDrawerRecyclerViewMergedAdapter {
|
|||||||
mainPageConcatAdapter.removeAdapter(accountManagementSectionRecyclerViewAdapter);
|
mainPageConcatAdapter.removeAdapter(accountManagementSectionRecyclerViewAdapter);
|
||||||
|
|
||||||
mainPageConcatAdapter.addAdapter(accountSectionRecyclerViewAdapter);
|
mainPageConcatAdapter.addAdapter(accountSectionRecyclerViewAdapter);
|
||||||
mainPageConcatAdapter.addAdapter(redditSectionRecyclerViewAdapter);
|
|
||||||
mainPageConcatAdapter.addAdapter(postSectionRecyclerViewAdapter);
|
|
||||||
mainPageConcatAdapter.addAdapter(preferenceSectionRecyclerViewAdapter);
|
mainPageConcatAdapter.addAdapter(preferenceSectionRecyclerViewAdapter);
|
||||||
mainPageConcatAdapter.addAdapter(favoriteSubscribedSubredditsSectionRecyclerViewAdapter);
|
mainPageConcatAdapter.addAdapter(favoriteSubscribedSubredditsSectionRecyclerViewAdapter);
|
||||||
mainPageConcatAdapter.addAdapter(subscribedSubredditsRecyclerViewAdapter);
|
mainPageConcatAdapter.addAdapter(subscribedSubredditsRecyclerViewAdapter);
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ public class RedditSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
|
|||||||
private static final int VIEW_TYPE_MENU_ITEM = 2;
|
private static final int VIEW_TYPE_MENU_ITEM = 2;
|
||||||
private static final int REDDIT_SECTION_ITEMS = 1;
|
private static final int REDDIT_SECTION_ITEMS = 1;
|
||||||
|
|
||||||
|
private static final int REDDIT_SECTION_ANONYMOUS_ITEMS = 2;
|
||||||
|
private final boolean isLoggedIn;
|
||||||
|
|
||||||
private BaseActivity baseActivity;
|
private BaseActivity baseActivity;
|
||||||
private int primaryTextColor;
|
private int primaryTextColor;
|
||||||
private int secondaryTextColor;
|
private int secondaryTextColor;
|
||||||
@@ -33,13 +36,14 @@ public class RedditSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
|
|||||||
|
|
||||||
public RedditSectionRecyclerViewAdapter(BaseActivity baseActivity, CustomThemeWrapper customThemeWrapper,
|
public RedditSectionRecyclerViewAdapter(BaseActivity baseActivity, CustomThemeWrapper customThemeWrapper,
|
||||||
SharedPreferences navigationDrawerSharedPreferences,
|
SharedPreferences navigationDrawerSharedPreferences,
|
||||||
NavigationDrawerRecyclerViewMergedAdapter.ItemClickListener itemClickListener) {
|
NavigationDrawerRecyclerViewMergedAdapter.ItemClickListener itemClickListener, boolean isLoggedIn) {
|
||||||
this.baseActivity = baseActivity;
|
this.baseActivity = baseActivity;
|
||||||
primaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
primaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
||||||
secondaryTextColor = customThemeWrapper.getSecondaryTextColor();
|
secondaryTextColor = customThemeWrapper.getSecondaryTextColor();
|
||||||
primaryIconColor = customThemeWrapper.getPrimaryIconColor();
|
primaryIconColor = customThemeWrapper.getPrimaryIconColor();
|
||||||
collapseRedditSection = navigationDrawerSharedPreferences.getBoolean(SharedPreferencesUtils.COLLAPSE_REDDIT_SECTION, false);
|
collapseRedditSection = navigationDrawerSharedPreferences.getBoolean(SharedPreferencesUtils.COLLAPSE_REDDIT_SECTION, false);
|
||||||
this.itemClickListener = itemClickListener;
|
this.itemClickListener = itemClickListener;
|
||||||
|
this.isLoggedIn = isLoggedIn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -88,6 +92,9 @@ public class RedditSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
|
|||||||
stringId = R.string.trending;
|
stringId = R.string.trending;
|
||||||
drawableId = R.drawable.ic_trending_24dp;
|
drawableId = R.drawable.ic_trending_24dp;
|
||||||
break;
|
break;
|
||||||
|
case 2:
|
||||||
|
stringId = R.string.anonymous_account_instance;
|
||||||
|
drawableId = R.drawable.ic_account_circle_24dp;
|
||||||
}
|
}
|
||||||
|
|
||||||
((MenuItemViewHolder) holder).menuTextView.setText(stringId);
|
((MenuItemViewHolder) holder).menuTextView.setText(stringId);
|
||||||
@@ -99,7 +106,7 @@ public class RedditSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return collapseRedditSection ? 1 : REDDIT_SECTION_ITEMS + 1;
|
return !collapseRedditSection ? (isLoggedIn ? REDDIT_SECTION_ITEMS + 1 : REDDIT_SECTION_ANONYMOUS_ITEMS + 1) : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
class MenuGroupTitleViewHolder extends RecyclerView.ViewHolder {
|
class MenuGroupTitleViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|||||||
@@ -1,15 +1,26 @@
|
|||||||
package eu.toldi.infinityforlemmy.apis;
|
package eu.toldi.infinityforlemmy.apis;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.dto.AccountLoginDTO;
|
import eu.toldi.infinityforlemmy.dto.AccountLoginDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.AuthDTO;
|
||||||
import eu.toldi.infinityforlemmy.dto.CommentDTO;
|
import eu.toldi.infinityforlemmy.dto.CommentDTO;
|
||||||
import eu.toldi.infinityforlemmy.dto.CommentVoteDTO;
|
import eu.toldi.infinityforlemmy.dto.CommentVoteDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.DeleteCommentDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.DeletePostDTO;
|
||||||
import eu.toldi.infinityforlemmy.dto.EditCommentDTO;
|
import eu.toldi.infinityforlemmy.dto.EditCommentDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.EditPostDTO;
|
||||||
import eu.toldi.infinityforlemmy.dto.FollowCommunityDTO;
|
import eu.toldi.infinityforlemmy.dto.FollowCommunityDTO;
|
||||||
import eu.toldi.infinityforlemmy.dto.PostVoteDTO;
|
import eu.toldi.infinityforlemmy.dto.PostVoteDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.ReadCommentDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.ReadMessageDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.ReadPostDTO;
|
||||||
import eu.toldi.infinityforlemmy.dto.SaveCommentDTO;
|
import eu.toldi.infinityforlemmy.dto.SaveCommentDTO;
|
||||||
import eu.toldi.infinityforlemmy.dto.SavePostDTO;
|
import eu.toldi.infinityforlemmy.dto.SavePostDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.SubmitPostDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.message.MessageCount;
|
||||||
import okhttp3.MultipartBody;
|
import okhttp3.MultipartBody;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
@@ -31,12 +42,48 @@ public interface LemmyAPI {
|
|||||||
@GET("api/v3/user")
|
@GET("api/v3/user")
|
||||||
Call<String> userInfo(@Query("username") String username, @Query("auth") String access_token);
|
Call<String> userInfo(@Query("username") String username, @Query("auth") String access_token);
|
||||||
|
|
||||||
|
@GET("api/v3/user/mention")
|
||||||
|
Call<String> userMentions(@Query("sort") String sort, @Query("page") Integer page, @Query("limit") Integer limit, @Query("unread_only") boolean unread_only, @Query("auth") String access_token);
|
||||||
|
|
||||||
|
@GET("api/v3/user/replies")
|
||||||
|
Call<String> userReplies(@Query("sort") String sort, @Query("page") Integer page, @Query("limit") Integer limit, @Query("unread_only") boolean unread_only, @Query("auth") String access_token);
|
||||||
|
|
||||||
|
@GET("api/v3/private_message/list")
|
||||||
|
Call<String> privateMessageList(@Query("page") Integer page, @Query("limit") Integer limit, @Query("unread_only") boolean unread_only, @Query("auth") String access_token);
|
||||||
|
|
||||||
|
@GET("api/v3/user/unread_count")
|
||||||
|
Call<MessageCount> userUnreadCount(@NonNull @Query("auth") String access_token);
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("api/v3/user/mention/mark_as_read")
|
||||||
|
Call<String> userMentionMarkAsRead(@Body ReadMessageDTO params);
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("api/v3/comment/mark_as_read")
|
||||||
|
Call<String> commentMarkAsRead(@Body ReadCommentDTO params);
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("api/v3/user/mark_all_as_read")
|
||||||
|
Call<String> userMarkAllAsRead(@Body AuthDTO params);
|
||||||
|
|
||||||
@GET("api/v3/community")
|
@GET("api/v3/community")
|
||||||
Call<String> communityInfo(@Query("name") String name, @Query("auth") String access_token);
|
Call<String> communityInfo(@Query("name") String name, @Query("auth") String access_token);
|
||||||
|
|
||||||
@GET("api/v3/post")
|
@GET("api/v3/post")
|
||||||
Call<String> postInfo(@Query("id") Integer postID, @Query("comment_id") Integer comment_id, @Query("auth") String access_token);
|
Call<String> postInfo(@Query("id") Integer postID, @Query("comment_id") Integer comment_id, @Query("auth") String access_token);
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("api/v3/post")
|
||||||
|
Call<String> postCreate(@Body SubmitPostDTO params);
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@PUT("api/v3/post")
|
||||||
|
Call<String> postUpdate(@Body EditPostDTO params);
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("api/v3/post/delete")
|
||||||
|
Call<String> postDelete(@Body DeletePostDTO params);
|
||||||
|
|
||||||
@GET("api/v3/user")
|
@GET("api/v3/user")
|
||||||
ListenableFuture<Response<String>> getUserPosts(
|
ListenableFuture<Response<String>> getUserPosts(
|
||||||
@Query("username") String username,
|
@Query("username") String username,
|
||||||
@@ -46,6 +93,16 @@ public interface LemmyAPI {
|
|||||||
@Query("saved_only") Boolean saved_only,
|
@Query("saved_only") Boolean saved_only,
|
||||||
@Query("auth") String access_token);
|
@Query("auth") String access_token);
|
||||||
|
|
||||||
|
@GET("api/v3/user")
|
||||||
|
Call<String> getUserComments(
|
||||||
|
@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/community/list")
|
@GET("api/v3/community/list")
|
||||||
Call<String> listCommunities(
|
Call<String> listCommunities(
|
||||||
@Query("type_") String type_,
|
@Query("type_") String type_,
|
||||||
@@ -83,6 +140,10 @@ public interface LemmyAPI {
|
|||||||
@PUT("api/v3/post/save")
|
@PUT("api/v3/post/save")
|
||||||
Call<String> postSave(@Body SavePostDTO params);
|
Call<String> postSave(@Body SavePostDTO params);
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("api/v3/post/mark_as_read")
|
||||||
|
Call<String> postRead(@Body ReadPostDTO params);
|
||||||
|
|
||||||
@Headers("Content-Type: application/json")
|
@Headers("Content-Type: application/json")
|
||||||
@PUT("api/v3/comment/save")
|
@PUT("api/v3/comment/save")
|
||||||
Call<String> commentSave(@Body SaveCommentDTO params);
|
Call<String> commentSave(@Body SaveCommentDTO params);
|
||||||
@@ -134,6 +195,10 @@ public interface LemmyAPI {
|
|||||||
@POST("api/v3/comment")
|
@POST("api/v3/comment")
|
||||||
Call<String> postComment(@Body CommentDTO params);
|
Call<String> postComment(@Body CommentDTO params);
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("api/v3/comment/delete")
|
||||||
|
Call<String> commentDelete(@Body DeleteCommentDTO params);
|
||||||
|
|
||||||
@Headers("Content-Type: application/json")
|
@Headers("Content-Type: application/json")
|
||||||
@PUT("api/v3/comment")
|
@PUT("api/v3/comment")
|
||||||
Call<String> commentEdit(@Body EditCommentDTO params);
|
Call<String> commentEdit(@Body EditCommentDTO params);
|
||||||
@@ -144,4 +209,16 @@ public interface LemmyAPI {
|
|||||||
@Header("Cookie") String token,
|
@Header("Cookie") String token,
|
||||||
@Part MultipartBody.Part filePart
|
@Part MultipartBody.Part filePart
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@GET("api/v3/resolve_object")
|
||||||
|
Call<String> resolveObject(
|
||||||
|
@Query("q") String query,
|
||||||
|
@Query("auth") String auth
|
||||||
|
);
|
||||||
|
|
||||||
|
@GET("api/v3/comment")
|
||||||
|
Call<String> getComment(
|
||||||
|
@Query("id") int commentId,
|
||||||
|
@Query("auth") String auth
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,9 +127,9 @@ public class CommentMoreBottomSheetFragment extends LandscapeExpandedRoundedBott
|
|||||||
deleteTextView.setOnClickListener(view -> {
|
deleteTextView.setOnClickListener(view -> {
|
||||||
dismiss();
|
dismiss();
|
||||||
if (activity instanceof ViewPostDetailActivity) {
|
if (activity instanceof ViewPostDetailActivity) {
|
||||||
((ViewPostDetailActivity) activity).deleteComment(comment.getFullName(), bundle.getInt(EXTRA_POSITION));
|
((ViewPostDetailActivity) activity).deleteComment(comment.getId(), bundle.getInt(EXTRA_POSITION));
|
||||||
} else if (activity instanceof ViewUserDetailActivity) {
|
} else if (activity instanceof ViewUserDetailActivity) {
|
||||||
((ViewUserDetailActivity) activity).deleteComment(comment.getFullName());
|
((ViewUserDetailActivity) activity).deleteComment(comment.getId());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ public class FABMoreOptionsBottomSheetFragment extends LandscapeExpandedRoundedB
|
|||||||
public static final int FAB_OPTION_SEARCH = 4;
|
public static final int FAB_OPTION_SEARCH = 4;
|
||||||
public static final int FAB_OPTION_GO_TO_SUBREDDIT = 5;
|
public static final int FAB_OPTION_GO_TO_SUBREDDIT = 5;
|
||||||
public static final int FAB_OPTION_GO_TO_USER = 6;
|
public static final int FAB_OPTION_GO_TO_USER = 6;
|
||||||
public static final int FAB_RANDOM = 7;
|
|
||||||
public static final int FAB_HIDE_READ_POSTS = 8;
|
public static final int FAB_HIDE_READ_POSTS = 8;
|
||||||
public static final int FAB_FILTER_POSTS = 9;
|
public static final int FAB_FILTER_POSTS = 9;
|
||||||
public static final int FAB_GO_TO_TOP = 10;
|
public static final int FAB_GO_TO_TOP = 10;
|
||||||
@@ -86,10 +85,6 @@ public class FABMoreOptionsBottomSheetFragment extends LandscapeExpandedRoundedB
|
|||||||
dismiss();
|
dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
binding.randomTextViewFabMoreOptionsBottomSheetFragment.setOnClickListener(view -> {
|
|
||||||
activity.fabOptionSelected(FAB_RANDOM);
|
|
||||||
dismiss();
|
|
||||||
});
|
|
||||||
|
|
||||||
binding.filterPostsTextViewFabMoreOptionsBottomSheetFragment.setOnClickListener(view -> {
|
binding.filterPostsTextViewFabMoreOptionsBottomSheetFragment.setOnClickListener(view -> {
|
||||||
activity.fabOptionSelected(FAB_FILTER_POSTS);
|
activity.fabOptionSelected(FAB_FILTER_POSTS);
|
||||||
|
|||||||
@@ -38,12 +38,6 @@ public class PostTypeBottomSheetFragment extends LandscapeExpandedRoundedBottomS
|
|||||||
TextView linkTypeTextView;
|
TextView linkTypeTextView;
|
||||||
@BindView(R.id.image_type_linear_layout_post_type_bottom_sheet_fragment)
|
@BindView(R.id.image_type_linear_layout_post_type_bottom_sheet_fragment)
|
||||||
TextView imageTypeTextView;
|
TextView imageTypeTextView;
|
||||||
@BindView(R.id.video_type_linear_layout_post_type_bottom_sheet_fragment)
|
|
||||||
TextView videoTypeTextView;
|
|
||||||
@BindView(R.id.gallery_type_linear_layout_post_type_bottom_sheet_fragment)
|
|
||||||
TextView galleryTypeTextView;
|
|
||||||
@BindView(R.id.poll_type_linear_layout_post_type_bottom_sheet_fragment)
|
|
||||||
TextView pollTypeTextView;
|
|
||||||
private BaseActivity activity;
|
private BaseActivity activity;
|
||||||
|
|
||||||
public PostTypeBottomSheetFragment() {
|
public PostTypeBottomSheetFragment() {
|
||||||
@@ -76,20 +70,6 @@ public class PostTypeBottomSheetFragment extends LandscapeExpandedRoundedBottomS
|
|||||||
dismiss();
|
dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
videoTypeTextView.setOnClickListener(view -> {
|
|
||||||
((PostTypeSelectionCallback) activity).postTypeSelected(TYPE_VIDEO);
|
|
||||||
dismiss();
|
|
||||||
});
|
|
||||||
|
|
||||||
galleryTypeTextView.setOnClickListener(view -> {
|
|
||||||
((PostTypeSelectionCallback) activity).postTypeSelected(TYPE_GALLERY);
|
|
||||||
dismiss();
|
|
||||||
});
|
|
||||||
|
|
||||||
pollTypeTextView.setOnClickListener(view -> {
|
|
||||||
((PostTypeSelectionCallback) activity).postTypeSelected(TYPE_POLL);
|
|
||||||
dismiss();
|
|
||||||
});
|
|
||||||
|
|
||||||
if (activity.typeface != null) {
|
if (activity.typeface != null) {
|
||||||
Utils.setFontToAllTextViews(rootView, activity.typeface);
|
Utils.setFontToAllTextViews(rootView, activity.typeface);
|
||||||
|
|||||||
@@ -31,16 +31,12 @@ public class SearchPostSortTypeBottomSheetFragment extends LandscapeExpandedRoun
|
|||||||
|
|
||||||
public static final String EXTRA_CURRENT_SORT_TYPE = "ECST";
|
public static final String EXTRA_CURRENT_SORT_TYPE = "ECST";
|
||||||
|
|
||||||
@BindView(R.id.relevance_type_text_view_search_sort_type_bottom_sheet_fragment)
|
|
||||||
TextView relevanceTypeTextView;
|
|
||||||
@BindView(R.id.hot_type_text_view_search_sort_type_bottom_sheet_fragment)
|
|
||||||
TextView hotTypeTextView;
|
|
||||||
@BindView(R.id.top_type_text_view_search_sort_type_bottom_sheet_fragment)
|
@BindView(R.id.top_type_text_view_search_sort_type_bottom_sheet_fragment)
|
||||||
TextView topTypeTextView;
|
TextView topTypeTextView;
|
||||||
@BindView(R.id.new_type_text_view_search_sort_type_bottom_sheet_fragment)
|
@BindView(R.id.new_type_text_view_search_sort_type_bottom_sheet_fragment)
|
||||||
TextView newTypeTextView;
|
TextView newTypeTextView;
|
||||||
@BindView(R.id.comments_type_text_view_search_sort_type_bottom_sheet_fragment)
|
@BindView(R.id.old_type_text_view_search_sort_type_bottom_sheet_fragment)
|
||||||
TextView commentsTypeTextView;
|
TextView oldTypeTextView;
|
||||||
private BaseActivity activity;
|
private BaseActivity activity;
|
||||||
public SearchPostSortTypeBottomSheetFragment() {
|
public SearchPostSortTypeBottomSheetFragment() {
|
||||||
// Required empty public constructor
|
// Required empty public constructor
|
||||||
@@ -61,14 +57,12 @@ public class SearchPostSortTypeBottomSheetFragment extends LandscapeExpandedRoun
|
|||||||
ButterKnife.bind(this, rootView);
|
ButterKnife.bind(this, rootView);
|
||||||
|
|
||||||
String currentSortType = getArguments().getString(EXTRA_CURRENT_SORT_TYPE);
|
String currentSortType = getArguments().getString(EXTRA_CURRENT_SORT_TYPE);
|
||||||
if (currentSortType.equals(SortType.Type.HOT.fullName)) {
|
if (currentSortType.equals(SortType.Type.TOP.fullName)) {
|
||||||
hotTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(hotTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
|
||||||
} else if (currentSortType.equals(SortType.Type.TOP.fullName)) {
|
|
||||||
topTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(topTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
topTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(topTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
} else if (currentSortType.equals(SortType.Type.NEW.fullName)) {
|
} else if (currentSortType.equals(SortType.Type.NEW.fullName)) {
|
||||||
newTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(newTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
newTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(newTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
} else if (currentSortType.equals(SortType.Type.OLD.fullName)) {
|
} else if (currentSortType.equals(SortType.Type.OLD.fullName)) {
|
||||||
commentsTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(commentsTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
oldTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(oldTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
|
||||||
@@ -76,15 +70,6 @@ public class SearchPostSortTypeBottomSheetFragment extends LandscapeExpandedRoun
|
|||||||
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
|
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*relevanceTypeTextView.setOnClickListener(view -> {
|
|
||||||
((SortTypeSelectionCallback) activity).sortTypeSelected(SortType.Type.RELEVANCE.name());
|
|
||||||
dismiss();
|
|
||||||
});*/
|
|
||||||
|
|
||||||
hotTypeTextView.setOnClickListener(view -> {
|
|
||||||
((SortTypeSelectionCallback) activity).sortTypeSelected(SortType.Type.HOT.name());
|
|
||||||
dismiss();
|
|
||||||
});
|
|
||||||
|
|
||||||
topTypeTextView.setOnClickListener(view -> {
|
topTypeTextView.setOnClickListener(view -> {
|
||||||
((SortTypeSelectionCallback) activity).sortTypeSelected(SortType.Type.TOP.name());
|
((SortTypeSelectionCallback) activity).sortTypeSelected(SortType.Type.TOP.name());
|
||||||
@@ -92,12 +77,12 @@ public class SearchPostSortTypeBottomSheetFragment extends LandscapeExpandedRoun
|
|||||||
});
|
});
|
||||||
|
|
||||||
newTypeTextView.setOnClickListener(view -> {
|
newTypeTextView.setOnClickListener(view -> {
|
||||||
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.NEW));
|
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.NEW,null));
|
||||||
dismiss();
|
dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
commentsTypeTextView.setOnClickListener(view -> {
|
oldTypeTextView.setOnClickListener(view -> {
|
||||||
((SortTypeSelectionCallback) activity).sortTypeSelected(SortType.Type.MOST_COMMENTS.name());
|
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.OLD,null));
|
||||||
dismiss();
|
dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ public class Comment implements Parcelable {
|
|||||||
private int depth;
|
private int depth;
|
||||||
private int childCount;
|
private int childCount;
|
||||||
private boolean collapsed;
|
private boolean collapsed;
|
||||||
|
|
||||||
|
private boolean isDeleted;
|
||||||
private boolean hasReply;
|
private boolean hasReply;
|
||||||
private boolean saved;
|
private boolean saved;
|
||||||
private boolean isExpanded;
|
private boolean isExpanded;
|
||||||
@@ -67,7 +69,7 @@ public class Comment implements Parcelable {
|
|||||||
long commentTimeMillis, String commentMarkdown, String commentRawText,
|
long commentTimeMillis, String commentMarkdown, String commentRawText,
|
||||||
String linkId, String communityName, String communityQualifiedName, Integer parentId, int score,
|
String linkId, String communityName, String communityQualifiedName, Integer parentId, int score,
|
||||||
int voteType, boolean isSubmitter, String distinguished, String permalink,
|
int voteType, boolean isSubmitter, String distinguished, String permalink,
|
||||||
int depth, boolean collapsed, boolean hasReply, boolean saved, long edited, String[] path) {
|
int depth, boolean collapsed, boolean hasReply, boolean saved, boolean deleted, long edited, String[] path) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.postId = postId;
|
this.postId = postId;
|
||||||
this.fullName = fullName;
|
this.fullName = fullName;
|
||||||
@@ -90,6 +92,7 @@ public class Comment implements Parcelable {
|
|||||||
this.collapsed = collapsed;
|
this.collapsed = collapsed;
|
||||||
this.hasReply = hasReply;
|
this.hasReply = hasReply;
|
||||||
this.saved = saved;
|
this.saved = saved;
|
||||||
|
this.isDeleted = deleted;
|
||||||
this.isExpanded = false;
|
this.isExpanded = false;
|
||||||
this.hasExpandedBefore = false;
|
this.hasExpandedBefore = false;
|
||||||
this.editedTimeMillis = edited;
|
this.editedTimeMillis = edited;
|
||||||
|
|||||||
@@ -16,16 +16,13 @@ import java.util.Locale;
|
|||||||
|
|
||||||
import eu.toldi.infinityforlemmy.NetworkState;
|
import eu.toldi.infinityforlemmy.NetworkState;
|
||||||
import eu.toldi.infinityforlemmy.SortType;
|
import eu.toldi.infinityforlemmy.SortType;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class CommentDataSource extends PageKeyedDataSource<String, Comment> {
|
public class CommentDataSource extends PageKeyedDataSource<Integer, Comment> {
|
||||||
|
|
||||||
private Retrofit retrofit;
|
private Retrofit retrofit;
|
||||||
private Locale locale;
|
private Locale locale;
|
||||||
@@ -39,8 +36,8 @@ public class CommentDataSource extends PageKeyedDataSource<String, Comment> {
|
|||||||
private MutableLiveData<NetworkState> initialLoadStateLiveData;
|
private MutableLiveData<NetworkState> initialLoadStateLiveData;
|
||||||
private MutableLiveData<Boolean> hasPostLiveData;
|
private MutableLiveData<Boolean> hasPostLiveData;
|
||||||
|
|
||||||
private LoadParams<String> params;
|
private LoadParams<Integer> params;
|
||||||
private LoadCallback<String, Comment> callback;
|
private LoadCallback<Integer, Comment> callback;
|
||||||
|
|
||||||
CommentDataSource(Retrofit retrofit, Locale locale, @Nullable String accessToken, String username, SortType sortType,
|
CommentDataSource(Retrofit retrofit, Locale locale, @Nullable String accessToken, String username, SortType sortType,
|
||||||
boolean areSavedComments) {
|
boolean areSavedComments) {
|
||||||
@@ -72,42 +69,27 @@ public class CommentDataSource extends PageKeyedDataSource<String, Comment> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadInitial(@NonNull LoadInitialParams<String> params, @NonNull LoadInitialCallback<String, Comment> callback) {
|
public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull LoadInitialCallback<Integer, Comment> callback) {
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADING);
|
initialLoadStateLiveData.postValue(NetworkState.LOADING);
|
||||||
|
|
||||||
RedditAPI api = retrofit.create(RedditAPI.class);
|
LemmyAPI api = retrofit.create(LemmyAPI.class);
|
||||||
Call<String> commentsCall;
|
Call<String> commentsCall = api.getUserComments(username, sortType.getType().value, 1, 25, areSavedComments, accessToken);
|
||||||
if (areSavedComments) {
|
|
||||||
commentsCall = api.getUserSavedCommentsOauth(username, PostPagingSource.USER_WHERE_SAVED,
|
|
||||||
null, sortType.getType(), sortType.getTime(),
|
|
||||||
APIUtils.getOAuthHeader(accessToken));
|
|
||||||
} else {
|
|
||||||
if (accessToken == null) {
|
|
||||||
commentsCall = api.getUserComments(username, null, sortType.getType(),
|
|
||||||
sortType.getTime());
|
|
||||||
} else {
|
|
||||||
commentsCall = api.getUserCommentsOauth(APIUtils.getOAuthHeader(accessToken), username,
|
|
||||||
null, sortType.getType(), sortType.getTime());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
commentsCall.enqueue(new Callback<String>() {
|
commentsCall.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
new ParseCommentAsyncTask(response.body(), locale, new ParseCommentAsyncTask.ParseCommentAsyncTaskListener() {
|
new ParseCommentAsyncTask(response.body(), locale, new ParseCommentAsyncTask.ParseCommentAsyncTaskListener() {
|
||||||
@Override
|
@Override
|
||||||
public void parseSuccessful(ArrayList<Comment> comments, String after) {
|
public void parseSuccessful(ArrayList<Comment> comments, Integer after) {
|
||||||
if (comments.size() == 0) {
|
if (comments.isEmpty()) {
|
||||||
|
callback.onResult(comments, null, null);
|
||||||
hasPostLiveData.postValue(false);
|
hasPostLiveData.postValue(false);
|
||||||
} else {
|
} else {
|
||||||
hasPostLiveData.postValue(true);
|
hasPostLiveData.postValue(true);
|
||||||
|
callback.onResult(comments, null, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (after == null || after.equals("") || after.equals("null")) {
|
|
||||||
callback.onResult(comments, null, null);
|
|
||||||
} else {
|
|
||||||
callback.onResult(comments, null, after);
|
|
||||||
}
|
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,39 +111,27 @@ public class CommentDataSource extends PageKeyedDataSource<String, Comment> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadBefore(@NonNull LoadParams<String> params, @NonNull LoadCallback<String, Comment> callback) {
|
public void loadBefore(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, Comment> callback) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadAfter(@NonNull LoadParams<String> params, @NonNull LoadCallback<String, Comment> callback) {
|
public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, Comment> callback) {
|
||||||
this.params = params;
|
this.params = params;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
|
|
||||||
paginationNetworkStateLiveData.postValue(NetworkState.LOADING);
|
paginationNetworkStateLiveData.postValue(NetworkState.LOADING);
|
||||||
|
|
||||||
RedditAPI api = retrofit.create(RedditAPI.class);
|
LemmyAPI api = retrofit.create(LemmyAPI.class);
|
||||||
Call<String> commentsCall;
|
Call<String> commentsCall = api.getUserComments(username, sortType.getType().value, params.key, 25, areSavedComments, accessToken);
|
||||||
if (areSavedComments) {
|
|
||||||
commentsCall = api.getUserSavedCommentsOauth(username, PostPagingSource.USER_WHERE_SAVED, params.key,
|
|
||||||
sortType.getType(), sortType.getTime(), APIUtils.getOAuthHeader(accessToken));
|
|
||||||
} else {
|
|
||||||
if (accessToken == null) {
|
|
||||||
commentsCall = api.getUserComments(username, params.key, sortType.getType(),
|
|
||||||
sortType.getTime());
|
|
||||||
} else {
|
|
||||||
commentsCall = api.getUserCommentsOauth(APIUtils.getOAuthHeader(accessToken),
|
|
||||||
username, params.key, sortType.getType(), sortType.getTime());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
commentsCall.enqueue(new Callback<String>() {
|
commentsCall.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
new ParseCommentAsyncTask(response.body(), locale, new ParseCommentAsyncTask.ParseCommentAsyncTaskListener() {
|
new ParseCommentAsyncTask(response.body(), locale, new ParseCommentAsyncTask.ParseCommentAsyncTaskListener() {
|
||||||
@Override
|
@Override
|
||||||
public void parseSuccessful(ArrayList<Comment> comments, String after) {
|
public void parseSuccessful(ArrayList<Comment> comments, Integer after) {
|
||||||
if (after == null || after.equals("") || after.equals("null")) {
|
if (comments.isEmpty()) {
|
||||||
callback.onResult(comments, null);
|
callback.onResult(comments, null);
|
||||||
} else {
|
} else {
|
||||||
callback.onResult(comments, after);
|
callback.onResult(comments, after);
|
||||||
@@ -187,7 +157,7 @@ public class CommentDataSource extends PageKeyedDataSource<String, Comment> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static class ParseCommentAsyncTask extends AsyncTask<Void, ArrayList<Comment>, ArrayList<Comment>> {
|
private static class ParseCommentAsyncTask extends AsyncTask<Void, ArrayList<Comment>, ArrayList<Comment>> {
|
||||||
private String after;
|
private Integer after;
|
||||||
private Locale locale;
|
private Locale locale;
|
||||||
private JSONArray commentsJSONArray;
|
private JSONArray commentsJSONArray;
|
||||||
private boolean parseFailed;
|
private boolean parseFailed;
|
||||||
@@ -197,9 +167,8 @@ public class CommentDataSource extends PageKeyedDataSource<String, Comment> {
|
|||||||
this.locale = locale;
|
this.locale = locale;
|
||||||
this.parseCommentAsyncTaskListener = parseCommentAsyncTaskListener;
|
this.parseCommentAsyncTaskListener = parseCommentAsyncTaskListener;
|
||||||
try {
|
try {
|
||||||
JSONObject data = new JSONObject(response).getJSONObject(JSONUtils.DATA_KEY);
|
JSONObject data = new JSONObject(response);
|
||||||
commentsJSONArray = data.getJSONArray(JSONUtils.CHILDREN_KEY);
|
commentsJSONArray = data.getJSONArray("comments");
|
||||||
after = data.getString(JSONUtils.AFTER_KEY);
|
|
||||||
parseFailed = false;
|
parseFailed = false;
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
parseFailed = true;
|
parseFailed = true;
|
||||||
@@ -216,7 +185,7 @@ public class CommentDataSource extends PageKeyedDataSource<String, Comment> {
|
|||||||
ArrayList<Comment> comments = new ArrayList<>();
|
ArrayList<Comment> comments = new ArrayList<>();
|
||||||
for (int i = 0; i < commentsJSONArray.length(); i++) {
|
for (int i = 0; i < commentsJSONArray.length(); i++) {
|
||||||
try {
|
try {
|
||||||
JSONObject commentJSON = commentsJSONArray.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
|
JSONObject commentJSON = commentsJSONArray.getJSONObject(i);
|
||||||
comments.add(ParseComment.parseSingleComment(commentJSON));
|
comments.add(ParseComment.parseSingleComment(commentJSON));
|
||||||
} catch (JSONException ignored) {
|
} catch (JSONException ignored) {
|
||||||
}
|
}
|
||||||
@@ -235,7 +204,7 @@ public class CommentDataSource extends PageKeyedDataSource<String, Comment> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface ParseCommentAsyncTaskListener {
|
interface ParseCommentAsyncTaskListener {
|
||||||
void parseSuccessful(ArrayList<Comment> comments, String after);
|
void parseSuccessful(ArrayList<Comment> comments, Integer page);
|
||||||
|
|
||||||
void parseFailed();
|
void parseFailed();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ import android.os.Handler;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
@@ -98,6 +101,32 @@ public class FetchComment {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void fetchSingleComment(Retrofit retrofit, @Nullable String accessToken, int commentId,
|
||||||
|
FetchCommentListener fetchCommentListener) {
|
||||||
|
LemmyAPI api = retrofit.create(LemmyAPI.class);
|
||||||
|
Call<String> comment = api.getComment(commentId, accessToken);
|
||||||
|
comment.enqueue(new Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
|
if (response.isSuccessful() && response.body() != null) {
|
||||||
|
try {
|
||||||
|
Comment c = ParseComment.parseSingleComment(new JSONObject(response.body()).getJSONObject("comment_view"));
|
||||||
|
ArrayList<Comment> comments = new ArrayList<>();
|
||||||
|
comments.add(c);
|
||||||
|
fetchCommentListener.onFetchCommentSuccess(comments, null, null);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
fetchCommentListener.onFetchCommentFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
|
fetchCommentListener.onFetchCommentFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public interface FetchCommentListener {
|
public interface FetchCommentListener {
|
||||||
void onFetchCommentSuccess(ArrayList<Comment> expandedComments, Integer parentId, ArrayList<Integer> children);
|
void onFetchCommentSuccess(ArrayList<Comment> expandedComments, Integer parentId, ArrayList<Integer> children);
|
||||||
|
|
||||||
|
|||||||
@@ -9,16 +9,22 @@ import org.json.JSONArray;
|
|||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.TimeZone;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
|
|
||||||
@@ -34,7 +40,6 @@ public class ParseComment {
|
|||||||
|
|
||||||
ArrayList<Comment> expandedNewComments = new ArrayList<>();
|
ArrayList<Comment> expandedNewComments = new ArrayList<>();
|
||||||
ArrayList<Integer> moreChildrenIds = new ArrayList<>();
|
ArrayList<Integer> moreChildrenIds = new ArrayList<>();
|
||||||
ArrayList<Comment> newComments = new ArrayList<>();
|
|
||||||
|
|
||||||
|
|
||||||
Map<Integer, Comment> parsedComments = new HashMap<>();
|
Map<Integer, Comment> parsedComments = new HashMap<>();
|
||||||
@@ -49,8 +54,13 @@ public class ParseComment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Comment parentComment = (commentId != null) ? parsedComments.get(commentId) : null;
|
Comment parentComment = (commentId != null) ? parsedComments.get(commentId) : null;
|
||||||
if (parentComment != null && parentComment.getDepth() == 0)
|
if (parentComment != null) {
|
||||||
|
if (parentComment.getDepth() == 0) {
|
||||||
parentComment = null;
|
parentComment = null;
|
||||||
|
} else {
|
||||||
|
expandedNewComments.add(parentComment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = orderedComments.size() - 1; i >= 0; i--) {
|
for (int i = orderedComments.size() - 1; i >= 0; i--) {
|
||||||
Comment c = orderedComments.get(i);
|
Comment c = orderedComments.get(i);
|
||||||
@@ -64,9 +74,7 @@ public class ParseComment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Add all comments to newComments
|
//Add all comments to newComments
|
||||||
for (int i = 0; i < topLevelComments.size(); i++) {
|
ArrayList<Comment> newComments = new ArrayList<>(topLevelComments);
|
||||||
newComments.add(topLevelComments.get(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
expandChildren(newComments, expandedNewComments, expandChildren);
|
expandChildren(newComments, expandedNewComments, expandChildren);
|
||||||
|
|
||||||
@@ -281,12 +289,27 @@ public class ParseComment {
|
|||||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||||
commentTimeMillis = ZonedDateTime.parse(commentObj.getString("published"),
|
commentTimeMillis = ZonedDateTime.parse(commentObj.getString("published"),
|
||||||
DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.of("Z"))).toInstant().toEpochMilli();
|
DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.of("Z"))).toInstant().toEpochMilli();
|
||||||
|
} else {
|
||||||
|
String dateStr = commentObj.getString("published");
|
||||||
|
|
||||||
|
dateStr = dateStr.substring(0, dateStr.lastIndexOf(".") + 4) + 'Z';
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());
|
||||||
|
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||||
|
try {
|
||||||
|
Date date = sdf.parse(dateStr);
|
||||||
|
if (date != null) {
|
||||||
|
commentTimeMillis = date.getTime();
|
||||||
}
|
}
|
||||||
String commentMarkdown = commentObj.getString("content");
|
} catch (ParseException e) {
|
||||||
String commentRawText = commentObj.getString("content");
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String content = MarkdownUtils.processImageCaptions(commentObj.getString("content"), "Image");
|
||||||
|
String commentMarkdown = content;
|
||||||
|
String commentRawText = content;
|
||||||
String linkId = postObj.getString("id");
|
String linkId = postObj.getString("id");
|
||||||
String communityName = communityObj.getString("name");
|
String communityName = communityObj.getString("name");
|
||||||
String communityQualifiedName = communityObj.getString("actor_id");
|
String communityQualifiedName = LemmyUtils.actorID2FullName(communityObj.getString("actor_id"));
|
||||||
|
|
||||||
int score = countsObj.getInt("score");
|
int score = countsObj.getInt("score");
|
||||||
int voteType = (jsonObject.isNull("my_vote")) ? 0 : jsonObject.getInt("my_vote");
|
int voteType = (jsonObject.isNull("my_vote")) ? 0 : jsonObject.getInt("my_vote");
|
||||||
@@ -304,11 +327,12 @@ public class ParseComment {
|
|||||||
boolean collapsed = false;
|
boolean collapsed = false;
|
||||||
boolean hasReply = countsObj.getInt("child_count") > 0;
|
boolean hasReply = countsObj.getInt("child_count") > 0;
|
||||||
boolean saved = jsonObject.getBoolean("saved");
|
boolean saved = jsonObject.getBoolean("saved");
|
||||||
|
boolean deleted = commentObj.getBoolean("deleted");
|
||||||
long edited = 0;
|
long edited = 0;
|
||||||
|
|
||||||
Comment comment = new Comment(id,postID, fullName, author, authorQualifiedName, linkAuthor, commentTimeMillis,
|
Comment comment = new Comment(id, postID, fullName, author, authorQualifiedName, linkAuthor, commentTimeMillis,
|
||||||
commentMarkdown, commentRawText, linkId, communityName, communityQualifiedName, parentId,
|
commentMarkdown, commentRawText, linkId, communityName, communityQualifiedName, parentId,
|
||||||
score, voteType, isSubmitter, distinguished, permalink, depth, collapsed, hasReply, saved, edited, path);
|
score, voteType, isSubmitter, distinguished, permalink, depth, collapsed, hasReply, saved, deleted, edited, path);
|
||||||
int child_count = countsObj.getInt("child_count");
|
int child_count = countsObj.getInt("child_count");
|
||||||
comment.setChildCount(child_count);
|
comment.setChildCount(child_count);
|
||||||
return comment;
|
return comment;
|
||||||
|
|||||||
14
app/src/main/java/eu/toldi/infinityforlemmy/dto/AuthDTO.java
Normal file
14
app/src/main/java/eu/toldi/infinityforlemmy/dto/AuthDTO.java
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.dto;
|
||||||
|
|
||||||
|
public class AuthDTO {
|
||||||
|
|
||||||
|
private String auth;
|
||||||
|
|
||||||
|
public AuthDTO(String auth) {
|
||||||
|
this.auth = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuth() {
|
||||||
|
return auth;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.dto;
|
||||||
|
|
||||||
|
public class DeleteCommentDTO {
|
||||||
|
|
||||||
|
private int comment_id;
|
||||||
|
boolean deleted;
|
||||||
|
String auth;
|
||||||
|
|
||||||
|
public DeleteCommentDTO(int comment_id, boolean deleted, String auth) {
|
||||||
|
this.comment_id = comment_id;
|
||||||
|
this.deleted = deleted;
|
||||||
|
this.auth = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getComment_id() {
|
||||||
|
return comment_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDeleted() {
|
||||||
|
return deleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuth() {
|
||||||
|
return auth;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.dto;
|
||||||
|
|
||||||
|
public class DeletePostDTO {
|
||||||
|
|
||||||
|
int post_id;
|
||||||
|
boolean deleted;
|
||||||
|
String auth;
|
||||||
|
|
||||||
|
public DeletePostDTO(int post_id, boolean deleted, String auth) {
|
||||||
|
this.post_id = post_id;
|
||||||
|
this.deleted = deleted;
|
||||||
|
this.auth = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPost_id() {
|
||||||
|
return post_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDeleted() {
|
||||||
|
return deleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuth() {
|
||||||
|
return auth;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.dto;
|
||||||
|
|
||||||
|
public class EditPostDTO {
|
||||||
|
|
||||||
|
private int post_id;
|
||||||
|
private String name;
|
||||||
|
private String url;
|
||||||
|
private String body;
|
||||||
|
private boolean nsfw;
|
||||||
|
private Integer language_id;
|
||||||
|
private String auth;
|
||||||
|
|
||||||
|
public EditPostDTO(int post_id, String name, String url, String body, boolean nsfw, Integer language_id, String auth) {
|
||||||
|
this.post_id = post_id;
|
||||||
|
this.name = name;
|
||||||
|
this.url = url;
|
||||||
|
this.body = body;
|
||||||
|
this.nsfw = nsfw;
|
||||||
|
this.language_id = language_id;
|
||||||
|
this.auth = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPost_id() {
|
||||||
|
return post_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBody() {
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNsfw() {
|
||||||
|
return nsfw;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getLanguage_id() {
|
||||||
|
return language_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuth() {
|
||||||
|
return auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.dto;
|
||||||
|
|
||||||
|
public class ReadCommentDTO {
|
||||||
|
|
||||||
|
private int comment_reply_id;
|
||||||
|
private boolean read;
|
||||||
|
private String auth;
|
||||||
|
|
||||||
|
public ReadCommentDTO(int comment_reply_id, boolean read, String auth) {
|
||||||
|
this.comment_reply_id = comment_reply_id;
|
||||||
|
this.read = read;
|
||||||
|
this.auth = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getComment_reply_id() {
|
||||||
|
return comment_reply_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRead() {
|
||||||
|
return read;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuth() {
|
||||||
|
return auth;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.dto;
|
||||||
|
|
||||||
|
public class ReadMessageDTO {
|
||||||
|
|
||||||
|
private int person_mention_id;
|
||||||
|
private boolean read;
|
||||||
|
private String auth;
|
||||||
|
|
||||||
|
public ReadMessageDTO(int person_mention_id, boolean read, String auth) {
|
||||||
|
this.person_mention_id = person_mention_id;
|
||||||
|
this.read = read;
|
||||||
|
this.auth = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPerson_mention_id() {
|
||||||
|
return person_mention_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRead() {
|
||||||
|
return read;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuth() {
|
||||||
|
return auth;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.dto;
|
||||||
|
|
||||||
|
public class ReadPostDTO {
|
||||||
|
|
||||||
|
private int post_id;
|
||||||
|
private boolean read;
|
||||||
|
private String auth;
|
||||||
|
|
||||||
|
public ReadPostDTO(int post_id, boolean read, String auth) {
|
||||||
|
this.post_id = post_id;
|
||||||
|
this.read = read;
|
||||||
|
this.auth = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPost_id() {
|
||||||
|
return post_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRead() {
|
||||||
|
return read;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuth() {
|
||||||
|
return auth;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.dto;
|
||||||
|
|
||||||
|
public class SubmitPostDTO {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private int community_id;
|
||||||
|
private String url;
|
||||||
|
private String body;
|
||||||
|
private String honeypot;
|
||||||
|
private boolean nsfw;
|
||||||
|
private Integer language_id;
|
||||||
|
private String auth;
|
||||||
|
|
||||||
|
public SubmitPostDTO(String name, int community_id, String url, String body, String honeypot, boolean nsfw, Integer language_id, String auth) {
|
||||||
|
this.name = name;
|
||||||
|
this.community_id = community_id;
|
||||||
|
this.url = url;
|
||||||
|
this.body = body;
|
||||||
|
this.honeypot = honeypot;
|
||||||
|
this.nsfw = nsfw;
|
||||||
|
this.language_id = language_id;
|
||||||
|
this.auth = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCommunity_id() {
|
||||||
|
return community_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBody() {
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHoneypot() {
|
||||||
|
return honeypot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNsfw() {
|
||||||
|
return nsfw;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getLanguage_id() {
|
||||||
|
return language_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuth() {
|
||||||
|
return auth;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.events;
|
||||||
|
|
||||||
|
public class ChangeUseCircularFabEvent {
|
||||||
|
|
||||||
|
private boolean useCircularFab;
|
||||||
|
|
||||||
|
public ChangeUseCircularFabEvent(boolean useCircularFab) {
|
||||||
|
this.useCircularFab = useCircularFab;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUseCircularFab() {
|
||||||
|
return useCircularFab;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package eu.toldi.infinityforlemmy.events;
|
package eu.toldi.infinityforlemmy.events;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.message.Message;
|
import eu.toldi.infinityforlemmy.message.CommentInteraction;
|
||||||
|
|
||||||
public class PassPrivateMessageEvent {
|
public class PassPrivateMessageEvent {
|
||||||
public Message message;
|
public CommentInteraction message;
|
||||||
|
|
||||||
public PassPrivateMessageEvent(Message message) {
|
public PassPrivateMessageEvent(CommentInteraction message) {
|
||||||
this.message = message;
|
this.message = message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
package eu.toldi.infinityforlemmy.events;
|
package eu.toldi.infinityforlemmy.events;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
|
|
||||||
public class SubmitImagePostEvent {
|
public class SubmitImagePostEvent {
|
||||||
public boolean postSuccess;
|
public boolean postSuccess;
|
||||||
public String errorMessage;
|
public String errorMessage;
|
||||||
|
public Post post;
|
||||||
|
|
||||||
public SubmitImagePostEvent(boolean postSuccess, String errorMessage) {
|
public SubmitImagePostEvent(boolean postSuccess, String errorMessage, Post post) {
|
||||||
this.postSuccess = postSuccess;
|
this.postSuccess = postSuccess;
|
||||||
this.errorMessage = errorMessage;
|
this.errorMessage = errorMessage;
|
||||||
|
this.post = post;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|||||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -82,9 +81,6 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
|
|||||||
@Named("no_oauth")
|
@Named("no_oauth")
|
||||||
RetrofitHolder mRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("oauth")
|
|
||||||
Retrofit mOauthRetrofit;
|
|
||||||
@Inject
|
|
||||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("default")
|
@Named("default")
|
||||||
@@ -253,6 +249,7 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
|
|||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
|
|
||||||
|
|
||||||
new Handler().postDelayed(() -> bindView(resources), 0);
|
new Handler().postDelayed(() -> bindView(resources), 0);
|
||||||
|
|
||||||
return rootView;
|
return rootView;
|
||||||
@@ -263,7 +260,7 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
|
|||||||
mLinearLayoutManager = new LinearLayoutManagerBugFixed(mActivity);
|
mLinearLayoutManager = new LinearLayoutManagerBugFixed(mActivity);
|
||||||
mCommentRecyclerView.setLayoutManager(mLinearLayoutManager);
|
mCommentRecyclerView.setLayoutManager(mLinearLayoutManager);
|
||||||
|
|
||||||
mAdapter = new CommentsListingRecyclerViewAdapter(mActivity, mOauthRetrofit, customThemeWrapper,
|
mAdapter = new CommentsListingRecyclerViewAdapter(mActivity, mRetrofit.getRetrofit(), customThemeWrapper,
|
||||||
getResources().getConfiguration().locale, mSharedPreferences,
|
getResources().getConfiguration().locale, mSharedPreferences,
|
||||||
getArguments().getString(EXTRA_ACCESS_TOKEN), getArguments().getString(EXTRA_ACCOUNT_NAME),
|
getArguments().getString(EXTRA_ACCESS_TOKEN), getArguments().getString(EXTRA_ACCOUNT_NAME),
|
||||||
() -> mCommentViewModel.retryLoadingMore());
|
() -> mCommentViewModel.retryLoadingMore());
|
||||||
@@ -294,15 +291,11 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
|
|||||||
|
|
||||||
CommentViewModel.Factory factory;
|
CommentViewModel.Factory factory;
|
||||||
|
|
||||||
if (mAccessToken == null) {
|
|
||||||
factory = new CommentViewModel.Factory(mRetrofit.getRetrofit(),
|
factory = new CommentViewModel.Factory(mRetrofit.getRetrofit(),
|
||||||
resources.getConfiguration().locale, null, username, sortType,
|
|
||||||
getArguments().getBoolean(EXTRA_ARE_SAVED_COMMENTS));
|
|
||||||
} else {
|
|
||||||
factory = new CommentViewModel.Factory(mOauthRetrofit,
|
|
||||||
resources.getConfiguration().locale, mAccessToken, username, sortType,
|
resources.getConfiguration().locale, mAccessToken, username, sortType,
|
||||||
getArguments().getBoolean(EXTRA_ARE_SAVED_COMMENTS));
|
getArguments().getBoolean(EXTRA_ARE_SAVED_COMMENTS));
|
||||||
}
|
|
||||||
|
|
||||||
mCommentViewModel = new ViewModelProvider(this, factory).get(CommentViewModel.class);
|
mCommentViewModel = new ViewModelProvider(this, factory).get(CommentViewModel.class);
|
||||||
mCommentViewModel.getComments().observe(getViewLifecycleOwner(), comments -> mAdapter.submitList(comments));
|
mCommentViewModel.getComments().observe(getViewLifecycleOwner(), comments -> mAdapter.submitList(comments));
|
||||||
|
|||||||
@@ -380,7 +380,7 @@ public class HistoryPostFragment extends Fragment implements FragmentCommunicato
|
|||||||
if (historyType == HISTORY_TYPE_READ_POSTS) {
|
if (historyType == HISTORY_TYPE_READ_POSTS) {
|
||||||
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.HISTORY_POST_LAYOUT_READ_POST, defaultPostLayout);
|
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.HISTORY_POST_LAYOUT_READ_POST, defaultPostLayout);
|
||||||
|
|
||||||
mAdapter = new HistoryPostRecyclerViewAdapter(activity, this, mExecutor, mOauthRetrofit, mGfycatRetrofit,
|
mAdapter = new HistoryPostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit.getRetrofit(), mGfycatRetrofit,
|
||||||
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
|
mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
|
||||||
accessToken, accountName, postType, postLayout, true,
|
accessToken, accountName, postType, postLayout, true,
|
||||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences,
|
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences,
|
||||||
|
|||||||
@@ -35,15 +35,15 @@ import eu.toldi.infinityforlemmy.NetworkState;
|
|||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RecyclerViewContentScrollingInterface;
|
import eu.toldi.infinityforlemmy.RecyclerViewContentScrollingInterface;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||||
import eu.toldi.infinityforlemmy.adapters.MessageRecyclerViewAdapter;
|
import eu.toldi.infinityforlemmy.adapters.MessageRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
import eu.toldi.infinityforlemmy.events.RepliedToPrivateMessageEvent;
|
import eu.toldi.infinityforlemmy.events.RepliedToPrivateMessageEvent;
|
||||||
|
import eu.toldi.infinityforlemmy.message.CommentInteraction;
|
||||||
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
||||||
import eu.toldi.infinityforlemmy.message.Message;
|
|
||||||
import eu.toldi.infinityforlemmy.message.MessageViewModel;
|
import eu.toldi.infinityforlemmy.message.MessageViewModel;
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class InboxFragment extends Fragment implements FragmentCommunicator {
|
public class InboxFragment extends Fragment implements FragmentCommunicator {
|
||||||
|
|
||||||
@@ -61,8 +61,8 @@ public class InboxFragment extends Fragment implements FragmentCommunicator {
|
|||||||
TextView mFetchMessageInfoTextView;
|
TextView mFetchMessageInfoTextView;
|
||||||
MessageViewModel mMessageViewModel;
|
MessageViewModel mMessageViewModel;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("oauth")
|
@Named("no_oauth")
|
||||||
Retrofit mOauthRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
@Inject
|
@Inject
|
||||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -106,7 +106,7 @@ public class InboxFragment extends Fragment implements FragmentCommunicator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mWhere = arguments.getString(EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_INBOX);
|
mWhere = arguments.getString(EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_INBOX);
|
||||||
mAdapter = new MessageRecyclerViewAdapter(mActivity, mOauthRetrofit, mCustomThemeWrapper,
|
mAdapter = new MessageRecyclerViewAdapter(mActivity, mRetrofit.getRetrofit(), mCustomThemeWrapper,
|
||||||
mAccessToken, mWhere, () -> mMessageViewModel.retryLoadingMore());
|
mAccessToken, mWhere, () -> mMessageViewModel.retryLoadingMore());
|
||||||
mLinearLayoutManager = new LinearLayoutManagerBugFixed(mActivity);
|
mLinearLayoutManager = new LinearLayoutManagerBugFixed(mActivity);
|
||||||
mRecyclerView.setLayoutManager(mLinearLayoutManager);
|
mRecyclerView.setLayoutManager(mLinearLayoutManager);
|
||||||
@@ -127,7 +127,7 @@ public class InboxFragment extends Fragment implements FragmentCommunicator {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageViewModel.Factory factory = new MessageViewModel.Factory(mOauthRetrofit,
|
MessageViewModel.Factory factory = new MessageViewModel.Factory(mRetrofit.getRetrofit(),
|
||||||
getResources().getConfiguration().locale, mAccessToken, mWhere);
|
getResources().getConfiguration().locale, mAccessToken, mWhere);
|
||||||
mMessageViewModel = new ViewModelProvider(this, factory).get(MessageViewModel.class);
|
mMessageViewModel = new ViewModelProvider(this, factory).get(MessageViewModel.class);
|
||||||
mMessageViewModel.getMessages().observe(getViewLifecycleOwner(), messages -> mAdapter.submitList(messages));
|
mMessageViewModel.getMessages().observe(getViewLifecycleOwner(), messages -> mAdapter.submitList(messages));
|
||||||
@@ -216,11 +216,11 @@ public class InboxFragment extends Fragment implements FragmentCommunicator {
|
|||||||
mAdapter.setNetworkState(null);
|
mAdapter.setNetworkState(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Message getMessageByIndex(int index) {
|
public CommentInteraction getMessageByIndex(int index) {
|
||||||
if (mMessageViewModel == null || index < 0) {
|
if (mMessageViewModel == null || index < 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
PagedList<Message> messages = mMessageViewModel.getMessages().getValue();
|
PagedList<CommentInteraction> messages = mMessageViewModel.getMessages().getValue();
|
||||||
if (messages == null) {
|
if (messages == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -245,8 +245,8 @@ public class InboxFragment extends Fragment implements FragmentCommunicator {
|
|||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onRepliedToPrivateMessageEvent(RepliedToPrivateMessageEvent repliedToPrivateMessageEvent) {
|
public void onRepliedToPrivateMessageEvent(RepliedToPrivateMessageEvent repliedToPrivateMessageEvent) {
|
||||||
if (mAdapter != null && mWhere.equals(FetchMessage.WHERE_MESSAGES)) {
|
/* if (mAdapter != null && mWhere.equals(FetchMessage.WHERE_MESSAGES)) {
|
||||||
mAdapter.updateMessageReply(repliedToPrivateMessageEvent.newReply, repliedToPrivateMessageEvent.messagePosition);
|
mAdapter.updateMessageReply(repliedToPrivateMessageEvent.newReply, repliedToPrivateMessageEvent.messagePosition);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -398,8 +398,6 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
mSwipeRefreshLayout.setEnabled(mSharedPreferences.getBoolean(SharedPreferencesUtils.PULL_TO_REFRESH, true));
|
|
||||||
mSwipeRefreshLayout.setOnRefreshListener(this::refresh);
|
|
||||||
|
|
||||||
int recyclerViewPosition = 0;
|
int recyclerViewPosition = 0;
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
@@ -437,6 +435,9 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
|
|
||||||
postType = getArguments().getInt(EXTRA_POST_TYPE);
|
postType = getArguments().getInt(EXTRA_POST_TYPE);
|
||||||
|
|
||||||
|
mSwipeRefreshLayout.setEnabled(mSharedPreferences.getBoolean(SharedPreferencesUtils.PULL_TO_REFRESH, true) && postType != PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE);
|
||||||
|
mSwipeRefreshLayout.setOnRefreshListener(this::refresh);
|
||||||
|
|
||||||
accessToken = getArguments().getString(EXTRA_ACCESS_TOKEN);
|
accessToken = getArguments().getString(EXTRA_ACCESS_TOKEN);
|
||||||
accountName = getArguments().getString(EXTRA_ACCOUNT_NAME);
|
accountName = getArguments().getString(EXTRA_ACCOUNT_NAME);
|
||||||
int defaultPostLayout = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.DEFAULT_POST_LAYOUT_KEY, "0"));
|
int defaultPostLayout = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.DEFAULT_POST_LAYOUT_KEY, "0"));
|
||||||
@@ -459,9 +460,9 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
nameOfUsage = PostFilterUsage.NO_USAGE;
|
nameOfUsage = PostFilterUsage.NO_USAGE;
|
||||||
|
|
||||||
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_SEARCH_POST, SortType.Type.TOP_ALL.value);
|
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_SEARCH_POST, SortType.Type.TOP_ALL.value);
|
||||||
String sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_SEARCH_POST, SortType.Time.ALL.name());
|
String sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_SEARCH_POST, sort.equalsIgnoreCase(SortType.Type.TOP.value) ? SortType.Time.ALL.name() : null);
|
||||||
SortType.Type st = SortType.Type.fromValue(sort);
|
SortType.Type st = SortType.Type.fromValue(sort);
|
||||||
sortType = new SortType(st == null ? SortType.Type.TOP_ALL : st, SortType.Time.valueOf(sortTime));
|
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);
|
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.getRetrofit(), mGfycatRetrofit,
|
||||||
@@ -725,6 +726,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (postType == PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE) {
|
} else if (postType == PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE) {
|
||||||
|
subredditName = getArguments().getString(EXTRA_NAME);
|
||||||
usage = PostFilterUsage.HOME_TYPE;
|
usage = PostFilterUsage.HOME_TYPE;
|
||||||
nameOfUsage = PostFilterUsage.NO_USAGE;
|
nameOfUsage = PostFilterUsage.NO_USAGE;
|
||||||
subredditName = getArguments().getString(EXTRA_NAME);
|
subredditName = getArguments().getString(EXTRA_NAME);
|
||||||
@@ -971,11 +973,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
this.postFilter = postFilter;
|
this.postFilter = postFilter;
|
||||||
postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean(SharedPreferencesUtils.NSFW_BASE, false);
|
postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean(SharedPreferencesUtils.NSFW_BASE, false);
|
||||||
this.concatenatedSubredditNames = concatenatedSubredditNames;
|
this.concatenatedSubredditNames = concatenatedSubredditNames;
|
||||||
if (concatenatedSubredditNames == null) {
|
showErrorView(R.string.anonymous_homepage_not_implemented);
|
||||||
showErrorView(R.string.anonymous_front_page_no_subscriptions);
|
|
||||||
} else {
|
|
||||||
initializeAndBindPostViewModelForAnonymous(concatenatedSubredditNames);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -1017,11 +1015,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
if (activity != null && !activity.isFinishing() && !activity.isDestroyed() && !isDetached()) {
|
if (activity != null && !activity.isFinishing() && !activity.isDestroyed() && !isDetached()) {
|
||||||
postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean(SharedPreferencesUtils.NSFW_BASE, false);
|
postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean(SharedPreferencesUtils.NSFW_BASE, false);
|
||||||
this.concatenatedSubredditNames = concatenatedSubredditNames;
|
this.concatenatedSubredditNames = concatenatedSubredditNames;
|
||||||
if (concatenatedSubredditNames == null) {
|
showErrorView(R.string.anonymous_homepage_not_implemented);
|
||||||
showErrorView(R.string.anonymous_front_page_no_subscriptions);
|
|
||||||
} else {
|
|
||||||
initializeAndBindPostViewModelForAnonymous(concatenatedSubredditNames);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -1209,33 +1203,33 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
private void initializeAndBindPostViewModel(String accessToken) {
|
private void initializeAndBindPostViewModel(String accessToken) {
|
||||||
if (postType == PostPagingSource.TYPE_SEARCH) {
|
if (postType == PostPagingSource.TYPE_SEARCH) {
|
||||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||||
mRetrofit.getRetrofit() , accessToken,
|
mRetrofit, accessToken,
|
||||||
accountName, mSharedPreferences,
|
accountName, mSharedPreferences,
|
||||||
mPostFeedScrolledPositionSharedPreferences, mPostHistorySharedPreferences, subredditName,
|
mPostFeedScrolledPositionSharedPreferences, mPostHistorySharedPreferences, subredditName,
|
||||||
query, trendingSource, postType, sortType, postFilter, readPosts)).get(PostViewModel.class);
|
query, trendingSource, postType, sortType, postFilter, readPosts)).get(PostViewModel.class);
|
||||||
} else if (postType == PostPagingSource.TYPE_SUBREDDIT) {
|
} else if (postType == PostPagingSource.TYPE_SUBREDDIT) {
|
||||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||||
mRetrofit.getRetrofit() , accessToken,
|
mRetrofit, accessToken,
|
||||||
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
||||||
mPostHistorySharedPreferences, subredditName, postType, sortType, postFilter, readPosts))
|
mPostHistorySharedPreferences, subredditName, postType, sortType, postFilter, readPosts))
|
||||||
.get(PostViewModel.class);
|
.get(PostViewModel.class);
|
||||||
} else if (postType == PostPagingSource.TYPE_MULTI_REDDIT) {
|
} else if (postType == PostPagingSource.TYPE_MULTI_REDDIT) {
|
||||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||||
mRetrofit.getRetrofit(), accessToken,
|
mRetrofit, accessToken,
|
||||||
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
||||||
mPostHistorySharedPreferences, multiRedditPath, postType, sortType, postFilter, readPosts))
|
mPostHistorySharedPreferences, multiRedditPath, postType, sortType, postFilter, readPosts))
|
||||||
.get(PostViewModel.class);
|
.get(PostViewModel.class);
|
||||||
} else if (postType == PostPagingSource.TYPE_USER) {
|
} else if (postType == PostPagingSource.TYPE_USER) {
|
||||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||||
mRetrofit.getRetrofit(), accessToken,
|
mRetrofit, accessToken,
|
||||||
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
||||||
mPostHistorySharedPreferences, username, postType, sortType, postFilter, where, readPosts))
|
mPostHistorySharedPreferences, username, postType, sortType, postFilter, where, readPosts))
|
||||||
.get(PostViewModel.class);
|
.get(PostViewModel.class);
|
||||||
} else {
|
} else {
|
||||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||||
mRetrofit.getRetrofit(), accessToken,
|
mRetrofit, accessToken,
|
||||||
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
accountName, mSharedPreferences, mPostFeedScrolledPositionSharedPreferences,
|
||||||
mPostHistorySharedPreferences, postType, sortType, postFilter, readPosts,subredditName)).get(PostViewModel.class);
|
mPostHistorySharedPreferences, postType, sortType, postFilter, readPosts, subredditName)).get(PostViewModel.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
bindPostViewModel();
|
bindPostViewModel();
|
||||||
@@ -1245,28 +1239,28 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
//For anonymous user
|
//For anonymous user
|
||||||
if (postType == PostPagingSource.TYPE_SEARCH) {
|
if (postType == PostPagingSource.TYPE_SEARCH) {
|
||||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||||
mRetrofit.getRetrofit(), null, accountName, mSharedPreferences,
|
mRetrofit, null, accountName, mSharedPreferences,
|
||||||
mPostFeedScrolledPositionSharedPreferences, null, subredditName, query, trendingSource,
|
mPostFeedScrolledPositionSharedPreferences, null, subredditName, query, trendingSource,
|
||||||
postType, sortType, postFilter, readPosts)).get(PostViewModel.class);
|
postType, sortType, postFilter, readPosts)).get(PostViewModel.class);
|
||||||
} else if (postType == PostPagingSource.TYPE_SUBREDDIT) {
|
} else if (postType == PostPagingSource.TYPE_SUBREDDIT) {
|
||||||
mPostViewModel = new ViewModelProvider(this, new PostViewModel.Factory(mExecutor,
|
mPostViewModel = new ViewModelProvider(this, new PostViewModel.Factory(mExecutor,
|
||||||
mRetrofit.getRetrofit(), null, accountName, mSharedPreferences,
|
mRetrofit, null, accountName, mSharedPreferences,
|
||||||
mPostFeedScrolledPositionSharedPreferences, null, subredditName, postType, sortType,
|
mPostFeedScrolledPositionSharedPreferences, null, subredditName, postType, sortType,
|
||||||
postFilter, readPosts)).get(PostViewModel.class);
|
postFilter, readPosts)).get(PostViewModel.class);
|
||||||
} else if (postType == PostPagingSource.TYPE_MULTI_REDDIT) {
|
} else if (postType == PostPagingSource.TYPE_MULTI_REDDIT) {
|
||||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||||
mRetrofit.getRetrofit(), null, accountName, mSharedPreferences,
|
mRetrofit, null, accountName, mSharedPreferences,
|
||||||
mPostFeedScrolledPositionSharedPreferences, null, multiRedditPath,
|
mPostFeedScrolledPositionSharedPreferences, null, multiRedditPath,
|
||||||
postType, sortType, postFilter, readPosts)).get(PostViewModel.class);
|
postType, sortType, postFilter, readPosts)).get(PostViewModel.class);
|
||||||
} else if (postType == PostPagingSource.TYPE_USER) {
|
} else if (postType == PostPagingSource.TYPE_USER) {
|
||||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||||
mRetrofit.getRetrofit(), null, accountName, mSharedPreferences,
|
mRetrofit, null, accountName, mSharedPreferences,
|
||||||
mPostFeedScrolledPositionSharedPreferences, null, username, postType, sortType, postFilter,
|
mPostFeedScrolledPositionSharedPreferences, null, username, postType, sortType, postFilter,
|
||||||
where, readPosts)).get(PostViewModel.class);
|
where, readPosts)).get(PostViewModel.class);
|
||||||
} else {
|
} else {
|
||||||
//Anonymous Front Page
|
//Anonymous Front Page
|
||||||
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
mPostViewModel = new ViewModelProvider(PostFragment.this, new PostViewModel.Factory(mExecutor,
|
||||||
mRetrofit.getRetrofit(), mSharedPreferences, concatenatedSubredditNames, postType, sortType, postFilter,subredditName))
|
mRetrofit, mSharedPreferences, concatenatedSubredditNames, postType, sortType, postFilter, subredditName))
|
||||||
.get(PostViewModel.class);
|
.get(PostViewModel.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1357,7 +1351,12 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mFetchPostInfoLinearLayout.setOnClickListener(null);
|
mFetchPostInfoLinearLayout.setOnClickListener(null);
|
||||||
|
if (accessToken != null) {
|
||||||
showErrorView(R.string.no_posts);
|
showErrorView(R.string.no_posts);
|
||||||
|
} else {
|
||||||
|
showErrorView(R.string.anonymous_homepage_not_implemented);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeSortType(SortType sortType) {
|
public void changeSortType(SortType sortType) {
|
||||||
@@ -1386,6 +1385,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_SEARCH_POST, sortType.getType().name()).apply();
|
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TYPE_SEARCH_POST, sortType.getType().name()).apply();
|
||||||
if (sortType.getTime() != null) {
|
if (sortType.getTime() != null) {
|
||||||
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TIME_SEARCH_POST, sortType.getTime().name()).apply();
|
mSortTypeSharedPreferences.edit().putString(SharedPreferencesUtils.SORT_TIME_SEARCH_POST, sortType.getTime().name()).apply();
|
||||||
|
}else {
|
||||||
|
mSortTypeSharedPreferences.edit().remove(SharedPreferencesUtils.SORT_TIME_SEARCH_POST).apply();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_MULTI_REDDIT:
|
case PostPagingSource.TYPE_MULTI_REDDIT:
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|||||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditListingViewModel;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditListingViewModel;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
|
|
||||||
@@ -149,13 +150,13 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void subredditSelected(String subredditName, String communityFullName, String iconUrl) {
|
public void subredditSelected(SubredditData communityData) {
|
||||||
if (isGettingSubredditInfo) {
|
if (isGettingSubredditInfo) {
|
||||||
((SearchSubredditsResultActivity) mActivity).getSelectedSubreddit(subredditName, iconUrl);
|
((SearchSubredditsResultActivity) mActivity).getSelectedSubreddit(communityData);
|
||||||
} else {
|
} else {
|
||||||
Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
||||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, subredditName);
|
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, communityData.getName());
|
||||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityFullName);
|
intent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, LemmyUtils.actorID2FullName(communityData.getActorId()));
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ public class SubscribedSubredditsListingFragment extends Fragment implements Fra
|
|||||||
if (getArguments().getBoolean(EXTRA_IS_SUBREDDIT_SELECTION)) {
|
if (getArguments().getBoolean(EXTRA_IS_SUBREDDIT_SELECTION)) {
|
||||||
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRedditDataRoomDatabase,
|
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRedditDataRoomDatabase,
|
||||||
mCustomThemeWrapper, accessToken, getArguments().getBoolean(EXTRA_EXTRA_CLEAR_SELECTION),
|
mCustomThemeWrapper, accessToken, getArguments().getBoolean(EXTRA_EXTRA_CLEAR_SELECTION),
|
||||||
(name, iconUrl, subredditIsUser) -> ((SubredditSelectionActivity) mActivity).getSelectedSubreddit(name, iconUrl, subredditIsUser));
|
(communityData) -> ((SubredditSelectionActivity) mActivity).getSelectedSubreddit(communityData));
|
||||||
} else {
|
} else {
|
||||||
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRedditDataRoomDatabase,
|
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRedditDataRoomDatabase,
|
||||||
mCustomThemeWrapper, accessToken);
|
mCustomThemeWrapper, accessToken);
|
||||||
|
|||||||
@@ -86,7 +86,6 @@ import eu.toldi.infinityforlemmy.activities.ViewPostDetailActivity;
|
|||||||
import eu.toldi.infinityforlemmy.adapters.CommentsRecyclerViewAdapter;
|
import eu.toldi.infinityforlemmy.adapters.CommentsRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.adapters.PostDetailRecyclerViewAdapter;
|
import eu.toldi.infinityforlemmy.adapters.PostDetailRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
|
||||||
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
|
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.LoadUserData;
|
import eu.toldi.infinityforlemmy.asynctasks.LoadUserData;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
||||||
@@ -95,10 +94,10 @@ import eu.toldi.infinityforlemmy.comment.Comment;
|
|||||||
import eu.toldi.infinityforlemmy.comment.FetchComment;
|
import eu.toldi.infinityforlemmy.comment.FetchComment;
|
||||||
import eu.toldi.infinityforlemmy.comment.FetchRemovedComment;
|
import eu.toldi.infinityforlemmy.comment.FetchRemovedComment;
|
||||||
import eu.toldi.infinityforlemmy.comment.FetchRemovedCommentReveddit;
|
import eu.toldi.infinityforlemmy.comment.FetchRemovedCommentReveddit;
|
||||||
import eu.toldi.infinityforlemmy.comment.ParseComment;
|
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.CustomToroContainer;
|
import eu.toldi.infinityforlemmy.customviews.CustomToroContainer;
|
||||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.EditPostDTO;
|
||||||
import eu.toldi.infinityforlemmy.events.ChangeNSFWBlurEvent;
|
import eu.toldi.infinityforlemmy.events.ChangeNSFWBlurEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.ChangeNetworkStatusEvent;
|
import eu.toldi.infinityforlemmy.events.ChangeNetworkStatusEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.ChangeSpoilerBlurEvent;
|
import eu.toldi.infinityforlemmy.events.ChangeSpoilerBlurEvent;
|
||||||
@@ -109,7 +108,7 @@ import eu.toldi.infinityforlemmy.message.ReadMessage;
|
|||||||
import eu.toldi.infinityforlemmy.post.FetchPost;
|
import eu.toldi.infinityforlemmy.post.FetchPost;
|
||||||
import eu.toldi.infinityforlemmy.post.FetchRemovedPost;
|
import eu.toldi.infinityforlemmy.post.FetchRemovedPost;
|
||||||
import eu.toldi.infinityforlemmy.post.HidePost;
|
import eu.toldi.infinityforlemmy.post.HidePost;
|
||||||
import eu.toldi.infinityforlemmy.post.ParsePost;
|
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||||
@@ -157,9 +156,6 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
@Named("reveddit")
|
@Named("reveddit")
|
||||||
Retrofit revedditRetrofit;
|
Retrofit revedditRetrofit;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("oauth")
|
|
||||||
Retrofit mOauthRetrofit;
|
|
||||||
@Inject
|
|
||||||
@Named("gfycat")
|
@Named("gfycat")
|
||||||
Retrofit mGfycatRetrofit;
|
Retrofit mGfycatRetrofit;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -193,6 +189,8 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
ExoCreator mExoCreator;
|
ExoCreator mExoCreator;
|
||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
|
@Inject
|
||||||
|
MarkPostAsRead markPostAsRead;
|
||||||
@State
|
@State
|
||||||
Post mPost;
|
Post mPost;
|
||||||
@State
|
@State
|
||||||
@@ -215,7 +213,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
@State
|
@State
|
||||||
boolean isFetchingComments = false;
|
boolean isFetchingComments = false;
|
||||||
@State
|
@State
|
||||||
String mMessageFullname;
|
int mMessageFullname;
|
||||||
@State
|
@State
|
||||||
SortType.Type sortType;
|
SortType.Type sortType;
|
||||||
@State
|
@State
|
||||||
@@ -228,6 +226,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
private Menu mMenu;
|
private Menu mMenu;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
|
private String mAccountQualifiedName;
|
||||||
private int postListPosition = -1;
|
private int postListPosition = -1;
|
||||||
private Integer mSingleCommentId;
|
private Integer mSingleCommentId;
|
||||||
private String mContextNumber;
|
private String mContextNumber;
|
||||||
@@ -280,6 +279,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
|
|
||||||
mSavedIcon = getMenuItemIcon(R.drawable.ic_bookmark_toolbar_24dp);
|
mSavedIcon = getMenuItemIcon(R.drawable.ic_bookmark_toolbar_24dp);
|
||||||
mUnsavedIcon = getMenuItemIcon(R.drawable.ic_bookmark_border_toolbar_24dp);
|
mUnsavedIcon = getMenuItemIcon(R.drawable.ic_bookmark_border_toolbar_24dp);
|
||||||
@@ -310,7 +310,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
mLockFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_JUMP_TO_NEXT_TOP_LEVEL_COMMENT_BUTTON, false);
|
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);
|
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);
|
mExpandChildren = !mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_TOP_LEVEL_COMMENTS_FIRST, false);
|
||||||
mMarkPostsAsRead = mPostHistorySharedPreferences.getBoolean(mAccountName + SharedPreferencesUtils.MARK_POSTS_AS_READ_BASE, false);
|
mMarkPostsAsRead = mPostHistorySharedPreferences.getBoolean(mAccountQualifiedName + SharedPreferencesUtils.MARK_POSTS_AS_READ_BASE, false);
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
mRespectSubredditRecommendedSortType = mSharedPreferences.getBoolean(SharedPreferencesUtils.RESPECT_SUBREDDIT_RECOMMENDED_COMMENT_SORT_TYPE, false);
|
mRespectSubredditRecommendedSortType = mSharedPreferences.getBoolean(SharedPreferencesUtils.RESPECT_SUBREDDIT_RECOMMENDED_COMMENT_SORT_TYPE, false);
|
||||||
viewPostDetailFragmentId = System.currentTimeMillis();
|
viewPostDetailFragmentId = System.currentTimeMillis();
|
||||||
@@ -546,14 +546,14 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
mSingleCommentId = (getArguments().getString(EXTRA_SINGLE_COMMENT_ID) == null) ? null : Integer.valueOf(getArguments().getString(EXTRA_SINGLE_COMMENT_ID));
|
mSingleCommentId = getArguments().getInt(EXTRA_SINGLE_COMMENT_ID, 0);
|
||||||
mContextNumber = getArguments().getString(EXTRA_CONTEXT_NUMBER, "8");
|
mContextNumber = getArguments().getString(EXTRA_CONTEXT_NUMBER, "8");
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
if (mSingleCommentId != null) {
|
if (mSingleCommentId != 0) {
|
||||||
isSingleCommentThreadMode = true;
|
isSingleCommentThreadMode = true;
|
||||||
}
|
}
|
||||||
mMessageFullname = getArguments().getString(EXTRA_MESSAGE_FULLNAME);
|
mMessageFullname = getArguments().getInt(EXTRA_MESSAGE_FULLNAME);
|
||||||
|
|
||||||
if (!mRespectSubredditRecommendedSortType || isSingleCommentThreadMode) {
|
if (!mRespectSubredditRecommendedSortType || isSingleCommentThreadMode) {
|
||||||
sortType = loadSortType();
|
sortType = loadSortType();
|
||||||
@@ -575,11 +575,11 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void bindView() {
|
private void bindView() {
|
||||||
if (mAccessToken != null && mMessageFullname != null) {
|
if (mAccessToken != null && mMessageFullname != 0) {
|
||||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
|
ReadMessage.readMessage(mRetrofit.getRetrofit(), mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
|
||||||
@Override
|
@Override
|
||||||
public void readSuccess() {
|
public void readSuccess() {
|
||||||
mMessageFullname = null;
|
mMessageFullname = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -594,18 +594,18 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mPost == null) {
|
if (mPost == null) {
|
||||||
fetchPostAndCommentsById(getArguments().getString(EXTRA_POST_ID));
|
fetchPostAndCommentsById(getArguments().getInt(EXTRA_POST_ID));
|
||||||
} else {
|
} else {
|
||||||
setupMenu();
|
setupMenu();
|
||||||
|
|
||||||
mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
|
mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
|
||||||
this, mExecutor, mCustomThemeWrapper, mRetrofit.getRetrofit(), mOauthRetrofit, mGfycatRetrofit,
|
this, mExecutor, mCustomThemeWrapper, mRetrofit.getRetrofit(), mGfycatRetrofit,
|
||||||
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mGlide,
|
mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mGlide,
|
||||||
mSeparatePostAndComments, mAccessToken, mAccountName, mPost, mLocale,
|
mSeparatePostAndComments, mAccessToken, mAccountName, mPost, mLocale,
|
||||||
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostDetailsSharedPreferences,
|
mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostDetailsSharedPreferences,
|
||||||
mExoCreator, post -> EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)));
|
mExoCreator, post -> EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)));
|
||||||
mCommentsAdapter = new CommentsRecyclerViewAdapter(activity,
|
mCommentsAdapter = new CommentsRecyclerViewAdapter(activity,
|
||||||
this, mCustomThemeWrapper, mExecutor, mRetrofit.getRetrofit(), mOauthRetrofit,
|
this, mCustomThemeWrapper, mExecutor, mRetrofit.getRetrofit(),
|
||||||
mAccessToken, mAccountName, mPost, mLocale, mSingleCommentId,
|
mAccessToken, mAccountName, mPost, mLocale, mSingleCommentId,
|
||||||
isSingleCommentThreadMode, mSharedPreferences,
|
isSingleCommentThreadMode, mSharedPreferences,
|
||||||
new CommentsRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
|
new CommentsRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
|
||||||
@@ -689,10 +689,8 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
hideItem.setVisible(false);
|
hideItem.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mPost.getAuthor().equals(mAccountName)) {
|
if (mPost.getAuthorNamePrefixed().equals(mAccountQualifiedName)) {
|
||||||
if (mPost.getPostType() == Post.TEXT_TYPE) {
|
|
||||||
mMenu.findItem(R.id.action_edit_view_post_detail_fragment).setVisible(true);
|
mMenu.findItem(R.id.action_edit_view_post_detail_fragment).setVisible(true);
|
||||||
}
|
|
||||||
mMenu.findItem(R.id.action_delete_view_post_detail_fragment).setVisible(true);
|
mMenu.findItem(R.id.action_delete_view_post_detail_fragment).setVisible(true);
|
||||||
|
|
||||||
MenuItem nsfwItem = mMenu.findItem(R.id.action_nsfw_view_post_detail_fragment);
|
MenuItem nsfwItem = mMenu.findItem(R.id.action_nsfw_view_post_detail_fragment);
|
||||||
@@ -776,29 +774,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void changeFlair(Flair flair) {
|
public void changeFlair(Flair flair) {
|
||||||
Map<String, String> params = new HashMap<>();
|
|
||||||
params.put(APIUtils.API_TYPE_KEY, APIUtils.API_TYPE_JSON);
|
|
||||||
params.put(APIUtils.FLAIR_TEMPLATE_ID_KEY, flair.getId());
|
|
||||||
params.put(APIUtils.LINK_KEY, mPost.getFullName());
|
|
||||||
params.put(APIUtils.TEXT_KEY, flair.getText());
|
|
||||||
|
|
||||||
mOauthRetrofit.create(RedditAPI.class).selectFlair(mPost.getSubredditNamePrefixed(),
|
|
||||||
APIUtils.getOAuthHeader(mAccessToken), params).enqueue(new Callback<String>() {
|
|
||||||
@Override
|
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
|
||||||
if (response.isSuccessful()) {
|
|
||||||
refresh(true, false);
|
|
||||||
showMessage(R.string.update_flair_success);
|
|
||||||
} else {
|
|
||||||
showMessage(R.string.update_flair_failed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
|
||||||
showMessage(R.string.update_flair_failed);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeSortType(SortType sortType) {
|
public void changeSortType(SortType sortType) {
|
||||||
@@ -952,7 +928,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
SavePost savePost = new SavePost();
|
SavePost savePost = new SavePost();
|
||||||
if (mPost.isSaved()) {
|
if (mPost.isSaved()) {
|
||||||
item.setIcon(mUnsavedIcon);
|
item.setIcon(mUnsavedIcon);
|
||||||
savePost.unsaveThing(mOauthRetrofit, mAccessToken, mPost.getId(),
|
savePost.unsaveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
@@ -976,7 +952,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
item.setIcon(mSavedIcon);
|
item.setIcon(mSavedIcon);
|
||||||
savePost.saveThing(mOauthRetrofit, mAccessToken, mPost.getId(),
|
savePost.saveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
|
||||||
new SaveThing.SaveThingListener() {
|
new SaveThing.SaveThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
@@ -1017,7 +993,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
if (mPost.isHidden()) {
|
if (mPost.isHidden()) {
|
||||||
Utils.setTitleWithCustomFontToMenuItem(activity.typeface, item, getString(R.string.action_hide_post));
|
Utils.setTitleWithCustomFontToMenuItem(activity.typeface, item, getString(R.string.action_hide_post));
|
||||||
|
|
||||||
HidePost.unhidePost(mOauthRetrofit, mAccessToken, mPost.getFullName(), new HidePost.HidePostListener() {
|
HidePost.unhidePost(mRetrofit.getRetrofit(), mAccessToken, mPost.getFullName(), new HidePost.HidePostListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
mPost.setHidden(false);
|
mPost.setHidden(false);
|
||||||
@@ -1037,7 +1013,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
} else {
|
} else {
|
||||||
Utils.setTitleWithCustomFontToMenuItem(activity.typeface, item, getString(R.string.action_unhide_post));
|
Utils.setTitleWithCustomFontToMenuItem(activity.typeface, item, getString(R.string.action_unhide_post));
|
||||||
|
|
||||||
HidePost.hidePost(mOauthRetrofit, mAccessToken, mPost.getFullName(), new HidePost.HidePostListener() {
|
HidePost.hidePost(mRetrofit.getRetrofit(), mAccessToken, mPost.getFullName(), new HidePost.HidePostListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
mPost.setHidden(true);
|
mPost.setHidden(true);
|
||||||
@@ -1059,9 +1035,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.id.action_edit_view_post_detail_fragment) {
|
} else if (itemId == R.id.action_edit_view_post_detail_fragment) {
|
||||||
Intent editPostIntent = new Intent(activity, EditPostActivity.class);
|
Intent editPostIntent = new Intent(activity, EditPostActivity.class);
|
||||||
editPostIntent.putExtra(EditPostActivity.EXTRA_FULLNAME, mPost.getFullName());
|
editPostIntent.putExtra(EditPostActivity.EXTRA_DATA, mPost);
|
||||||
editPostIntent.putExtra(EditPostActivity.EXTRA_TITLE, mPost.getTitle());
|
|
||||||
editPostIntent.putExtra(EditPostActivity.EXTRA_CONTENT, mPost.getSelfText());
|
|
||||||
startActivityForResult(editPostIntent, EDIT_POST_REQUEST_CODE);
|
startActivityForResult(editPostIntent, EDIT_POST_REQUEST_CODE);
|
||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.id.action_delete_view_post_detail_fragment) {
|
} else if (itemId == R.id.action_delete_view_post_detail_fragment) {
|
||||||
@@ -1069,7 +1043,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
.setTitle(R.string.delete_this_post)
|
.setTitle(R.string.delete_this_post)
|
||||||
.setMessage(R.string.are_you_sure)
|
.setMessage(R.string.are_you_sure)
|
||||||
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
||||||
-> DeleteThing.delete(mOauthRetrofit, mPost.getFullName(), mAccessToken, new DeleteThing.DeleteThingListener() {
|
-> DeleteThing.deletePost(mRetrofit.getRetrofit(), mPost.getId(), mAccessToken, new DeleteThing.DeleteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void deleteSuccess() {
|
public void deleteSuccess() {
|
||||||
Toast.makeText(activity, R.string.delete_post_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(activity, R.string.delete_post_success, Toast.LENGTH_SHORT).show();
|
||||||
@@ -1169,9 +1143,19 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
private void tryMarkingPostAsRead() {
|
private void tryMarkingPostAsRead() {
|
||||||
if (mMarkPostsAsRead && mPost != null && !mPost.isRead()) {
|
if (mMarkPostsAsRead && mPost != null && !mPost.isRead()) {
|
||||||
mPost.markAsRead();
|
mPost.markAsRead();
|
||||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, mPost.getId());
|
markPostAsRead.markPostAsRead(mPost.getId(), mAccessToken, new MarkPostAsRead.MarkPostAsReadListener() {
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadSuccess() {
|
||||||
|
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, mPost.getId());
|
||||||
EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition));
|
EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMarkPostAsReadFailed() {
|
||||||
|
Toast.makeText(activity, R.string.mark_post_as_read_failed, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1240,41 +1224,34 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fetchPostAndCommentsById(String subredditId) {
|
private void fetchPostAndCommentsById(int subredditId) {
|
||||||
mFetchPostInfoLinearLayout.setVisibility(View.GONE);
|
mFetchPostInfoLinearLayout.setVisibility(View.GONE);
|
||||||
mSwipeRefreshLayout.setRefreshing(true);
|
mSwipeRefreshLayout.setRefreshing(true);
|
||||||
mGlide.clear(mFetchPostInfoImageView);
|
mGlide.clear(mFetchPostInfoImageView);
|
||||||
|
FetchPost.fetchPost(mExecutor, new Handler(), mRetrofit.getRetrofit(), String.valueOf(subredditId), mAccessToken,
|
||||||
Call<String> postAndComments = mRetrofit.getRetrofit().create(LemmyAPI.class).getComments("All", sortType.value, 5, 1, 25, null, null, Integer.valueOf(subredditId), mSingleCommentId, false, mAccessToken);
|
new FetchPost.FetchPostListener() {
|
||||||
postAndComments.enqueue(new Callback<>() {
|
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void fetchPostSuccess(Post post) {
|
||||||
if (!isAdded()) {
|
if (!isAdded()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mSwipeRefreshLayout.setRefreshing(false);
|
|
||||||
|
|
||||||
if (response.isSuccessful()) {
|
|
||||||
ParsePost.parsePost(mExecutor, new Handler(), response.body(), new ParsePost.ParsePostListener() {
|
|
||||||
@Override
|
|
||||||
public void onParsePostSuccess(Post post) {
|
|
||||||
mPost = post;
|
mPost = post;
|
||||||
tryMarkingPostAsRead();
|
|
||||||
|
|
||||||
setupMenu();
|
|
||||||
|
|
||||||
mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
|
mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
|
||||||
ViewPostDetailFragment.this, mExecutor, mCustomThemeWrapper,
|
ViewPostDetailFragment.this, mExecutor, mCustomThemeWrapper,
|
||||||
mRetrofit.getRetrofit(), mOauthRetrofit, mGfycatRetrofit, mRedgifsRetrofit,
|
mRetrofit.getRetrofit(), mGfycatRetrofit, mRedgifsRetrofit,
|
||||||
mStreamableApiProvider, mRedditDataRoomDatabase, mGlide, mSeparatePostAndComments,
|
mStreamableApiProvider, mRedditDataRoomDatabase, mGlide, mSeparatePostAndComments,
|
||||||
mAccessToken, mAccountName, mPost, mLocale, mSharedPreferences,
|
mAccessToken, mAccountName, mPost, mLocale, mSharedPreferences,
|
||||||
mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences,
|
mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences,
|
||||||
mPostDetailsSharedPreferences, mExoCreator,
|
mPostDetailsSharedPreferences, mExoCreator,
|
||||||
post1 -> EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)));
|
post1 -> EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)));
|
||||||
|
mSwipeRefreshLayout.setRefreshing(false);
|
||||||
|
FetchComment.fetchComments(mExecutor, new Handler(), mRetrofit.getRetrofit(), mAccessToken, post.getId(), mSingleCommentId == 0 ? null : mSingleCommentId, sortType, mExpandChildren, 1, new FetchComment.FetchCommentListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchCommentSuccess(ArrayList<Comment> expandedComments, Integer parentId, ArrayList<Integer> children) {
|
||||||
|
pages_loaded++;
|
||||||
mCommentsAdapter = new CommentsRecyclerViewAdapter(activity,
|
mCommentsAdapter = new CommentsRecyclerViewAdapter(activity,
|
||||||
ViewPostDetailFragment.this, mCustomThemeWrapper, mExecutor,
|
ViewPostDetailFragment.this, mCustomThemeWrapper, mExecutor,
|
||||||
mRetrofit.getRetrofit(), mOauthRetrofit, mAccessToken, mAccountName, mPost, mLocale,
|
mRetrofit.getRetrofit(), mAccessToken, mAccountName, mPost, mLocale,
|
||||||
mSingleCommentId, isSingleCommentThreadMode, mSharedPreferences,
|
mSingleCommentId, isSingleCommentThreadMode, mSharedPreferences,
|
||||||
new CommentsRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
|
new CommentsRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
|
||||||
@Override
|
@Override
|
||||||
@@ -1305,83 +1282,17 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
|
|
||||||
if (mRespectSubredditRecommendedSortType) {
|
if (mRespectSubredditRecommendedSortType) {
|
||||||
fetchCommentsRespectRecommendedSort(false);
|
fetchCommentsRespectRecommendedSort(false);
|
||||||
} else {
|
}
|
||||||
ParseComment.parseComments(mExecutor, new Handler(), response.body(), null,
|
ViewPostDetailFragment.this.children = children;
|
||||||
mExpandChildren, new ParseComment.ParseCommentListener() {
|
|
||||||
@Override
|
|
||||||
public void onParseCommentSuccess(ArrayList<Comment> topLevelComments, ArrayList<Comment> expandedComments, Integer parentId, ArrayList<Integer> moreChildrenIds) {
|
|
||||||
ViewPostDetailFragment.this.children = moreChildrenIds;
|
|
||||||
|
|
||||||
hasMoreChildren = children.size() != 0;
|
hasMoreChildren = false;
|
||||||
mCommentsAdapter.addComments(expandedComments, hasMoreChildren);
|
mCommentsAdapter.addComments(expandedComments, hasMoreChildren);
|
||||||
|
|
||||||
if (children.size() > 0) {
|
|
||||||
(mCommentsRecyclerView == null ? mRecyclerView : mCommentsRecyclerView).clearOnScrollListeners();
|
|
||||||
(mCommentsRecyclerView == null ? mRecyclerView : mCommentsRecyclerView).addOnScrollListener(new RecyclerView.OnScrollListener() {
|
|
||||||
@Override
|
|
||||||
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
|
||||||
super.onScrolled(recyclerView, dx, dy);
|
|
||||||
if (!mIsSmoothScrolling && !mLockFab) {
|
|
||||||
if (!recyclerView.canScrollVertically(1)) {
|
|
||||||
activity.hideFab();
|
|
||||||
} else {
|
|
||||||
if (dy > 0) {
|
|
||||||
if (mSwipeUpToHideFab) {
|
|
||||||
activity.showFab();
|
|
||||||
} else {
|
|
||||||
activity.hideFab();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (mSwipeUpToHideFab) {
|
|
||||||
activity.hideFab();
|
|
||||||
} else {
|
|
||||||
activity.showFab();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isLoadingMoreChildren && loadMoreChildrenSuccess) {
|
|
||||||
int visibleItemCount = (mCommentsRecyclerView == null ? mRecyclerView : mCommentsRecyclerView).getLayoutManager().getChildCount();
|
|
||||||
int totalItemCount = (mCommentsRecyclerView == null ? mRecyclerView : mCommentsRecyclerView).getLayoutManager().getItemCount();
|
|
||||||
int firstVisibleItemPosition = ((LinearLayoutManagerBugFixed) (mCommentsRecyclerView == null ? mRecyclerView : mCommentsRecyclerView).getLayoutManager()).findFirstVisibleItemPosition();
|
|
||||||
|
|
||||||
if ((visibleItemCount + firstVisibleItemPosition >= totalItemCount) && firstVisibleItemPosition >= 0) {
|
|
||||||
fetchMoreComments();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
public void onFetchCommentFailed() {
|
||||||
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
|
||||||
mIsSmoothScrolling = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onParseCommentFailed() {
|
|
||||||
mCommentsAdapter.initiallyLoadCommentsFailed();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onParsePostFail() {
|
|
||||||
showErrorView(subredditId);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
showErrorView(subredditId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
|
||||||
if (isAdded()) {
|
if (isAdded()) {
|
||||||
showErrorView(subredditId);
|
showErrorView(subredditId);
|
||||||
}
|
}
|
||||||
@@ -1389,6 +1300,17 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void fetchPostFailed() {
|
||||||
|
if (isAdded()) {
|
||||||
|
showMessage(R.string.refresh_post_failed);
|
||||||
|
isRefreshing = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void fetchCommentsRespectRecommendedSort(boolean changeRefreshState, SortType.Type sortType) {
|
private void fetchCommentsRespectRecommendedSort(boolean changeRefreshState, SortType.Type sortType) {
|
||||||
if (mRespectSubredditRecommendedSortType && mPost != null) {
|
if (mRespectSubredditRecommendedSortType && mPost != null) {
|
||||||
if (mPost.getSuggestedSort() != null && !mPost.getSuggestedSort().equals("null") && !mPost.getSuggestedSort().equals("")) {
|
if (mPost.getSuggestedSort() != null && !mPost.getSuggestedSort().equals("null") && !mPost.getSuggestedSort().equals("")) {
|
||||||
@@ -1598,7 +1520,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showErrorView(String subredditId) {
|
private void showErrorView(int subredditId) {
|
||||||
mSwipeRefreshLayout.setRefreshing(false);
|
mSwipeRefreshLayout.setRefreshing(false);
|
||||||
mFetchPostInfoLinearLayout.setVisibility(View.VISIBLE);
|
mFetchPostInfoLinearLayout.setVisibility(View.VISIBLE);
|
||||||
mFetchPostInfoLinearLayout.setOnClickListener(view -> fetchPostAndCommentsById(subredditId));
|
mFetchPostInfoLinearLayout.setOnClickListener(view -> fetchPostAndCommentsById(subredditId));
|
||||||
@@ -1621,7 +1543,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
|
|
||||||
Map<String, String> params = new HashMap<>();
|
Map<String, String> params = new HashMap<>();
|
||||||
params.put(APIUtils.ID_KEY, mPost.getFullName());
|
params.put(APIUtils.ID_KEY, mPost.getFullName());
|
||||||
mOauthRetrofit.create(RedditAPI.class).markNSFW(APIUtils.getOAuthHeader(mAccessToken), params)
|
mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), mPost.getTitle(), mPost.getUrl(), mPost.getSelfText(), true, null, mAccessToken))
|
||||||
.enqueue(new Callback<String>() {
|
.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
@@ -1659,7 +1581,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
|
|
||||||
Map<String, String> params = new HashMap<>();
|
Map<String, String> params = new HashMap<>();
|
||||||
params.put(APIUtils.ID_KEY, mPost.getFullName());
|
params.put(APIUtils.ID_KEY, mPost.getFullName());
|
||||||
mOauthRetrofit.create(RedditAPI.class).unmarkNSFW(APIUtils.getOAuthHeader(mAccessToken), params)
|
mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), mPost.getTitle(), mPost.getUrl(), mPost.getSelfText(), false, null, mAccessToken))
|
||||||
.enqueue(new Callback<String>() {
|
.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
@@ -1690,88 +1612,12 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void markSpoiler() {
|
public void deleteComment(int commentId, int position) {
|
||||||
if (mMenu != null) {
|
|
||||||
mMenu.findItem(R.id.action_spoiler_view_post_detail_fragment).setTitle(R.string.action_unmark_spoiler);
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, String> params = new HashMap<>();
|
|
||||||
params.put(APIUtils.ID_KEY, mPost.getFullName());
|
|
||||||
mOauthRetrofit.create(RedditAPI.class).markSpoiler(APIUtils.getOAuthHeader(mAccessToken), params)
|
|
||||||
.enqueue(new Callback<String>() {
|
|
||||||
@Override
|
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
|
||||||
if (response.isSuccessful()) {
|
|
||||||
if (mMenu != null) {
|
|
||||||
mMenu.findItem(R.id.action_spoiler_view_post_detail_fragment).setTitle(R.string.action_unmark_spoiler);
|
|
||||||
}
|
|
||||||
|
|
||||||
refresh(true, false);
|
|
||||||
showMessage(R.string.mark_spoiler_success);
|
|
||||||
} else {
|
|
||||||
if (mMenu != null) {
|
|
||||||
mMenu.findItem(R.id.action_spoiler_view_post_detail_fragment).setTitle(R.string.action_mark_spoiler);
|
|
||||||
}
|
|
||||||
|
|
||||||
showMessage(R.string.mark_spoiler_failed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
|
||||||
if (mMenu != null) {
|
|
||||||
mMenu.findItem(R.id.action_spoiler_view_post_detail_fragment).setTitle(R.string.action_mark_spoiler);
|
|
||||||
}
|
|
||||||
|
|
||||||
showMessage(R.string.mark_spoiler_failed);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void unmarkSpoiler() {
|
|
||||||
if (mMenu != null) {
|
|
||||||
mMenu.findItem(R.id.action_spoiler_view_post_detail_fragment).setTitle(R.string.action_mark_spoiler);
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, String> params = new HashMap<>();
|
|
||||||
params.put(APIUtils.ID_KEY, mPost.getFullName());
|
|
||||||
mOauthRetrofit.create(RedditAPI.class).unmarkSpoiler(APIUtils.getOAuthHeader(mAccessToken), params)
|
|
||||||
.enqueue(new Callback<String>() {
|
|
||||||
@Override
|
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
|
||||||
if (response.isSuccessful()) {
|
|
||||||
if (mMenu != null) {
|
|
||||||
mMenu.findItem(R.id.action_spoiler_view_post_detail_fragment).setTitle(R.string.action_mark_spoiler);
|
|
||||||
}
|
|
||||||
|
|
||||||
refresh(true, false);
|
|
||||||
showMessage(R.string.unmark_spoiler_success);
|
|
||||||
} else {
|
|
||||||
if (mMenu != null) {
|
|
||||||
mMenu.findItem(R.id.action_spoiler_view_post_detail_fragment).setTitle(R.string.action_unmark_spoiler);
|
|
||||||
}
|
|
||||||
|
|
||||||
showMessage(R.string.unmark_spoiler_failed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
|
||||||
if (mMenu != null) {
|
|
||||||
mMenu.findItem(R.id.action_spoiler_view_post_detail_fragment).setTitle(R.string.action_unmark_spoiler);
|
|
||||||
}
|
|
||||||
|
|
||||||
showMessage(R.string.unmark_spoiler_failed);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deleteComment(String fullName, int position) {
|
|
||||||
new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme)
|
new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme)
|
||||||
.setTitle(R.string.delete_this_comment)
|
.setTitle(R.string.delete_this_comment)
|
||||||
.setMessage(R.string.are_you_sure)
|
.setMessage(R.string.are_you_sure)
|
||||||
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
||||||
-> DeleteThing.delete(mOauthRetrofit, fullName, mAccessToken, new DeleteThing.DeleteThingListener() {
|
-> DeleteThing.deleteComment(mRetrofit.getRetrofit(), commentId, mAccessToken, new DeleteThing.DeleteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void deleteSuccess() {
|
public void deleteSuccess() {
|
||||||
Toast.makeText(activity, R.string.delete_post_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(activity, R.string.delete_post_success, Toast.LENGTH_SHORT).show();
|
||||||
|
|||||||
@@ -8,6 +8,11 @@ import androidx.annotation.Nullable;
|
|||||||
|
|
||||||
import org.commonmark.ext.gfm.tables.TableBlock;
|
import org.commonmark.ext.gfm.tables.TableBlock;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.R;
|
||||||
|
import eu.toldi.infinityforlemmy.customviews.CustomMarkwonAdapter;
|
||||||
import io.noties.markwon.Markwon;
|
import io.noties.markwon.Markwon;
|
||||||
import io.noties.markwon.MarkwonPlugin;
|
import io.noties.markwon.MarkwonPlugin;
|
||||||
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
|
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
|
||||||
@@ -20,8 +25,6 @@ import io.noties.markwon.recycler.MarkwonAdapter;
|
|||||||
import io.noties.markwon.recycler.table.TableEntry;
|
import io.noties.markwon.recycler.table.TableEntry;
|
||||||
import io.noties.markwon.recycler.table.TableEntryPlugin;
|
import io.noties.markwon.recycler.table.TableEntryPlugin;
|
||||||
import me.saket.bettermovementmethod.BetterLinkMovementMethod;
|
import me.saket.bettermovementmethod.BetterLinkMovementMethod;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
|
||||||
import eu.toldi.infinityforlemmy.customviews.CustomMarkwonAdapter;
|
|
||||||
|
|
||||||
public class MarkdownUtils {
|
public class MarkdownUtils {
|
||||||
/**
|
/**
|
||||||
@@ -112,4 +115,39 @@ public class MarkdownUtils {
|
|||||||
.textLayoutIsRoot(R.layout.view_table_entry_cell)))
|
.textLayoutIsRoot(R.layout.view_table_entry_cell)))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final Pattern emptyPattern = Pattern.compile("!\\[\\]\\((.*?)\\)");
|
||||||
|
private static final Pattern nonEmptyPattern = Pattern.compile("!\\[(.*?)\\]\\((.*?)\\)");
|
||||||
|
|
||||||
|
public static String processImageCaptions(String markdown, String replacementCaption) {
|
||||||
|
// Pattern for Markdown images with empty captions
|
||||||
|
|
||||||
|
// Pattern for Markdown images with non-empty captions
|
||||||
|
|
||||||
|
|
||||||
|
Matcher emptyMatcher = emptyPattern.matcher(markdown);
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
|
||||||
|
while (emptyMatcher.find()) {
|
||||||
|
// Replace the matched pattern with the same URL, but with a caption
|
||||||
|
emptyMatcher.appendReplacement(sb, "[" + replacementCaption + "](" + emptyMatcher.group(1) + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append the rest of the content
|
||||||
|
emptyMatcher.appendTail(sb);
|
||||||
|
|
||||||
|
// Now process non-empty captions
|
||||||
|
Matcher nonEmptyMatcher = nonEmptyPattern.matcher(sb.toString());
|
||||||
|
StringBuffer finalSb = new StringBuffer();
|
||||||
|
|
||||||
|
while (nonEmptyMatcher.find()) {
|
||||||
|
// Replace the matched pattern with the same URL and caption, but without the "!"
|
||||||
|
nonEmptyMatcher.appendReplacement(finalSb, "[" + nonEmptyMatcher.group(1) + "](" + nonEmptyMatcher.group(2) + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append the rest of the content
|
||||||
|
nonEmptyMatcher.appendTail(finalSb);
|
||||||
|
|
||||||
|
return finalSb.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.message;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||||
|
|
||||||
|
public class CommentInteraction {
|
||||||
|
int id;
|
||||||
|
private Comment comment;
|
||||||
|
private boolean isRead;
|
||||||
|
|
||||||
|
public CommentInteraction(int id, Comment comment, boolean isRead) {
|
||||||
|
this.id = id;
|
||||||
|
this.comment = comment;
|
||||||
|
this.isRead = isRead;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Comment getComment() {
|
||||||
|
return this.comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRead() {
|
||||||
|
return this.isRead;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void markAsUnRead() {
|
||||||
|
this.isRead = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void markAsRead() {
|
||||||
|
this.isRead = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.message;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||||
|
import eu.toldi.infinityforlemmy.comment.ParseComment;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
|
public class FetchCommentInteractions {
|
||||||
|
public static void fetchReplies(Retrofit retrofit, Integer page, boolean unreadOnly, String auth, FetchCommentInteractionsListener fetchMessagesListener) {
|
||||||
|
LemmyAPI api = retrofit.create(LemmyAPI.class);
|
||||||
|
|
||||||
|
api.userReplies("New", page, 25, unreadOnly, auth).enqueue(
|
||||||
|
new Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<String> call, Response<String> response) {
|
||||||
|
if (response.isSuccessful()) {
|
||||||
|
try {
|
||||||
|
JSONObject jsonObject = new JSONObject(response.body());
|
||||||
|
JSONArray jsonArray = jsonObject.getJSONArray("replies");
|
||||||
|
List<CommentInteraction> commentInteractions = new ArrayList<>();
|
||||||
|
for (int i = 0; i < jsonArray.length(); i++) {
|
||||||
|
JSONObject commentInteractionObject = jsonArray.getJSONObject(i);
|
||||||
|
Comment comment = ParseComment.parseSingleComment(commentInteractionObject);
|
||||||
|
boolean isRead = !commentInteractionObject.getJSONObject("comment_reply").getBoolean("read");
|
||||||
|
int id = commentInteractionObject.getJSONObject("comment_reply").getInt("id");
|
||||||
|
commentInteractions.add(new CommentInteraction(id, comment, isRead));
|
||||||
|
}
|
||||||
|
fetchMessagesListener.fetchSuccess(commentInteractions);
|
||||||
|
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
fetchMessagesListener.fetchFailed();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fetchMessagesListener.fetchFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<String> call, Throwable t) {
|
||||||
|
fetchMessagesListener.fetchFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fetchMentions(Retrofit retrofit, Integer page, boolean unreadOnly, String auth, FetchCommentInteractionsListener fetchMessagesListener) {
|
||||||
|
LemmyAPI api = retrofit.create(LemmyAPI.class);
|
||||||
|
|
||||||
|
api.userMentions("New", page, 25, unreadOnly, auth).enqueue(
|
||||||
|
new Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<String> call, Response<String> response) {
|
||||||
|
if (response.isSuccessful()) {
|
||||||
|
try {
|
||||||
|
JSONObject jsonObject = new JSONObject(response.body());
|
||||||
|
JSONArray jsonArray = jsonObject.getJSONArray("mentions");
|
||||||
|
List<CommentInteraction> commentInteractions = new ArrayList<>();
|
||||||
|
for (int i = 0; i < jsonArray.length(); i++) {
|
||||||
|
JSONObject commentInteractionObject = jsonArray.getJSONObject(i);
|
||||||
|
Comment comment = ParseComment.parseSingleComment(commentInteractionObject);
|
||||||
|
boolean isRead = commentInteractionObject.getJSONObject("person_mention").getBoolean("read");
|
||||||
|
int id = commentInteractionObject.getJSONObject("person_mention").getInt("id");
|
||||||
|
commentInteractions.add(new CommentInteraction(id, comment, isRead));
|
||||||
|
}
|
||||||
|
fetchMessagesListener.fetchSuccess(commentInteractions);
|
||||||
|
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
fetchMessagesListener.fetchFailed();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fetchMessagesListener.fetchFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<String> call, Throwable t) {
|
||||||
|
fetchMessagesListener.fetchFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface FetchCommentInteractionsListener {
|
||||||
|
void fetchSuccess(List<CommentInteraction> commentInteractions);
|
||||||
|
|
||||||
|
void fetchFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,6 +15,8 @@ import retrofit2.Retrofit;
|
|||||||
|
|
||||||
public class FetchMessage {
|
public class FetchMessage {
|
||||||
|
|
||||||
|
public static final String WHERE_REPLIES = "replies";
|
||||||
|
public static final String WHERE_MENTIONS = "mentions";
|
||||||
public static final String WHERE_INBOX = "inbox";
|
public static final String WHERE_INBOX = "inbox";
|
||||||
public static final String WHERE_UNREAD = "unread";
|
public static final String WHERE_UNREAD = "unread";
|
||||||
public static final String WHERE_SENT = "sent";
|
public static final String WHERE_SENT = "sent";
|
||||||
@@ -24,6 +26,9 @@ public class FetchMessage {
|
|||||||
public static final int MESSAGE_TYPE_INBOX = 0;
|
public static final int MESSAGE_TYPE_INBOX = 0;
|
||||||
public static final int MESSAGE_TYPE_PRIVATE_MESSAGE = 1;
|
public static final int MESSAGE_TYPE_PRIVATE_MESSAGE = 1;
|
||||||
public static final int MESSAGE_TYPE_NOTIFICATION = 2;
|
public static final int MESSAGE_TYPE_NOTIFICATION = 2;
|
||||||
|
public static final int MESSAGE_TYPE_REPLIES = 3;
|
||||||
|
public static final int MESSAGE_TYPE_MENTIONS = 4;
|
||||||
|
|
||||||
|
|
||||||
static void fetchInbox(Retrofit oauthRetrofit, Locale locale, String accessToken, String where,
|
static void fetchInbox(Retrofit oauthRetrofit, Locale locale, String accessToken, String where,
|
||||||
String after, int messageType, FetchMessagesListener fetchMessagesListener) {
|
String after, int messageType, FetchMessagesListener fetchMessagesListener) {
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.message;
|
||||||
|
|
||||||
|
public class MessageCount {
|
||||||
|
|
||||||
|
/*
|
||||||
|
Example:
|
||||||
|
{
|
||||||
|
"replies": 1,
|
||||||
|
"mentions": 0,
|
||||||
|
"private_messages": 0
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
public int replies;
|
||||||
|
public int mentions;
|
||||||
|
public int private_messages;
|
||||||
|
|
||||||
|
public MessageCount(int replies, int mentions, int private_messages) {
|
||||||
|
this.replies = replies;
|
||||||
|
this.mentions = mentions;
|
||||||
|
this.private_messages = private_messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getReplies() {
|
||||||
|
return replies;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMentions() {
|
||||||
|
return mentions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPrivate_messages() {
|
||||||
|
return private_messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSum() {
|
||||||
|
return replies + mentions + private_messages;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
package eu.toldi.infinityforlemmy.message;
|
package eu.toldi.infinityforlemmy.message;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
import androidx.paging.PageKeyedDataSource;
|
import androidx.paging.PageKeyedDataSource;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.NetworkState;
|
import eu.toldi.infinityforlemmy.NetworkState;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
class MessageDataSource extends PageKeyedDataSource<String, Message> {
|
class MessageDataSource extends PageKeyedDataSource<Integer, CommentInteraction> {
|
||||||
private Retrofit oauthRetrofit;
|
private Retrofit retrofit;
|
||||||
private Locale locale;
|
private Locale locale;
|
||||||
private String accessToken;
|
private String accessToken;
|
||||||
private String where;
|
private String where;
|
||||||
@@ -22,18 +22,22 @@ class MessageDataSource extends PageKeyedDataSource<String, Message> {
|
|||||||
private MutableLiveData<NetworkState> initialLoadStateLiveData;
|
private MutableLiveData<NetworkState> initialLoadStateLiveData;
|
||||||
private MutableLiveData<Boolean> hasPostLiveData;
|
private MutableLiveData<Boolean> hasPostLiveData;
|
||||||
|
|
||||||
private LoadParams<String> params;
|
private LoadParams<Integer> params;
|
||||||
private LoadCallback<String, Message> callback;
|
private LoadCallback<Integer, CommentInteraction> callback;
|
||||||
|
|
||||||
|
private int page = 0;
|
||||||
|
|
||||||
MessageDataSource(Retrofit oauthRetrofit, Locale locale, String accessToken, String where) {
|
MessageDataSource(Retrofit oauthRetrofit, Locale locale, String accessToken, String where) {
|
||||||
this.oauthRetrofit = oauthRetrofit;
|
this.retrofit = oauthRetrofit;
|
||||||
this.locale = locale;
|
this.locale = locale;
|
||||||
this.accessToken = accessToken;
|
this.accessToken = accessToken;
|
||||||
this.where = where;
|
this.where = where;
|
||||||
if (where.equals(FetchMessage.WHERE_MESSAGES)) {
|
if (where.equals(FetchMessage.WHERE_MESSAGES)) {
|
||||||
messageType = FetchMessage.MESSAGE_TYPE_PRIVATE_MESSAGE;
|
messageType = FetchMessage.MESSAGE_TYPE_PRIVATE_MESSAGE;
|
||||||
|
} else if (where.equals(FetchMessage.WHERE_REPLIES)) {
|
||||||
|
messageType = FetchMessage.MESSAGE_TYPE_REPLIES;
|
||||||
} else {
|
} else {
|
||||||
messageType = FetchMessage.MESSAGE_TYPE_INBOX;
|
messageType = FetchMessage.MESSAGE_TYPE_MENTIONS;
|
||||||
}
|
}
|
||||||
paginationNetworkStateLiveData = new MutableLiveData<>();
|
paginationNetworkStateLiveData = new MutableLiveData<>();
|
||||||
initialLoadStateLiveData = new MutableLiveData<>();
|
initialLoadStateLiveData = new MutableLiveData<>();
|
||||||
@@ -57,24 +61,38 @@ class MessageDataSource extends PageKeyedDataSource<String, Message> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadInitial(@NonNull LoadInitialParams<String> params, @NonNull LoadInitialCallback<String, Message> callback) {
|
public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull LoadInitialCallback<Integer, CommentInteraction> callback) {
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADING);
|
initialLoadStateLiveData.postValue(NetworkState.LOADING);
|
||||||
|
if (messageType == FetchMessage.MESSAGE_TYPE_REPLIES) {
|
||||||
FetchMessage.fetchInbox(oauthRetrofit, locale, accessToken, where, null, messageType,
|
FetchCommentInteractions.fetchReplies(retrofit, 1, false, accessToken, new FetchCommentInteractions.FetchCommentInteractionsListener() {
|
||||||
new FetchMessage.FetchMessagesListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void fetchSuccess(ArrayList<Message> messages, @Nullable String after) {
|
public void fetchSuccess(List<CommentInteraction> commentInteractions) {
|
||||||
if (messages.size() == 0) {
|
|
||||||
hasPostLiveData.postValue(false);
|
|
||||||
} else {
|
|
||||||
hasPostLiveData.postValue(true);
|
hasPostLiveData.postValue(true);
|
||||||
|
if (commentInteractions.size() == 0) {
|
||||||
|
callback.onResult(commentInteractions, null, null);
|
||||||
|
} else {
|
||||||
|
callback.onResult(commentInteractions, null, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (after == null || after.equals("") || after.equals("null")) {
|
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
||||||
callback.onResult(messages, null, null);
|
|
||||||
} else {
|
|
||||||
callback.onResult(messages, null, after);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void fetchFailed() {
|
||||||
|
initialLoadStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error fetch messages"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (messageType == FetchMessage.MESSAGE_TYPE_MENTIONS) {
|
||||||
|
FetchCommentInteractions.fetchMentions(retrofit, 1, false, accessToken, new FetchCommentInteractions.FetchCommentInteractionsListener() {
|
||||||
|
@Override
|
||||||
|
public void fetchSuccess(List<CommentInteraction> commentInteractions) {
|
||||||
|
hasPostLiveData.postValue(true);
|
||||||
|
if (commentInteractions.size() == 0) {
|
||||||
|
callback.onResult(commentInteractions, null, null);
|
||||||
|
} else {
|
||||||
|
callback.onResult(commentInteractions, null, 2);
|
||||||
|
}
|
||||||
|
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,27 +102,28 @@ class MessageDataSource extends PageKeyedDataSource<String, Message> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadBefore(@NonNull LoadParams<String> params, @NonNull LoadCallback<String, Message> callback) {
|
public void loadBefore(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, CommentInteraction> callback) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadAfter(@NonNull LoadParams<String> params, @NonNull LoadCallback<String, Message> callback) {
|
public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, CommentInteraction> callback) {
|
||||||
this.params = params;
|
this.params = params;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
|
|
||||||
paginationNetworkStateLiveData.postValue(NetworkState.LOADING);
|
paginationNetworkStateLiveData.postValue(NetworkState.LOADING);
|
||||||
|
if (messageType == FetchMessage.MESSAGE_TYPE_REPLIES) {
|
||||||
FetchMessage.fetchInbox(oauthRetrofit, locale, accessToken, where, params.key, messageType,
|
FetchCommentInteractions.fetchReplies(retrofit, params.key, false, accessToken, new FetchCommentInteractions.FetchCommentInteractionsListener() {
|
||||||
new FetchMessage.FetchMessagesListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void fetchSuccess(ArrayList<Message> messages, @Nullable String after) {
|
public void fetchSuccess(List<CommentInteraction> commentInteractions) {
|
||||||
if (after == null || after.equals("") || after.equals("null")) {
|
hasPostLiveData.postValue(true);
|
||||||
callback.onResult(messages, null);
|
if (commentInteractions.size() == 0) {
|
||||||
|
callback.onResult(new ArrayList<>(), null);
|
||||||
} else {
|
} else {
|
||||||
callback.onResult(messages, after);
|
callback.onResult(commentInteractions, params.key + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
|
paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
|
||||||
@@ -112,8 +131,27 @@ class MessageDataSource extends PageKeyedDataSource<String, Message> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fetchFailed() {
|
public void fetchFailed() {
|
||||||
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error fetching data"));
|
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error fetch messages"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (messageType == FetchMessage.MESSAGE_TYPE_MENTIONS) {
|
||||||
|
FetchCommentInteractions.fetchMentions(retrofit, params.key, false, accessToken, new FetchCommentInteractions.FetchCommentInteractionsListener() {
|
||||||
|
@Override
|
||||||
|
public void fetchSuccess(List<CommentInteraction> commentInteractions) {
|
||||||
|
hasPostLiveData.postValue(true);
|
||||||
|
if (commentInteractions.size() == 0) {
|
||||||
|
callback.onResult(new ArrayList<>(), null);
|
||||||
|
} else {
|
||||||
|
callback.onResult(commentInteractions, params.key + 1);
|
||||||
|
}
|
||||||
|
paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void fetchFailed() {
|
||||||
|
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error fetch messages"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public class MessageViewModel extends ViewModel {
|
|||||||
private LiveData<NetworkState> paginationNetworkState;
|
private LiveData<NetworkState> paginationNetworkState;
|
||||||
private LiveData<NetworkState> initialLoadingState;
|
private LiveData<NetworkState> initialLoadingState;
|
||||||
private LiveData<Boolean> hasMessageLiveData;
|
private LiveData<Boolean> hasMessageLiveData;
|
||||||
private LiveData<PagedList<Message>> messages;
|
private LiveData<PagedList<CommentInteraction>> messages;
|
||||||
private MutableLiveData<String> whereLiveData;
|
private MutableLiveData<String> whereLiveData;
|
||||||
|
|
||||||
public MessageViewModel(Retrofit retrofit, Locale locale, String accessToken, String where) {
|
public MessageViewModel(Retrofit retrofit, Locale locale, String accessToken, String where) {
|
||||||
@@ -47,7 +47,7 @@ public class MessageViewModel extends ViewModel {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<PagedList<Message>> getMessages() {
|
public LiveData<PagedList<CommentInteraction>> getMessages() {
|
||||||
return messages;
|
return messages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,22 +2,38 @@ package eu.toldi.infinityforlemmy.message;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
import java.util.Map;
|
import eu.toldi.infinityforlemmy.dto.AuthDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.ReadCommentDTO;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class ReadMessage {
|
public class ReadMessage {
|
||||||
public static void readMessage(Retrofit oauthRetrofit, String accessToken, String commaSeparatedFullnames,
|
public static void readMessage(Retrofit oauthRetrofit, String accessToken, int messageId,
|
||||||
ReadMessageListener readMessageListener) {
|
ReadMessageListener readMessageListener) {
|
||||||
Map<String, String> params = new HashMap<>();
|
oauthRetrofit.create(LemmyAPI.class).commentMarkAsRead(new ReadCommentDTO(messageId, true, accessToken))
|
||||||
params.put(APIUtils.ID_KEY, commaSeparatedFullnames);
|
.enqueue(new Callback<String>() {
|
||||||
oauthRetrofit.create(RedditAPI.class).readMessage(APIUtils.getOAuthHeader(accessToken), params)
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
|
if (response.isSuccessful()) {
|
||||||
|
readMessageListener.readSuccess();
|
||||||
|
} else {
|
||||||
|
readMessageListener.readFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
|
readMessageListener.readFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void readAllMessages(Retrofit retrofit, String accessToken,
|
||||||
|
ReadMessageListener readMessageListener) {
|
||||||
|
retrofit.create(LemmyAPI.class).userMarkAllAsRead(new AuthDTO(accessToken))
|
||||||
.enqueue(new Callback<String>() {
|
.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.post;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.ReadPostDTO;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
|
public class MarkPostAsRead {
|
||||||
|
RetrofitHolder retrofitHolder;
|
||||||
|
|
||||||
|
public MarkPostAsRead(RetrofitHolder retrofitHolder) {
|
||||||
|
this.retrofitHolder = retrofitHolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setPostAsRead(int post_id, boolean markAsRead, String auth, MarkPostAsReadListener markPostAsReadListener) {
|
||||||
|
LemmyAPI lemmyAPI = retrofitHolder.getRetrofit().create(LemmyAPI.class);
|
||||||
|
|
||||||
|
lemmyAPI.postRead(new ReadPostDTO(post_id, markAsRead, auth)).enqueue(new Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<String> call, Response<String> response) {
|
||||||
|
if (response.isSuccessful()
|
||||||
|
&& response.body() != null) {
|
||||||
|
markPostAsReadListener.onMarkPostAsReadSuccess();
|
||||||
|
} else {
|
||||||
|
markPostAsReadListener.onMarkPostAsReadFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<String> call, Throwable t) {
|
||||||
|
markPostAsReadListener.onMarkPostAsReadFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void markPostAsRead(int post_id, String auth, MarkPostAsReadListener markPostAsReadListener) {
|
||||||
|
setPostAsRead(post_id, true, auth, markPostAsReadListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void markPostAsUnread(int post_id, String auth, MarkPostAsReadListener markPostAsReadListener) {
|
||||||
|
setPostAsRead(post_id, false, auth, markPostAsReadListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface MarkPostAsReadListener {
|
||||||
|
void onMarkPostAsReadSuccess();
|
||||||
|
|
||||||
|
void onMarkPostAsReadFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.post;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||||
|
import eu.toldi.infinityforlemmy.comment.ParseComment;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
|
public class ObjectResolver {
|
||||||
|
|
||||||
|
RetrofitHolder retrofitHolder;
|
||||||
|
|
||||||
|
public ObjectResolver(RetrofitHolder retrofitHolder) {
|
||||||
|
this.retrofitHolder = retrofitHolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resolvePost(String query, String auth, ObjectResolverListener objectResolverListener) {
|
||||||
|
LemmyAPI lemmyAPI = retrofitHolder.getRetrofit().create(LemmyAPI.class);
|
||||||
|
|
||||||
|
Call<String> response = lemmyAPI.resolveObject(query, auth);
|
||||||
|
response.enqueue(new Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<String> call, Response<String> response) {
|
||||||
|
if (response.isSuccessful()
|
||||||
|
&& response.body() != null) {
|
||||||
|
try {
|
||||||
|
JSONObject jsonObject = new JSONObject(Objects.requireNonNull(response.body())).getJSONObject("post");
|
||||||
|
Post p = ParsePost.parseBasicData(jsonObject);
|
||||||
|
objectResolverListener.onResolveObjectSuccess(p);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
objectResolverListener.onResolveObjectFailed();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
objectResolverListener.onResolveObjectFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<String> call, Throwable t) {
|
||||||
|
objectResolverListener.onResolveObjectFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resolveComment(String query, String auth, ObjectResolverListener objectResolverListener) {
|
||||||
|
LemmyAPI lemmyAPI = retrofitHolder.getRetrofit().create(LemmyAPI.class);
|
||||||
|
|
||||||
|
Call<String> response = lemmyAPI.resolveObject(query, auth);
|
||||||
|
response.enqueue(
|
||||||
|
new Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<String> call, Response<String> response) {
|
||||||
|
if (response.isSuccessful()
|
||||||
|
&& response.body() != null) {
|
||||||
|
try {
|
||||||
|
JSONObject jsonObject = new JSONObject(Objects.requireNonNull(response.body())).getJSONObject("comment");
|
||||||
|
Comment c = ParseComment.parseSingleComment(jsonObject);
|
||||||
|
objectResolverListener.onResolveObjectSuccess(c);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
objectResolverListener.onResolveObjectFailed();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
objectResolverListener.onResolveObjectFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<String> call, Throwable t) {
|
||||||
|
objectResolverListener.onResolveObjectFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ObjectResolverListener {
|
||||||
|
void onResolveObjectSuccess(Object resolvedObject);
|
||||||
|
|
||||||
|
void onResolveObjectFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,7 +5,6 @@ import static java.lang.Integer.max;
|
|||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.StrictMode;
|
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -18,17 +17,23 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.TimeZone;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
@@ -154,13 +159,28 @@ public class ParsePost {
|
|||||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||||
postTimeMillis = ZonedDateTime.parse(post.getString("published"),
|
postTimeMillis = ZonedDateTime.parse(post.getString("published"),
|
||||||
DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.of("Z"))).toInstant().toEpochMilli();
|
DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.of("Z"))).toInstant().toEpochMilli();
|
||||||
|
} else {
|
||||||
|
String dateStr = post.getString("published");
|
||||||
|
|
||||||
|
dateStr = dateStr.substring(0, dateStr.lastIndexOf(".") + 4) + 'Z';
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());
|
||||||
|
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||||
|
try {
|
||||||
|
Date date = sdf.parse(dateStr);
|
||||||
|
if (date != null) {
|
||||||
|
postTimeMillis = date.getTime();
|
||||||
}
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String title = post.getString("name");
|
String title = post.getString("name");
|
||||||
String permalink = post.getString("ap_id");
|
String permalink = post.getString("ap_id");
|
||||||
int score = counts.getInt("score");
|
int score = counts.getInt("score");
|
||||||
int voteType = 0;
|
int voteType = 0;
|
||||||
int nComments = counts.getInt("comments");
|
int nComments = counts.getInt("comments");
|
||||||
int upvoteRatio = 100 * counts.getInt("upvotes") / max(counts.getInt("upvotes") + counts.getInt("downvotes"),1);
|
int upvoteRatio = 100 * counts.getInt("upvotes") / max(counts.getInt("upvotes") + counts.getInt("downvotes"), 1);
|
||||||
boolean hidden = community.getBoolean("hidden");
|
boolean hidden = community.getBoolean("hidden");
|
||||||
boolean nsfw = post.getBoolean("nsfw");
|
boolean nsfw = post.getBoolean("nsfw");
|
||||||
boolean locked = post.getBoolean("locked");
|
boolean locked = post.getBoolean("locked");
|
||||||
@@ -170,8 +190,8 @@ public class ParsePost {
|
|||||||
ArrayList <Post.Preview> previews = new ArrayList<>();
|
ArrayList <Post.Preview> previews = new ArrayList<>();
|
||||||
if(!post.isNull("thumbnail_url")) {
|
if(!post.isNull("thumbnail_url")) {
|
||||||
String thumbnail = post.getString("thumbnail_url");
|
String thumbnail = post.getString("thumbnail_url");
|
||||||
int[] wh_array = getImageDimension(thumbnail);
|
//int[] wh_array = getImageDimension(thumbnail);
|
||||||
previews.add(new Post.Preview(thumbnail, wh_array[0], wh_array[1], "", ""));
|
previews.add(new Post.Preview(thumbnail, 0, 0, "", ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -501,8 +521,23 @@ public class ParsePost {
|
|||||||
post.setStreamableShortCode(shortCode);
|
post.setStreamableShortCode(shortCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IllegalArgumentException ignore) { }
|
} catch (IllegalArgumentException ignore) {
|
||||||
} else if (post.getPostType() == Post.LINK_TYPE || post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) {
|
}
|
||||||
|
} else if (post.getPostType() == Post.TEXT_TYPE) {
|
||||||
|
List<ImageInfo> images = extractImages(post.getSelfText());
|
||||||
|
if (images.size() == 1) {
|
||||||
|
post.setPostType(Post.IMAGE_TYPE);
|
||||||
|
post.setUrl(images.get(0).imageUrl);
|
||||||
|
} else if (images.size() > 1) {
|
||||||
|
post.setPostType(Post.GALLERY_TYPE);
|
||||||
|
ArrayList<Post.Gallery> gallery = new ArrayList<>();
|
||||||
|
for (ImageInfo image : images) {
|
||||||
|
String[] imagePath = image.getImageUrl().split(Pattern.quote("/"));
|
||||||
|
gallery.add(new Post.Gallery("image/jpg", image.getImageUrl(), "", imagePath[imagePath.length - 1], image.caption, ""));
|
||||||
|
}
|
||||||
|
post.setGallery(gallery);
|
||||||
|
}
|
||||||
|
|
||||||
if (!data.isNull(JSONUtils.GALLERY_DATA_KEY)) {
|
if (!data.isNull(JSONUtils.GALLERY_DATA_KEY)) {
|
||||||
JSONArray galleryIdsArray = data.getJSONObject(JSONUtils.GALLERY_DATA_KEY).getJSONArray(JSONUtils.ITEMS_KEY);
|
JSONArray galleryIdsArray = data.getJSONObject(JSONUtils.GALLERY_DATA_KEY).getJSONArray(JSONUtils.ITEMS_KEY);
|
||||||
JSONObject galleryObject = data.getJSONObject(JSONUtils.MEDIA_METADATA_KEY);
|
JSONObject galleryObject = data.getJSONObject(JSONUtils.MEDIA_METADATA_KEY);
|
||||||
@@ -612,17 +647,17 @@ public class ParsePost {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(data.getBoolean("read")){
|
if (data.getBoolean("read")) {
|
||||||
post.markAsRead();
|
post.markAsRead();
|
||||||
}
|
}
|
||||||
if(!data.isNull("my_vote")){
|
if (!data.isNull("my_vote")) {
|
||||||
post.setVoteType(data.getInt("my_vote"));
|
post.setVoteType(data.getInt("my_vote"));
|
||||||
post.setScore(post.getScore()-1);
|
post.setScore(post.getScore() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!data.getJSONObject("post").isNull("body")) {
|
if (!data.getJSONObject("post").isNull("body")) {
|
||||||
String body = data.getJSONObject("post").getString("body");
|
String body = MarkdownUtils.processImageCaptions(data.getJSONObject("post").getString("body"), "Image");
|
||||||
post.setSelfText(body);
|
post.setSelfText(body);
|
||||||
post.setSelfTextPlain(body);
|
post.setSelfTextPlain(body);
|
||||||
post.setSelfTextPlainTrimmed(body.trim());
|
post.setSelfTextPlainTrimmed(body.trim());
|
||||||
@@ -648,8 +683,7 @@ public class ParsePost {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static int[] getImageDimension(String imageUrl) {
|
public static int[] getImageDimension(String imageUrl) {
|
||||||
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
|
|
||||||
StrictMode.setThreadPolicy(policy); //Permit all for simplicity. You may want to revise this for your actual app.
|
|
||||||
|
|
||||||
HttpURLConnection urlConnection = null;
|
HttpURLConnection urlConnection = null;
|
||||||
try {
|
try {
|
||||||
@@ -674,4 +708,40 @@ public class ParsePost {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class ImageInfo {
|
||||||
|
private String caption;
|
||||||
|
private String imageUrl;
|
||||||
|
|
||||||
|
public ImageInfo(String caption, String imageUrl) {
|
||||||
|
this.caption = caption;
|
||||||
|
this.imageUrl = imageUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCaption() {
|
||||||
|
return caption;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getImageUrl() {
|
||||||
|
return imageUrl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static List<ImageInfo> extractImages(String markdown) {
|
||||||
|
List<ImageInfo> images = new ArrayList<>();
|
||||||
|
|
||||||
|
// Regular expression to match markdown image syntax 
|
||||||
|
Pattern pattern = Pattern.compile("!\\[(.*?)\\]\\((.*?)\\)");
|
||||||
|
Matcher matcher = pattern.matcher(markdown);
|
||||||
|
|
||||||
|
// Find all matches and extract image URLs and captions
|
||||||
|
while (matcher.find()) {
|
||||||
|
String caption = matcher.group(1);
|
||||||
|
String imageUrl = matcher.group(2);
|
||||||
|
images.add(new ImageInfo(caption, imageUrl));
|
||||||
|
}
|
||||||
|
|
||||||
|
return images;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package eu.toldi.infinityforlemmy.post;
|
package eu.toldi.infinityforlemmy.post;
|
||||||
|
|
||||||
|
import android.graphics.Bitmap;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
@@ -624,6 +625,8 @@ public class Post implements Parcelable {
|
|||||||
private String previewCaption;
|
private String previewCaption;
|
||||||
private String previewCaptionUrl;
|
private String previewCaptionUrl;
|
||||||
|
|
||||||
|
private Bitmap previewBitmap;
|
||||||
|
|
||||||
public Preview(String previewUrl, int previewWidth, int previewHeight, String previewCaption, String previewCaptionUrl) {
|
public Preview(String previewUrl, int previewWidth, int previewHeight, String previewCaption, String previewCaptionUrl) {
|
||||||
this.previewUrl = previewUrl;
|
this.previewUrl = previewUrl;
|
||||||
this.previewWidth = previewWidth;
|
this.previewWidth = previewWidth;
|
||||||
@@ -638,6 +641,7 @@ public class Post implements Parcelable {
|
|||||||
previewHeight = in.readInt();
|
previewHeight = in.readInt();
|
||||||
previewCaption = in.readString();
|
previewCaption = in.readString();
|
||||||
previewCaptionUrl = in.readString();
|
previewCaptionUrl = in.readString();
|
||||||
|
previewBitmap = in.readParcelable(Bitmap.class.getClassLoader());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Creator<Preview> CREATOR = new Creator<Preview>() {
|
public static final Creator<Preview> CREATOR = new Creator<Preview>() {
|
||||||
@@ -686,13 +690,23 @@ public class Post implements Parcelable {
|
|||||||
return previewCaptionUrl;
|
return previewCaptionUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPreviewCaptionUrl(String previewCaptionUrl) { this.previewCaptionUrl = previewCaptionUrl; }
|
public void setPreviewCaptionUrl(String previewCaptionUrl) {
|
||||||
|
this.previewCaptionUrl = previewCaptionUrl;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int describeContents() {
|
public int describeContents() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Bitmap getPreviewBitmap() {
|
||||||
|
return previewBitmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPreviewBitmap(Bitmap previewBitmap) {
|
||||||
|
this.previewBitmap = previewBitmap;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToParcel(Parcel parcel, int i) {
|
public void writeToParcel(Parcel parcel, int i) {
|
||||||
parcel.writeString(previewUrl);
|
parcel.writeString(previewUrl);
|
||||||
@@ -700,6 +714,7 @@ public class Post implements Parcelable {
|
|||||||
parcel.writeInt(previewHeight);
|
parcel.writeInt(previewHeight);
|
||||||
parcel.writeString(previewCaption);
|
parcel.writeString(previewCaption);
|
||||||
parcel.writeString(previewCaptionUrl);
|
parcel.writeString(previewCaptionUrl);
|
||||||
|
parcel.writeParcelable(previewBitmap, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ import java.util.List;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.SortType;
|
import eu.toldi.infinityforlemmy.SortType;
|
||||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import retrofit2.HttpException;
|
import retrofit2.HttpException;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post> {
|
public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post> {
|
||||||
public static final int TYPE_FRONT_PAGE = 0;
|
public static final int TYPE_FRONT_PAGE = 0;
|
||||||
@@ -43,7 +43,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
public static final String USER_WHERE_GILDED = "gilded";
|
public static final String USER_WHERE_GILDED = "gilded";
|
||||||
|
|
||||||
private Executor executor;
|
private Executor executor;
|
||||||
private Retrofit retrofit;
|
private RetrofitHolder retrofit;
|
||||||
private String accessToken;
|
private String accessToken;
|
||||||
private String accountName;
|
private String accountName;
|
||||||
private SharedPreferences sharedPreferences;
|
private SharedPreferences sharedPreferences;
|
||||||
@@ -61,10 +61,10 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
|
|
||||||
private int page = 1;
|
private int page = 1;
|
||||||
|
|
||||||
PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
PostPagingSource(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences,
|
SharedPreferences sharedPreferences,
|
||||||
SharedPreferences postFeedScrolledPositionSharedPreferences, int postType,
|
SharedPreferences postFeedScrolledPositionSharedPreferences, int postType,
|
||||||
SortType sortType, PostFilter postFilter, List<String> readPostList,String option) {
|
SortType sortType, PostFilter postFilter, List<String> readPostList, String option) {
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
this.accessToken = accessToken;
|
this.accessToken = accessToken;
|
||||||
@@ -79,7 +79,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
postLinkedHashSet = new LinkedHashSet<>();
|
postLinkedHashSet = new LinkedHashSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
PostPagingSource(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
String path, int postType, SortType sortType, PostFilter postFilter,
|
String path, int postType, SortType sortType, PostFilter postFilter,
|
||||||
List<String> readPostList) {
|
List<String> readPostList) {
|
||||||
@@ -117,7 +117,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
postLinkedHashSet = new LinkedHashSet<>();
|
postLinkedHashSet = new LinkedHashSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
PostPagingSource(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
String subredditOrUserName, int postType, SortType sortType, PostFilter postFilter,
|
String subredditOrUserName, int postType, SortType sortType, PostFilter postFilter,
|
||||||
String where, List<String> readPostList) {
|
String where, List<String> readPostList) {
|
||||||
@@ -136,7 +136,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
postLinkedHashSet = new LinkedHashSet<>();
|
postLinkedHashSet = new LinkedHashSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
PostPagingSource(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
PostPagingSource(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
String subredditOrUserName, String query, String trendingSource, int postType,
|
String subredditOrUserName, String query, String trendingSource, int postType,
|
||||||
SortType sortType, PostFilter postFilter, List<String> readPostList) {
|
SortType sortType, PostFilter postFilter, List<String> readPostList) {
|
||||||
@@ -165,17 +165,21 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ListenableFuture<LoadResult<Integer, Post>> loadFuture(@NonNull LoadParams<Integer> loadParams) {
|
public ListenableFuture<LoadResult<Integer, Post>> loadFuture(@NonNull LoadParams<Integer> loadParams) {
|
||||||
LemmyAPI api = retrofit.create(LemmyAPI.class);
|
LemmyAPI api = retrofit.getRetrofit().create(LemmyAPI.class);
|
||||||
switch (postType) {
|
switch (postType) {
|
||||||
default:
|
|
||||||
case TYPE_FRONT_PAGE:
|
case TYPE_FRONT_PAGE:
|
||||||
return loadHomePosts(loadParams, api);
|
return loadHomePosts(loadParams, api);
|
||||||
case TYPE_SUBREDDIT:
|
|
||||||
return loadSubredditPosts(loadParams, api);
|
|
||||||
case TYPE_USER:
|
case TYPE_USER:
|
||||||
return loadUserPosts(loadParams, api);
|
return loadUserPosts(loadParams, api);
|
||||||
case TYPE_SEARCH:
|
case TYPE_SEARCH:
|
||||||
return loadSearchPosts(loadParams, api);
|
return loadSearchPosts(loadParams, api);
|
||||||
|
case TYPE_SUBREDDIT:
|
||||||
|
return loadSubredditPosts(loadParams, api);
|
||||||
|
default:
|
||||||
|
case TYPE_ANONYMOUS_FRONT_PAGE:
|
||||||
|
// Return a dummy result
|
||||||
|
return Futures.immediateFuture(new LoadResult.Page<>(new ArrayList<>(), null, null));
|
||||||
/* case TYPE_MULTI_REDDIT:
|
/* case TYPE_MULTI_REDDIT:
|
||||||
return loadMultiRedditPosts(loadParams, api);
|
return loadMultiRedditPosts(loadParams, api);
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -21,14 +21,14 @@ import androidx.paging.PagingLiveData;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.SortType;
|
import eu.toldi.infinityforlemmy.SortType;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class PostViewModel extends ViewModel {
|
public class PostViewModel extends ViewModel {
|
||||||
private Executor executor;
|
private Executor executor;
|
||||||
private Retrofit retrofit;
|
private RetrofitHolder retrofit;
|
||||||
private String accessToken;
|
private String accessToken;
|
||||||
private String accountName;
|
private String accountName;
|
||||||
private SharedPreferences sharedPreferences;
|
private SharedPreferences sharedPreferences;
|
||||||
@@ -50,10 +50,10 @@ public class PostViewModel extends ViewModel {
|
|||||||
private MutableLiveData<PostFilter> postFilterLiveData;
|
private MutableLiveData<PostFilter> postFilterLiveData;
|
||||||
private SortTypeAndPostFilterLiveData sortTypeAndPostFilterLiveData;
|
private SortTypeAndPostFilterLiveData sortTypeAndPostFilterLiveData;
|
||||||
|
|
||||||
public PostViewModel(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
public PostViewModel(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
@Nullable SharedPreferences postHistorySharedPreferences, int postType,
|
@Nullable SharedPreferences postHistorySharedPreferences, int postType,
|
||||||
SortType sortType, PostFilter postFilter, List<String> readPostList,String option) {
|
SortType sortType, PostFilter postFilter, List<String> readPostList, String option) {
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
this.accessToken = accessToken;
|
this.accessToken = accessToken;
|
||||||
@@ -92,7 +92,7 @@ public class PostViewModel extends ViewModel {
|
|||||||
&& postHistorySharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
|
&& postHistorySharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PostViewModel(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
public PostViewModel(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
@Nullable SharedPreferences postHistorySharedPreferences, String subredditName, int postType,
|
@Nullable SharedPreferences postHistorySharedPreferences, String subredditName, int postType,
|
||||||
SortType sortType, PostFilter postFilter, List<String> readPostList) {
|
SortType sortType, PostFilter postFilter, List<String> readPostList) {
|
||||||
@@ -134,7 +134,7 @@ public class PostViewModel extends ViewModel {
|
|||||||
&& postHistorySharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
|
&& postHistorySharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PostViewModel(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
public PostViewModel(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences,
|
SharedPreferences sharedPreferences,
|
||||||
SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
@Nullable SharedPreferences postHistorySharedPreferences, String username,
|
@Nullable SharedPreferences postHistorySharedPreferences, String username,
|
||||||
@@ -179,7 +179,7 @@ public class PostViewModel extends ViewModel {
|
|||||||
&& postHistorySharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
|
&& postHistorySharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PostViewModel(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
public PostViewModel(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
@Nullable SharedPreferences postHistorySharedPreferences, String subredditName, String query,
|
@Nullable SharedPreferences postHistorySharedPreferences, String subredditName, String query,
|
||||||
String trendingSource, int postType, SortType sortType, PostFilter postFilter,
|
String trendingSource, int postType, SortType sortType, PostFilter postFilter,
|
||||||
@@ -277,7 +277,7 @@ public class PostViewModel extends ViewModel {
|
|||||||
|
|
||||||
public static class Factory extends ViewModelProvider.NewInstanceFactory {
|
public static class Factory extends ViewModelProvider.NewInstanceFactory {
|
||||||
private Executor executor;
|
private Executor executor;
|
||||||
private Retrofit retrofit;
|
private RetrofitHolder retrofit;
|
||||||
private String accessToken;
|
private String accessToken;
|
||||||
private String accountName;
|
private String accountName;
|
||||||
private SharedPreferences sharedPreferences;
|
private SharedPreferences sharedPreferences;
|
||||||
@@ -292,7 +292,7 @@ public class PostViewModel extends ViewModel {
|
|||||||
private String userWhere;
|
private String userWhere;
|
||||||
private List<String> readPostList;
|
private List<String> readPostList;
|
||||||
|
|
||||||
public Factory(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
public Factory(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
SharedPreferences postHistorySharedPreferences, int postType, SortType sortType,
|
SharedPreferences postHistorySharedPreferences, int postType, SortType sortType,
|
||||||
PostFilter postFilter, List<String> readPostList, String option) {
|
PostFilter postFilter, List<String> readPostList, String option) {
|
||||||
@@ -310,7 +310,7 @@ public class PostViewModel extends ViewModel {
|
|||||||
this.name = option;
|
this.name = option;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Factory(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
public Factory(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
SharedPreferences postHistorySharedPreferences, String name, int postType, SortType sortType,
|
SharedPreferences postHistorySharedPreferences, String name, int postType, SortType sortType,
|
||||||
PostFilter postFilter, List<String> readPostList) {
|
PostFilter postFilter, List<String> readPostList) {
|
||||||
@@ -329,7 +329,7 @@ public class PostViewModel extends ViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//User posts
|
//User posts
|
||||||
public Factory(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
public Factory(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
SharedPreferences postHistorySharedPreferences, String username, int postType,
|
SharedPreferences postHistorySharedPreferences, String username, int postType,
|
||||||
SortType sortType, PostFilter postFilter, String where, List<String> readPostList) {
|
SortType sortType, PostFilter postFilter, String where, List<String> readPostList) {
|
||||||
@@ -348,7 +348,7 @@ public class PostViewModel extends ViewModel {
|
|||||||
this.readPostList = readPostList;
|
this.readPostList = readPostList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Factory(Executor executor, Retrofit retrofit, String accessToken, String accountName,
|
public Factory(Executor executor, RetrofitHolder retrofit, String accessToken, String accountName,
|
||||||
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
SharedPreferences sharedPreferences, SharedPreferences postFeedScrolledPositionSharedPreferences,
|
||||||
SharedPreferences postHistorySharedPreferences, String name, String query, String trendingSource,
|
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) {
|
||||||
@@ -369,7 +369,7 @@ public class PostViewModel extends ViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Anonymous Front Page
|
//Anonymous Front Page
|
||||||
public Factory(Executor executor, Retrofit retrofit, SharedPreferences sharedPreferences,
|
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) {
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
|
|||||||
@@ -5,21 +5,17 @@ import android.os.Handler;
|
|||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.Flair;
|
import eu.toldi.infinityforlemmy.Flair;
|
||||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.dto.SubmitPostDTO;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.UploadImageUtils;
|
import eu.toldi.infinityforlemmy.utils.UploadImageUtils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
@@ -27,24 +23,24 @@ import retrofit2.Retrofit;
|
|||||||
|
|
||||||
public class SubmitPost {
|
public class SubmitPost {
|
||||||
public static void submitTextOrLinkPost(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken,
|
public static void submitTextOrLinkPost(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken,
|
||||||
String subredditName, String title, String content,
|
int communityId, String title, String body, String url,
|
||||||
Flair flair, boolean isSpoiler, boolean isNSFW,
|
Flair flair, boolean isSpoiler, boolean isNSFW,
|
||||||
boolean receivePostReplyNotifications, String kind,
|
boolean receivePostReplyNotifications, String kind,
|
||||||
SubmitPostListener submitPostListener) {
|
SubmitPostListener submitPostListener) {
|
||||||
submitPost(executor, handler, oauthRetrofit, accessToken, subredditName, title, content,
|
submitPost(executor, handler, oauthRetrofit, accessToken, communityId, title, body,
|
||||||
flair, isSpoiler, isNSFW, receivePostReplyNotifications, kind, null, submitPostListener);
|
isNSFW, receivePostReplyNotifications, kind, url, submitPostListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void submitImagePost(Executor executor, Handler handler, RetrofitHolder mRetrofit,
|
public static void submitImagePost(Executor executor, Handler handler, RetrofitHolder mRetrofit,
|
||||||
String accessToken, String subredditName, String title, Bitmap image,
|
String accessToken, int communityId, String title, String body, Bitmap image,
|
||||||
Flair flair, boolean isSpoiler, boolean isNSFW,
|
Flair flair, boolean isSpoiler, boolean isNSFW,
|
||||||
boolean receivePostReplyNotifications, SubmitPostListener submitPostListener) {
|
boolean receivePostReplyNotifications, SubmitPostListener submitPostListener) {
|
||||||
try {
|
try {
|
||||||
String imageUrlOrError = UploadImageUtils.uploadImage(mRetrofit, accessToken, image);
|
String imageUrlOrError = UploadImageUtils.uploadImage(mRetrofit, accessToken, image);
|
||||||
if (imageUrlOrError != null && !imageUrlOrError.startsWith("Error: ")) {
|
if (imageUrlOrError != null && !imageUrlOrError.startsWith("Error: ")) {
|
||||||
submitPost(executor, handler, mRetrofit.getRetrofit(), accessToken,
|
submitPost(executor, handler, mRetrofit.getRetrofit(), accessToken,
|
||||||
subredditName, title, imageUrlOrError, flair, isSpoiler, isNSFW,
|
communityId, title, body, isNSFW,
|
||||||
receivePostReplyNotifications, APIUtils.KIND_IMAGE, null, submitPostListener);
|
receivePostReplyNotifications, APIUtils.KIND_IMAGE, imageUrlOrError, submitPostListener);
|
||||||
} else {
|
} else {
|
||||||
submitPostListener.submitFailed(imageUrlOrError);
|
submitPostListener.submitFailed(imageUrlOrError);
|
||||||
}
|
}
|
||||||
@@ -55,57 +51,23 @@ public class SubmitPost {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void submitCrosspost(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken,
|
public static void submitCrosspost(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken,
|
||||||
String subredditName, String title, String crosspostFullname,
|
int communityId, String title, String crosspostFullname,
|
||||||
Flair flair, boolean isSpoiler, boolean isNSFW,
|
Flair flair, boolean isSpoiler, boolean isNSFW,
|
||||||
boolean receivePostReplyNotifications, String kind,
|
boolean receivePostReplyNotifications, String kind,
|
||||||
SubmitPostListener submitPostListener) {
|
SubmitPostListener submitPostListener) {
|
||||||
submitPost(executor, handler, oauthRetrofit, accessToken, subredditName, title, crosspostFullname,
|
submitPost(executor, handler, oauthRetrofit, accessToken, communityId, title, crosspostFullname,
|
||||||
flair, isSpoiler, isNSFW, receivePostReplyNotifications, kind, null, submitPostListener);
|
isNSFW, receivePostReplyNotifications, kind, null, submitPostListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void submitPost(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken,
|
private static void submitPost(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken,
|
||||||
String subredditName, String title, String content,
|
int communityId, String title, String content,
|
||||||
Flair flair, boolean isSpoiler, boolean isNSFW,
|
boolean isNSFW,
|
||||||
boolean receivePostReplyNotifications, String kind,
|
boolean receivePostReplyNotifications, String kind,
|
||||||
@Nullable String posterUrl, SubmitPostListener submitPostListener) {
|
@Nullable String posterUrl, SubmitPostListener submitPostListener) {
|
||||||
RedditAPI api = oauthRetrofit.create(RedditAPI.class);
|
LemmyAPI api = oauthRetrofit.create(LemmyAPI.class);
|
||||||
|
|
||||||
Map<String, String> params = new HashMap<>();
|
|
||||||
params.put(APIUtils.API_TYPE_KEY, APIUtils.API_TYPE_JSON);
|
|
||||||
params.put(APIUtils.SR_KEY, subredditName);
|
|
||||||
params.put(APIUtils.TITLE_KEY, title);
|
|
||||||
params.put(APIUtils.KIND_KEY, kind);
|
|
||||||
switch (kind) {
|
|
||||||
case APIUtils.KIND_SELF:
|
|
||||||
params.put(APIUtils.TEXT_KEY, content);
|
|
||||||
break;
|
|
||||||
case APIUtils.KIND_LINK:
|
|
||||||
case APIUtils.KIND_IMAGE:
|
|
||||||
params.put(APIUtils.URL_KEY, content);
|
|
||||||
break;
|
|
||||||
case APIUtils.KIND_VIDEOGIF:
|
|
||||||
params.put(APIUtils.KIND_KEY, APIUtils.KIND_IMAGE);
|
|
||||||
params.put(APIUtils.URL_KEY, content);
|
|
||||||
params.put(APIUtils.VIDEO_POSTER_URL_KEY, posterUrl);
|
|
||||||
break;
|
|
||||||
case APIUtils.KIND_VIDEO:
|
|
||||||
params.put(APIUtils.URL_KEY, content);
|
|
||||||
params.put(APIUtils.VIDEO_POSTER_URL_KEY, posterUrl);
|
|
||||||
break;
|
|
||||||
case APIUtils.KIND_CROSSPOST:
|
|
||||||
params.put(APIUtils.CROSSPOST_FULLNAME_KEY, content);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flair != null) {
|
Call<String> submitPostCall = api.postCreate(new SubmitPostDTO(title, communityId, posterUrl, content, null, isNSFW, null, accessToken));
|
||||||
params.put(APIUtils.FLAIR_TEXT_KEY, flair.getText());
|
|
||||||
params.put(APIUtils.FLAIR_ID_KEY, flair.getId());
|
|
||||||
}
|
|
||||||
params.put(APIUtils.SPOILER_KEY, Boolean.toString(isSpoiler));
|
|
||||||
params.put(APIUtils.NSFW_KEY, Boolean.toString(isNSFW));
|
|
||||||
params.put(APIUtils.SEND_REPLIES_KEY, Boolean.toString(receivePostReplyNotifications));
|
|
||||||
|
|
||||||
Call<String> submitPostCall = api.submit(APIUtils.getOAuthHeader(accessToken), params);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Response<String> response = submitPostCall.execute();
|
Response<String> response = submitPostCall.execute();
|
||||||
@@ -124,34 +86,8 @@ public class SubmitPost {
|
|||||||
private static void getSubmittedPost(Executor executor, Handler handler, String response, String kind,
|
private static void getSubmittedPost(Executor executor, Handler handler, String response, String kind,
|
||||||
Retrofit oauthRetrofit, String accessToken,
|
Retrofit oauthRetrofit, String accessToken,
|
||||||
SubmitPostListener submitPostListener) throws JSONException, IOException {
|
SubmitPostListener submitPostListener) throws JSONException, IOException {
|
||||||
JSONObject responseObject = new JSONObject(response).getJSONObject(JSONUtils.JSON_KEY);
|
|
||||||
if (responseObject.getJSONArray(JSONUtils.ERRORS_KEY).length() != 0) {
|
|
||||||
JSONArray error = responseObject.getJSONArray(JSONUtils.ERRORS_KEY)
|
|
||||||
.getJSONArray(responseObject.getJSONArray(JSONUtils.ERRORS_KEY).length() - 1);
|
|
||||||
if (error.length() != 0) {
|
|
||||||
String errorString;
|
|
||||||
if (error.length() >= 2) {
|
|
||||||
errorString = error.getString(1);
|
|
||||||
} else {
|
|
||||||
errorString = error.getString(0);
|
|
||||||
}
|
|
||||||
submitPostListener.submitFailed(errorString);
|
|
||||||
} else {
|
|
||||||
submitPostListener.submitFailed(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
ParsePost.parsePost(executor, handler, response, new ParsePost.ParsePostListener() {
|
||||||
}
|
|
||||||
|
|
||||||
if (!kind.equals(APIUtils.KIND_IMAGE) && !kind.equals(APIUtils.KIND_VIDEO) && !kind.equals(APIUtils.KIND_VIDEOGIF)) {
|
|
||||||
String postId = responseObject.getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.ID_KEY);
|
|
||||||
|
|
||||||
RedditAPI api = oauthRetrofit.create(RedditAPI.class);
|
|
||||||
|
|
||||||
Call<String> getPostCall = api.getPostOauth(postId, APIUtils.getOAuthHeader(accessToken));
|
|
||||||
Response<String> getPostCallResponse = getPostCall.execute();
|
|
||||||
if (getPostCallResponse.isSuccessful()) {
|
|
||||||
ParsePost.parsePost(executor, handler, getPostCallResponse.body(), new ParsePost.ParsePostListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void onParsePostSuccess(Post post) {
|
public void onParsePostSuccess(Post post) {
|
||||||
submitPostListener.submitSuccessful(post);
|
submitPostListener.submitSuccessful(post);
|
||||||
@@ -162,12 +98,6 @@ public class SubmitPost {
|
|||||||
submitPostListener.submitFailed(null);
|
submitPostListener.submitFailed(null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
submitPostListener.submitFailed(getPostCallResponse.message());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
submitPostListener.submitSuccessful(null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface SubmitPostListener {
|
public interface SubmitPostListener {
|
||||||
|
|||||||
@@ -35,12 +35,10 @@ import java.io.OutputStream;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.AnyAccountAccessTokenAuthenticator;
|
|
||||||
import eu.toldi.infinityforlemmy.Flair;
|
import eu.toldi.infinityforlemmy.Flair;
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
@@ -59,8 +57,6 @@ import eu.toldi.infinityforlemmy.post.SubmitPost;
|
|||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.NotificationUtils;
|
import eu.toldi.infinityforlemmy.utils.NotificationUtils;
|
||||||
import okhttp3.ConnectionPool;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
@@ -68,7 +64,9 @@ public class SubmitPostService extends Service {
|
|||||||
public static final String EXTRA_ACCOUNT = "EA";
|
public static final String EXTRA_ACCOUNT = "EA";
|
||||||
public static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
public static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
||||||
public static final String EXTRA_TITLE = "ET";
|
public static final String EXTRA_TITLE = "ET";
|
||||||
public static final String EXTRA_CONTENT = "EC";
|
public static final String EXTRA_BODY = "EC";
|
||||||
|
|
||||||
|
public static final String EXTRA_URL = "EU";
|
||||||
public static final String EXTRA_REDDIT_GALLERY_PAYLOAD = "ERGP";
|
public static final String EXTRA_REDDIT_GALLERY_PAYLOAD = "ERGP";
|
||||||
public static final String EXTRA_POLL_PAYLOAD = "EPP";
|
public static final String EXTRA_POLL_PAYLOAD = "EPP";
|
||||||
public static final String EXTRA_KIND = "EK";
|
public static final String EXTRA_KIND = "EK";
|
||||||
@@ -88,9 +86,7 @@ public class SubmitPostService extends Service {
|
|||||||
@Inject
|
@Inject
|
||||||
@Named("no_oauth")
|
@Named("no_oauth")
|
||||||
RetrofitHolder mRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
@Inject
|
|
||||||
@Named("oauth")
|
|
||||||
Retrofit mOauthRetrofit;
|
|
||||||
@Inject
|
@Inject
|
||||||
@Named("upload_media")
|
@Named("upload_media")
|
||||||
Retrofit mUploadMediaRetrofit;
|
Retrofit mUploadMediaRetrofit;
|
||||||
@@ -128,39 +124,32 @@ public class SubmitPostService extends Service {
|
|||||||
super.handleMessage(msg);
|
super.handleMessage(msg);
|
||||||
Bundle bundle = msg.getData();
|
Bundle bundle = msg.getData();
|
||||||
Account account = bundle.getParcelable(EXTRA_ACCOUNT);
|
Account account = bundle.getParcelable(EXTRA_ACCOUNT);
|
||||||
String subredditName = bundle.getString(EXTRA_SUBREDDIT_NAME);
|
int subredditName = bundle.getInt(EXTRA_SUBREDDIT_NAME);
|
||||||
String title = bundle.getString(EXTRA_TITLE);
|
String title = bundle.getString(EXTRA_TITLE);
|
||||||
Flair flair = bundle.getParcelable(EXTRA_FLAIR);
|
Flair flair = bundle.getParcelable(EXTRA_FLAIR);
|
||||||
boolean isSpoiler = bundle.getBoolean(EXTRA_IS_SPOILER, false);
|
boolean isSpoiler = bundle.getBoolean(EXTRA_IS_SPOILER, false);
|
||||||
boolean isNSFW = bundle.getBoolean(EXTRA_IS_NSFW, false);
|
boolean isNSFW = bundle.getBoolean(EXTRA_IS_NSFW, false);
|
||||||
boolean receivePostReplyNotifications = bundle.getBoolean(EXTRA_RECEIVE_POST_REPLY_NOTIFICATIONS, true);
|
boolean receivePostReplyNotifications = bundle.getBoolean(EXTRA_RECEIVE_POST_REPLY_NOTIFICATIONS, true);
|
||||||
int postType = bundle.getInt(EXTRA_POST_TYPE, EXTRA_POST_TEXT_OR_LINK);
|
int postType = bundle.getInt(EXTRA_POST_TYPE, EXTRA_POST_TEXT_OR_LINK);
|
||||||
|
String body = bundle.getString(EXTRA_BODY);
|
||||||
Retrofit newAuthenticatorOauthRetrofit = mOauthRetrofit.newBuilder().client(new OkHttpClient.Builder().authenticator(new AnyAccountAccessTokenAuthenticator(mRetrofit.getRetrofit(), mRedditDataRoomDatabase, account, mCurrentAccountSharedPreferences))
|
String url = bundle.getString(EXTRA_URL);
|
||||||
.connectTimeout(30, TimeUnit.SECONDS)
|
|
||||||
.readTimeout(30, TimeUnit.SECONDS)
|
|
||||||
.writeTimeout(30, TimeUnit.SECONDS)
|
|
||||||
.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
|
|
||||||
.build())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
if (postType == EXTRA_POST_TEXT_OR_LINK) {
|
if (postType == EXTRA_POST_TEXT_OR_LINK) {
|
||||||
String content = bundle.getString(EXTRA_CONTENT);
|
|
||||||
String kind = bundle.getString(EXTRA_KIND);
|
String kind = bundle.getString(EXTRA_KIND);
|
||||||
submitTextOrLinkPost(newAuthenticatorOauthRetrofit, account, subredditName, title, content, flair, isSpoiler, isNSFW,
|
submitTextOrLinkPost(mRetrofit.getRetrofit(), account, subredditName, title, body, url, flair, isSpoiler, isNSFW,
|
||||||
receivePostReplyNotifications, kind);
|
receivePostReplyNotifications, kind);
|
||||||
} else if (postType == EXTRA_POST_TYPE_CROSSPOST) {
|
} else if (postType == EXTRA_POST_TYPE_CROSSPOST) {
|
||||||
String content = bundle.getString(EXTRA_CONTENT);
|
submitCrosspost(mExecutor, handler, mRetrofit.getRetrofit(), account, subredditName, title, body,
|
||||||
submitCrosspost(mExecutor, handler, newAuthenticatorOauthRetrofit, account, subredditName, title, content,
|
|
||||||
flair, isSpoiler, isNSFW, receivePostReplyNotifications);
|
flair, isSpoiler, isNSFW, receivePostReplyNotifications);
|
||||||
} else if (postType == EXTRA_POST_TYPE_IMAGE) {
|
} else if (postType == EXTRA_POST_TYPE_IMAGE) {
|
||||||
Uri mediaUri = Uri.parse(bundle.getString(EXTRA_MEDIA_URI));
|
Uri mediaUri = Uri.parse(bundle.getString(EXTRA_MEDIA_URI));
|
||||||
submitImagePost(mRetrofit, account, mediaUri, subredditName, title, flair, isSpoiler, isNSFW,
|
submitImagePost(mRetrofit, account, mediaUri, subredditName, title, body, flair, isSpoiler, isNSFW,
|
||||||
receivePostReplyNotifications);
|
receivePostReplyNotifications);
|
||||||
} else if (postType == EXTRA_POST_TYPE_GALLERY) {
|
} else if (postType == EXTRA_POST_TYPE_GALLERY) {
|
||||||
submitGalleryPost(newAuthenticatorOauthRetrofit, account, bundle.getString(EXTRA_REDDIT_GALLERY_PAYLOAD));
|
submitGalleryPost(mRetrofit.getRetrofit(), account, bundle.getString(EXTRA_REDDIT_GALLERY_PAYLOAD));
|
||||||
} else {
|
} else {
|
||||||
submitPollPost(newAuthenticatorOauthRetrofit, account, bundle.getString(EXTRA_POLL_PAYLOAD));
|
submitPollPost(mRetrofit.getRetrofit(), account, bundle.getString(EXTRA_POLL_PAYLOAD));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -227,11 +216,11 @@ public class SubmitPostService extends Service {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void submitTextOrLinkPost(Retrofit newAuthenticatorOauthRetrofit, Account selectedAccount, String subredditName, String title, String content,
|
private void submitTextOrLinkPost(Retrofit newAuthenticatorOauthRetrofit, Account selectedAccount, int communityId, String title, String body, String url,
|
||||||
Flair flair, boolean isSpoiler, boolean isNSFW, boolean receivePostReplyNotifications,
|
Flair flair, boolean isSpoiler, boolean isNSFW, boolean receivePostReplyNotifications,
|
||||||
String kind) {
|
String kind) {
|
||||||
SubmitPost.submitTextOrLinkPost(mExecutor, handler, newAuthenticatorOauthRetrofit, selectedAccount.getAccessToken(),
|
SubmitPost.submitTextOrLinkPost(mExecutor, handler, newAuthenticatorOauthRetrofit, selectedAccount.getAccessToken(),
|
||||||
subredditName, title, content, flair, isSpoiler,
|
communityId, title, body, url, flair, isSpoiler,
|
||||||
isNSFW, receivePostReplyNotifications, kind, new SubmitPost.SubmitPostListener() {
|
isNSFW, receivePostReplyNotifications, kind, new SubmitPost.SubmitPostListener() {
|
||||||
@Override
|
@Override
|
||||||
public void submitSuccessful(Post post) {
|
public void submitSuccessful(Post post) {
|
||||||
@@ -250,10 +239,10 @@ public class SubmitPostService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void submitCrosspost(Executor executor, Handler handler, Retrofit newAuthenticatorOauthRetrofit,
|
private void submitCrosspost(Executor executor, Handler handler, Retrofit newAuthenticatorOauthRetrofit,
|
||||||
Account selectedAccount, String subredditName,
|
Account selectedAccount, int communityId,
|
||||||
String title, String content, Flair flair, boolean isSpoiler, boolean isNSFW,
|
String title, String content, Flair flair, boolean isSpoiler, boolean isNSFW,
|
||||||
boolean receivePostReplyNotifications) {
|
boolean receivePostReplyNotifications) {
|
||||||
SubmitPost.submitCrosspost(executor, handler, newAuthenticatorOauthRetrofit, selectedAccount.getAccessToken(), subredditName, title,
|
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,
|
||||||
new SubmitPost.SubmitPostListener() {
|
new SubmitPost.SubmitPostListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -272,17 +261,17 @@ public class SubmitPostService extends Service {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void submitImagePost(RetrofitHolder newAuthenticatorOauthRetrofit, Account selectedAccount, Uri mediaUri, String subredditName, String title,
|
private void submitImagePost(RetrofitHolder newAuthenticatorOauthRetrofit, Account selectedAccount, Uri mediaUri, int communityId, String title, String body,
|
||||||
Flair flair, boolean isSpoiler, boolean isNSFW, boolean receivePostReplyNotifications) {
|
Flair flair, boolean isSpoiler, boolean isNSFW, boolean receivePostReplyNotifications) {
|
||||||
try {
|
try {
|
||||||
Bitmap resource = Glide.with(this).asBitmap().load(mediaUri).submit().get();
|
Bitmap resource = Glide.with(this).asBitmap().load(mediaUri).submit().get();
|
||||||
SubmitPost.submitImagePost(mExecutor, handler, newAuthenticatorOauthRetrofit,
|
SubmitPost.submitImagePost(mExecutor, handler, newAuthenticatorOauthRetrofit,
|
||||||
selectedAccount.getAccessToken(), subredditName, title, resource, flair, isSpoiler, isNSFW, receivePostReplyNotifications,
|
selectedAccount.getAccessToken(), communityId, title, body, resource, flair, isSpoiler, isNSFW, receivePostReplyNotifications,
|
||||||
new SubmitPost.SubmitPostListener() {
|
new SubmitPost.SubmitPostListener() {
|
||||||
@Override
|
@Override
|
||||||
public void submitSuccessful(Post post) {
|
public void submitSuccessful(Post post) {
|
||||||
handler.post(() -> {
|
handler.post(() -> {
|
||||||
EventBus.getDefault().post(new SubmitImagePostEvent(true, null));
|
EventBus.getDefault().post(new SubmitImagePostEvent(true, null, post));
|
||||||
Toast.makeText(SubmitPostService.this, R.string.image_is_processing, Toast.LENGTH_SHORT).show();
|
Toast.makeText(SubmitPostService.this, R.string.image_is_processing, Toast.LENGTH_SHORT).show();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -291,14 +280,14 @@ public class SubmitPostService extends Service {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void submitFailed(@Nullable String errorMessage) {
|
public void submitFailed(@Nullable String errorMessage) {
|
||||||
handler.post(() -> EventBus.getDefault().post(new SubmitImagePostEvent(false, errorMessage)));
|
handler.post(() -> EventBus.getDefault().post(new SubmitImagePostEvent(false, errorMessage, null)));
|
||||||
|
|
||||||
stopService();
|
stopService();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (ExecutionException | InterruptedException e) {
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
handler.post(() -> EventBus.getDefault().post(new SubmitImagePostEvent(false, getString(R.string.error_processing_image))));
|
handler.post(() -> EventBus.getDefault().post(new SubmitImagePostEvent(false, getString(R.string.error_processing_image), null)));
|
||||||
stopService();
|
stopService();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user