mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-03-24 19:30:21 +01:00
Submitting posts to subreddit is available now. Fixed User's posts cannot be all loaded.
This commit is contained in:
parent
36d24523b6
commit
d8669c94e8
@ -19,7 +19,8 @@
|
|||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
android:usesCleartextTraffic="true">
|
android:usesCleartextTraffic="true">
|
||||||
<activity android:name=".SubscribedThingListingActivity"
|
<activity
|
||||||
|
android:name=".SubscribedThingListingActivity"
|
||||||
android:label="@string/subscriptions"
|
android:label="@string/subscriptions"
|
||||||
android:parentActivityName=".MainActivity"
|
android:parentActivityName=".MainActivity"
|
||||||
android:theme="@style/AppTheme.NoActionBar" />
|
android:theme="@style/AppTheme.NoActionBar" />
|
||||||
@ -30,7 +31,8 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".PostTextActivity"
|
android:name=".PostTextActivity"
|
||||||
android:label="@string/post_text_activity_label"
|
android:label="@string/post_text_activity_label"
|
||||||
android:parentActivityName=".MainActivity" />
|
android:parentActivityName=".MainActivity"
|
||||||
|
android:windowSoftInputMode="adjustResize" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".CommentActivity"
|
android:name=".CommentActivity"
|
||||||
android:label="@string/comment_activity_label"
|
android:label="@string/comment_activity_label"
|
||||||
|
@ -17,4 +17,5 @@ interface AppComponent {
|
|||||||
void inject(ViewUserDetailActivity viewUserDetailActivity);
|
void inject(ViewUserDetailActivity viewUserDetailActivity);
|
||||||
void inject(CommentActivity commentActivity);
|
void inject(CommentActivity commentActivity);
|
||||||
void inject(SubscribedThingListingActivity subscribedThingListingActivity);
|
void inject(SubscribedThingListingActivity subscribedThingListingActivity);
|
||||||
|
void inject(PostTextActivity postTextActivity);
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,9 @@ public class CommentActivity extends AppCompatActivity {
|
|||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,4 +70,5 @@ public class JSONUtils {
|
|||||||
static final String JSON_KEY = "json";
|
static final String JSON_KEY = "json";
|
||||||
static final String THINGS_KEY = "things";
|
static final String THINGS_KEY = "things";
|
||||||
static final String PARENT_ID_KEY = "parent_id";
|
static final String PARENT_ID_KEY = "parent_id";
|
||||||
|
static final String ERRORS_KEY = "errors";
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,13 @@ package ml.docilealligator.infinityforreddit;
|
|||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
import androidx.paging.PageKeyedDataSource;
|
import androidx.paging.PageKeyedDataSource;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
@ -114,7 +115,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
loadSubredditPostsAfter(params, callback);
|
loadSubredditPostsAfter(params, callback);
|
||||||
break;
|
break;
|
||||||
case TYPE_USER:
|
case TYPE_USER:
|
||||||
loadUserPostsAfter(params, callback);
|
loadUserPostsAfter(params, callback, null);
|
||||||
break;
|
break;
|
||||||
case TYPE_SEARCH:
|
case TYPE_SEARCH:
|
||||||
loadSearchPostsAfter(params, callback);
|
loadSearchPostsAfter(params, callback);
|
||||||
@ -157,8 +158,8 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Call<String> call, Throwable t) {
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
String errorMessage = t == null ? "unknown error" : t.getMessage();
|
String errorMessage = t.getMessage();
|
||||||
initialLoadStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
initialLoadStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -170,7 +171,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
|
|
||||||
bestPost.enqueue(new Callback<String>() {
|
bestPost.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call<String> call, retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
if(response.isSuccessful()) {
|
if(response.isSuccessful()) {
|
||||||
ParsePost.parsePosts(response.body(), locale, new ParsePost.ParsePostsListingListener() {
|
ParsePost.parsePosts(response.body(), locale, new ParsePost.ParsePostsListingListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -192,8 +193,8 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Call<String> call, Throwable t) {
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
String errorMessage = t == null ? "unknown error" : t.getMessage();
|
String errorMessage = t.getMessage();
|
||||||
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -204,7 +205,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
Call<String> getPost = api.getSubredditBestPosts(name, null, RedditUtils.getOAuthHeader(accessToken));
|
Call<String> getPost = api.getSubredditBestPosts(name, null, RedditUtils.getOAuthHeader(accessToken));
|
||||||
getPost.enqueue(new Callback<String>() {
|
getPost.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call<String> call, retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
if(response.isSuccessful()) {
|
if(response.isSuccessful()) {
|
||||||
ParsePost.parsePosts(response.body(), locale,
|
ParsePost.parsePosts(response.body(), locale,
|
||||||
new ParsePost.ParsePostsListingListener() {
|
new ParsePost.ParsePostsListingListener() {
|
||||||
@ -233,8 +234,8 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Call<String> call, Throwable t) {
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
String errorMessage = t == null ? "unknown error" : t.getMessage();
|
String errorMessage = t.getMessage();
|
||||||
initialLoadStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
initialLoadStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -245,7 +246,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
Call<String> getPost = api.getSubredditBestPosts(name, params.key, RedditUtils.getOAuthHeader(accessToken));
|
Call<String> getPost = api.getSubredditBestPosts(name, params.key, RedditUtils.getOAuthHeader(accessToken));
|
||||||
getPost.enqueue(new Callback<String>() {
|
getPost.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call<String> call, retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
if(response.isSuccessful()) {
|
if(response.isSuccessful()) {
|
||||||
ParsePost.parsePosts(response.body(), locale, new ParsePost.ParsePostsListingListener() {
|
ParsePost.parsePosts(response.body(), locale, new ParsePost.ParsePostsListingListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -267,8 +268,8 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Call<String> call, Throwable t) {
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
String errorMessage = t == null ? "unknown error" : t.getMessage();
|
String errorMessage = t.getMessage();
|
||||||
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -279,7 +280,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
Call<String> getPost = api.getUserBestPosts(name, lastItem, RedditUtils.getOAuthHeader(accessToken));
|
Call<String> getPost = api.getUserBestPosts(name, lastItem, RedditUtils.getOAuthHeader(accessToken));
|
||||||
getPost.enqueue(new Callback<String>() {
|
getPost.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call<String> call, retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
if(response.isSuccessful()) {
|
if(response.isSuccessful()) {
|
||||||
ParsePost.parsePosts(response.body(), locale,
|
ParsePost.parsePosts(response.body(), locale,
|
||||||
new ParsePost.ParsePostsListingListener() {
|
new ParsePost.ParsePostsListingListener() {
|
||||||
@ -311,42 +312,48 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Call<String> call, Throwable t) {
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
String errorMessage = t == null ? "unknown error" : t.getMessage();
|
String errorMessage = t.getMessage();
|
||||||
initialLoadStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
initialLoadStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadUserPostsAfter(@NonNull LoadParams<String> params, @NonNull final LoadCallback<String, Post> callback) {
|
private void loadUserPostsAfter(@NonNull LoadParams<String> params, @NonNull final LoadCallback<String, Post> callback, String lastItem) {
|
||||||
|
String after = lastItem == null ? params.key : lastItem;
|
||||||
|
|
||||||
RedditAPI api = retrofit.create(RedditAPI.class);
|
RedditAPI api = retrofit.create(RedditAPI.class);
|
||||||
Call<String> getPost = api.getUserBestPosts(name, params.key, RedditUtils.getOAuthHeader(accessToken));
|
Call<String> getPost = api.getUserBestPosts(name, after, RedditUtils.getOAuthHeader(accessToken));
|
||||||
getPost.enqueue(new Callback<String>() {
|
getPost.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call<String> call, retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
if(response.isSuccessful()) {
|
if(response.isSuccessful()) {
|
||||||
ParsePost.parsePosts(response.body(), locale, new ParsePost.ParsePostsListingListener() {
|
ParsePost.parsePosts(response.body(), locale, new ParsePost.ParsePostsListingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
|
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
|
||||||
callback.onResult(newPosts, lastItem);
|
if(newPosts.size() == 0 && !lastItem.equals("null")) {
|
||||||
paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
|
loadUserPostsAfter(params, callback, lastItem);
|
||||||
|
} else {
|
||||||
|
callback.onResult(newPosts, lastItem);
|
||||||
|
paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onParsePostsListingFail() {
|
public void onParsePostsListingFail() {
|
||||||
Log.i("Best post", "Error parsing data");
|
Log.i("User posts", "Error parsing data");
|
||||||
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing data"));
|
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing data"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
Log.i("Best post", response.message());
|
Log.i("User posts", response.message());
|
||||||
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message()));
|
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Call<String> call, Throwable t) {
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
String errorMessage = t == null ? "unknown error" : t.getMessage();
|
String errorMessage = t.getMessage();
|
||||||
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -357,7 +364,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
Call<String> getPost = api.searchPosts(name, null, RedditUtils.getOAuthHeader(accessToken));
|
Call<String> getPost = api.searchPosts(name, null, RedditUtils.getOAuthHeader(accessToken));
|
||||||
getPost.enqueue(new Callback<String>() {
|
getPost.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call<String> call, retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
if(response.isSuccessful()) {
|
if(response.isSuccessful()) {
|
||||||
ParsePost.parsePosts(response.body(), locale,
|
ParsePost.parsePosts(response.body(), locale,
|
||||||
new ParsePost.ParsePostsListingListener() {
|
new ParsePost.ParsePostsListingListener() {
|
||||||
@ -386,8 +393,8 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Call<String> call, Throwable t) {
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
String errorMessage = t == null ? "unknown error" : t.getMessage();
|
String errorMessage = t.getMessage();
|
||||||
initialLoadStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
initialLoadStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -398,7 +405,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
Call<String> getPost = api.searchPosts(name, params.key, RedditUtils.getOAuthHeader(accessToken));
|
Call<String> getPost = api.searchPosts(name, params.key, RedditUtils.getOAuthHeader(accessToken));
|
||||||
getPost.enqueue(new Callback<String>() {
|
getPost.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call<String> call, retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
if(response.isSuccessful()) {
|
if(response.isSuccessful()) {
|
||||||
ParsePost.parsePosts(response.body(), locale, new ParsePost.ParsePostsListingListener() {
|
ParsePost.parsePosts(response.body(), locale, new ParsePost.ParsePostsListingListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -409,19 +416,19 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onParsePostsListingFail() {
|
public void onParsePostsListingFail() {
|
||||||
Log.i("Best post", "Error parsing data");
|
Log.i("Search post", "Error parsing data");
|
||||||
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing data"));
|
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing data"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
Log.i("Best post", response.message());
|
Log.i("Search post", response.message());
|
||||||
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message()));
|
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Call<String> call, Throwable t) {
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
String errorMessage = t == null ? "unknown error" : t.getMessage();
|
String errorMessage = t.getMessage();
|
||||||
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, errorMessage));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -145,7 +145,6 @@ class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView.ViewHo
|
|||||||
canStartActivity = false;
|
canStartActivity = false;
|
||||||
|
|
||||||
Intent intent = new Intent(mContext, ViewPostDetailActivity.class);
|
Intent intent = new Intent(mContext, ViewPostDetailActivity.class);
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_TITLE, title);
|
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, post);
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, post);
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_LIST_POSITION, position);
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_LIST_POSITION, position);
|
||||||
mContext.startActivity(intent);
|
mContext.startActivity(intent);
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package ml.docilealligator.infinityforreddit;
|
package ml.docilealligator.infinityforreddit;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
@ -12,15 +14,23 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.RequestManager;
|
import com.bumptech.glide.RequestManager;
|
||||||
import com.bumptech.glide.request.RequestOptions;
|
import com.bumptech.glide.request.RequestOptions;
|
||||||
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
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;
|
||||||
|
|
||||||
public class PostTextActivity extends AppCompatActivity {
|
public class PostTextActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@ -28,6 +38,7 @@ public class PostTextActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||||
|
|
||||||
|
@BindView(R.id.coordinator_layout_post_detail_activity) CoordinatorLayout coordinatorLayout;
|
||||||
@BindView(R.id.subreddit_icon_gif_image_view_post_text_activity) GifImageView iconGifImageView;
|
@BindView(R.id.subreddit_icon_gif_image_view_post_text_activity) GifImageView iconGifImageView;
|
||||||
@BindView(R.id.subreddit_name_text_view_post_text_activity) TextView subreditNameTextView;
|
@BindView(R.id.subreddit_name_text_view_post_text_activity) TextView subreditNameTextView;
|
||||||
@BindView(R.id.rules_button_post_text_activity) Button rulesButton;
|
@BindView(R.id.rules_button_post_text_activity) Button rulesButton;
|
||||||
@ -35,6 +46,15 @@ public class PostTextActivity extends AppCompatActivity {
|
|||||||
@BindView(R.id.post_text_content_edit_text_post_text_activity) EditText contentEditText;
|
@BindView(R.id.post_text_content_edit_text_post_text_activity) EditText contentEditText;
|
||||||
|
|
||||||
private RequestManager mGlide;
|
private RequestManager mGlide;
|
||||||
|
private Locale mLocale;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named("oauth")
|
||||||
|
Retrofit mOauthRetrofit;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named("auth_info")
|
||||||
|
SharedPreferences sharedPreferences;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -43,11 +63,14 @@ public class PostTextActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
((Infinity) getApplication()).getmAppComponent().inject(this);
|
||||||
|
|
||||||
ActionBar actionBar = getSupportActionBar();
|
ActionBar actionBar = getSupportActionBar();
|
||||||
Drawable upArrow = getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp);
|
Drawable upArrow = getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp);
|
||||||
actionBar.setHomeAsUpIndicator(upArrow);
|
actionBar.setHomeAsUpIndicator(upArrow);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(this);
|
||||||
|
mLocale = getResources().getConfiguration().locale;
|
||||||
|
|
||||||
if(getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
if(getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||||
subreditNameTextView.setText(getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME));
|
subreditNameTextView.setText(getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME));
|
||||||
@ -63,12 +86,44 @@ public class PostTextActivity extends AppCompatActivity {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.post_text_activity, menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
finish();
|
finish();
|
||||||
return true;
|
return true;
|
||||||
|
case R.id.action_send_post_text_activity:
|
||||||
|
item.setEnabled(false);
|
||||||
|
item.getIcon().setAlpha(130);
|
||||||
|
Snackbar postingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||||
|
postingSnackbar.show();
|
||||||
|
|
||||||
|
SubmitPost.submitPostText(mOauthRetrofit, sharedPreferences, mLocale, subreditNameTextView.getText().toString(),
|
||||||
|
titleEditText.getText().toString(), contentEditText.getText().toString(),
|
||||||
|
false, new SubmitPost.SubmitPostListener() {
|
||||||
|
@Override
|
||||||
|
public void submitSuccessful(Post post) {
|
||||||
|
Intent intent = new Intent(PostTextActivity.this, ViewPostDetailActivity.class);
|
||||||
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, post);
|
||||||
|
startActivity(intent);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void submitFailed() {
|
||||||
|
postingSnackbar.dismiss();
|
||||||
|
item.setEnabled(true);
|
||||||
|
item.getIcon().setAlpha(255);
|
||||||
|
Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -78,4 +78,8 @@ public interface RedditAPI {
|
|||||||
@FormUrlEncoded
|
@FormUrlEncoded
|
||||||
@POST("/api/del")
|
@POST("/api/del")
|
||||||
Call<String> delete(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params);
|
Call<String> delete(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params);
|
||||||
|
|
||||||
|
@FormUrlEncoded
|
||||||
|
@POST("/api/submit")
|
||||||
|
Call<String> submit(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params);
|
||||||
}
|
}
|
||||||
|
@ -49,10 +49,18 @@ public class RedditUtils {
|
|||||||
static final String SR_NAME_KEY = "sr_name";
|
static final String SR_NAME_KEY = "sr_name";
|
||||||
|
|
||||||
static final String API_TYPE_KEY = "api_type";
|
static final String API_TYPE_KEY = "api_type";
|
||||||
|
static final String API_TYPE_JSON = "json";
|
||||||
static final String RETURN_RTJSON_KEY = "return_rtjson";
|
static final String RETURN_RTJSON_KEY = "return_rtjson";
|
||||||
static final String TEXT_KEY = "text";
|
static final String TEXT_KEY = "text";
|
||||||
static final String THING_ID_KEY = "thing_id";
|
static final String THING_ID_KEY = "thing_id";
|
||||||
|
|
||||||
|
static final String SR_KEY = "sr";
|
||||||
|
static final String TITLE_KEY = "title";
|
||||||
|
static final String NSFW_KEY = "nsfw";
|
||||||
|
static final String KIND_KEY = "kind";
|
||||||
|
static final String KIND_TEXT = "text";
|
||||||
|
static final String KIND_SELF = "self";
|
||||||
|
|
||||||
static Map<String, String> getHttpBasicAuthHeader() {
|
static Map<String, String> getHttpBasicAuthHeader() {
|
||||||
Map<String, String> params = new HashMap<>();
|
Map<String, String> params = new HashMap<>();
|
||||||
String credentials = String.format("%s:%s", RedditUtils.CLIENT_ID, "");
|
String credentials = String.format("%s:%s", RedditUtils.CLIENT_ID, "");
|
||||||
|
@ -0,0 +1,109 @@
|
|||||||
|
package ml.docilealligator.infinityforreddit;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
|
class SubmitPost {
|
||||||
|
interface SubmitPostListener {
|
||||||
|
void submitSuccessful(Post post);
|
||||||
|
void submitFailed();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void submitPostText(Retrofit oauthRetrofit, SharedPreferences authInfoSharedPreferences,
|
||||||
|
Locale locale, String subredditName, String title, String text, boolean isNSFW,
|
||||||
|
SubmitPostListener submitPostListener) {
|
||||||
|
RedditAPI api = oauthRetrofit.create(RedditAPI.class);
|
||||||
|
String accessToken = authInfoSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
|
||||||
|
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
params.put(RedditUtils.API_TYPE_KEY, RedditUtils.API_TYPE_JSON);
|
||||||
|
params.put(RedditUtils.SR_KEY, subredditName);
|
||||||
|
params.put(RedditUtils.TITLE_KEY, title);
|
||||||
|
params.put(RedditUtils.KIND_KEY, RedditUtils.KIND_TEXT);
|
||||||
|
params.put(RedditUtils.TEXT_KEY, text);
|
||||||
|
params.put(RedditUtils.NSFW_KEY, Boolean.toString(isNSFW));
|
||||||
|
|
||||||
|
Call<String> submitPostCall = api.submit(RedditUtils.getOAuthHeader(accessToken), params);
|
||||||
|
submitPostCall.enqueue(new Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
|
Log.i("code", "asfd" + response.body());
|
||||||
|
if(response.isSuccessful()) {
|
||||||
|
try {
|
||||||
|
getSubmittedPost(response.body(), oauthRetrofit, authInfoSharedPreferences, locale,
|
||||||
|
submitPostListener);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
submitPostListener.submitFailed();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Log.i("call_failed", response.message());
|
||||||
|
submitPostListener.submitFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
|
Log.i("call_failed", call.request().url().toString());
|
||||||
|
submitPostListener.submitFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void getSubmittedPost(String response, Retrofit oauthRetrofit,
|
||||||
|
SharedPreferences authInfoSharedPreferences, Locale locale,
|
||||||
|
SubmitPostListener submitPostListener) throws JSONException {
|
||||||
|
JSONObject responseObject = new JSONObject(response);
|
||||||
|
if(responseObject.getJSONObject(JSONUtils.JSON_KEY).getJSONArray(JSONUtils.ERRORS_KEY).length() != 0) {
|
||||||
|
submitPostListener.submitFailed();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String postId = responseObject.getJSONObject(JSONUtils.JSON_KEY).getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.ID_KEY);
|
||||||
|
|
||||||
|
RedditAPI api = oauthRetrofit.create(RedditAPI.class);
|
||||||
|
String accessToken = authInfoSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
|
||||||
|
|
||||||
|
Call<String> getPostCall = api.getPost(postId, RedditUtils.getOAuthHeader(accessToken));
|
||||||
|
getPostCall.enqueue(new Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
|
if(response.isSuccessful()) {
|
||||||
|
ParsePost.parsePost(response.body(), locale, new ParsePost.ParsePostListener() {
|
||||||
|
@Override
|
||||||
|
public void onParsePostSuccess(Post post) {
|
||||||
|
submitPostListener.submitSuccessful(post);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onParsePostFail() {
|
||||||
|
submitPostListener.submitFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Log.i("call_failed", response.message());
|
||||||
|
submitPostListener.submitFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
|
Log.i("call_failed", call.request().url().toString());
|
||||||
|
submitPostListener.submitFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -33,7 +33,7 @@ public class SubredditSelectionActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
|
SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putInt(PostFragment.POST_TYPE_KEY, PostDataSource.TYPE_FRONT_PAGE);
|
bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, true);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_subreddit_selection_activity, fragment).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_subreddit_selection_activity, fragment).commit();
|
||||||
}
|
}
|
||||||
|
@ -60,11 +60,9 @@ public class SubscribedSubredditsListingFragment extends Fragment {
|
|||||||
|
|
||||||
SubscribedSubredditsRecyclerViewAdapter adapter;
|
SubscribedSubredditsRecyclerViewAdapter adapter;
|
||||||
if(getArguments().getBoolean(EXTRA_IS_SUBREDDIT_SELECTION)) {
|
if(getArguments().getBoolean(EXTRA_IS_SUBREDDIT_SELECTION)) {
|
||||||
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity);
|
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, (name, iconUrl) -> ((SubredditSelectionActivity) mActivity).getSelectedSubreddit(name, iconUrl));
|
||||||
} else {
|
} else {
|
||||||
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, (name, iconUrl) -> {
|
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity);
|
||||||
((SubredditSelectionActivity) mActivity).getSelectedSubreddit(name, iconUrl);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,7 +129,11 @@ public class SubscribedThingListingActivity extends AppCompatActivity {
|
|||||||
public Fragment getItem(int position) {
|
public Fragment getItem(int position) {
|
||||||
switch (position) {
|
switch (position) {
|
||||||
case 0: {
|
case 0: {
|
||||||
return new SubscribedSubredditsListingFragment();
|
SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, false);
|
||||||
|
fragment.setArguments(bundle);
|
||||||
|
return fragment;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
@ -38,7 +38,6 @@ import static ml.docilealligator.infinityforreddit.CommentActivity.WRITE_COMMENT
|
|||||||
|
|
||||||
public class ViewPostDetailActivity extends AppCompatActivity {
|
public class ViewPostDetailActivity extends AppCompatActivity {
|
||||||
|
|
||||||
static final String EXTRA_TITLE = "ET";
|
|
||||||
static final String EXTRA_POST_DATA = "EPD";
|
static final String EXTRA_POST_DATA = "EPD";
|
||||||
static final String EXTRA_POST_LIST_POSITION = "EPLI";
|
static final String EXTRA_POST_LIST_POSITION = "EPLI";
|
||||||
|
|
||||||
@ -185,38 +184,6 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*mCommentProgressbar.setVisibility(View.GONE);
|
|
||||||
|
|
||||||
if (expandedComments.size() > 0) {
|
|
||||||
if(mAdapter == null) {
|
|
||||||
mNestedScrollView.getViewTreeObserver().addOnScrollChangedListener(() -> {
|
|
||||||
if(!isLoadingMoreChildren) {
|
|
||||||
View view = mNestedScrollView.getChildAt(mNestedScrollView.getChildCount() - 1);
|
|
||||||
int diff = view.getBottom() - (mNestedScrollView.getHeight() +
|
|
||||||
mNestedScrollView.getScrollY());
|
|
||||||
if(diff == 0) {
|
|
||||||
fetchMoreComments(mChildrenStartingIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
mAdapter = new CommentRecyclerViewAdapter(ViewPostDetailActivity.this, mRetrofit,
|
|
||||||
mOauthRetrofit, mGlide, mSharedPreferences, mPost,
|
|
||||||
mPost.getSubredditNamePrefixed(), mLocale, new CommentRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
|
|
||||||
@Override
|
|
||||||
public void updatePost(Post post) {
|
|
||||||
EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
mRecyclerView.setAdapter(mAdapter);
|
|
||||||
|
|
||||||
//mCommentCardView.setVisibility(View.VISIBLE);
|
|
||||||
} else {
|
|
||||||
mNoCommentWrapperLinearLayout.setVisibility(View.VISIBLE);
|
|
||||||
mGlide.load(R.drawable.no_comment_placeholder).into(mNoCommentImageView);
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:id="@+id/coordinator_layout_post_detail_activity"
|
||||||
tools:context=".PostTextActivity">
|
tools:context=".PostTextActivity">
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
|
10
app/src/main/res/menu/post_text_activity.xml
Normal file
10
app/src/main/res/menu/post_text_activity.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_send_post_text_activity"
|
||||||
|
android:orderInCategory="1"
|
||||||
|
android:title="@string/action_send"
|
||||||
|
android:icon="@drawable/ic_send_white_24dp"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
</menu>
|
@ -80,6 +80,9 @@
|
|||||||
<string name="send_comment_failed">Could not send this comment</string>
|
<string name="send_comment_failed">Could not send this comment</string>
|
||||||
<string name="parse_sent_comment_failed">The comment is sent but unable to get the sent comment</string>
|
<string name="parse_sent_comment_failed">The comment is sent but unable to get the sent comment</string>
|
||||||
|
|
||||||
|
<string name="posting">Posting</string>
|
||||||
|
<string name="post_failed">Could not post it</string>
|
||||||
|
|
||||||
<string name="download_completed">Download completed</string>
|
<string name="download_completed">Download completed</string>
|
||||||
<string name="download_failed">Download Failed</string>
|
<string name="download_failed">Download Failed</string>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user