From 72d811186f09aea6a6be93b5e4cf1d35083d2462 Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Fri, 14 Jun 2019 11:58:52 +0800 Subject: [PATCH] Show a snackbar when sending comment and sending comment fails. Display the sent comment data after the comment is sent. --- .idea/caches/build_file_checksums.ser | Bin 533 -> 533 bytes .idea/caches/gradle_models.ser | Bin 256763 -> 253985 bytes app/build.gradle | 3 +- .../infinityforreddit/CommentActivity.java | 37 ++++-- .../infinityforreddit/MainActivity.java | 2 +- .../infinityforreddit/ParseComment.java | 122 +++++++++++++----- .../infinityforreddit/SendComment.java | 24 +++- .../ViewPostDetailActivity.java | 16 ++- app/src/main/res/values/strings.xml | 2 + 9 files changed, 151 insertions(+), 55 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index dc95a9fb09f30d11b9b5291e11aaf2f899446131..2c42422d0e3f3efb4de708479f7171da6ecfbe8f 100644 GIT binary patch delta 32 ocmbQrGL>b*Oy=AFg*VR0U=-Z_HLogXOMyUwyI-GXNhwbS0OgGhWB>pF delta 32 ocmbQrGL>b*Oy&jlJ{#v`FbcldrzK*y$L-_c*t=;a&RdNt0M(BTp8x;= diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index d1f24b062e0314d3002959729355d176fd3daf8a..a44d1840619584b1a3f5ddf39adcb62d3bc4ca4e 100644 GIT binary patch delta 14238 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 delta 15543 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 diff --git a/app/build.gradle b/app/build.gradle index a66bf321..4a6323e5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ dependencies { implementation 'androidx.browser:browser:1.0.0' implementation 'com.alexvasilkov:gesture-views:2.5.2' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'com.github.bumptech.glide:glide:4.8.0' + implementation 'com.github.bumptech.glide:glide:4.9.0' implementation 'com.github.pwittchen:swipe-rx2:0.3.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0' // Room components @@ -75,5 +75,4 @@ dependencies { implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.16' implementation 'com.github.Ferfalk:SimpleSearchView:0.1.3' implementation 'org.greenrobot:eventbus:3.1.1' - implementation 'jp.wasabeef:richeditor-android:1.2.2' } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentActivity.java index 8f4a6958..bc2697da 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/CommentActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/CommentActivity.java @@ -24,9 +24,10 @@ import retrofit2.Retrofit; public class CommentActivity extends AppCompatActivity { - static final String COMMENT_PARENT_TEXT = "CPT"; - static final String PARENT_FULLNAME = "PF"; - static final String EXTRA_COMMENT_DATA = "ECD"; + static final String EXTRA_COMMENT_PARENT_TEXT_KEY = "ECPTK"; + static final String EXTRA_PARENT_FULLNAME_KEY = "EPFK"; + static final String EXTRA_COMMENT_DATA_KEY = "ECDK"; + static final String EXTRA_PARENT_DEPTH_KEY = "EPDK"; static final int WRITE_COMMENT_REQUEST_CODE = 1; @BindView(R.id.coordinator_layout_comment_activity) CoordinatorLayout coordinatorLayout; @@ -35,6 +36,7 @@ public class CommentActivity extends AppCompatActivity { @BindView(R.id.comment_edit_text_comment_activity) EditText commentEditText; private String parentFullname; + private int parentDepth; @Inject @Named("oauth") @@ -55,8 +57,10 @@ public class CommentActivity extends AppCompatActivity { setSupportActionBar(toolbar); - commentParentTextView.setText(getIntent().getExtras().getString(COMMENT_PARENT_TEXT)); - parentFullname = getIntent().getExtras().getString(PARENT_FULLNAME); + Intent intent = getIntent(); + commentParentTextView.setText(intent.getExtras().getString(EXTRA_COMMENT_PARENT_TEXT_KEY)); + parentFullname = intent.getExtras().getString(EXTRA_PARENT_FULLNAME_KEY); + parentDepth = intent.getExtras().getInt(EXTRA_PARENT_DEPTH_KEY); } @Override @@ -72,22 +76,37 @@ public class CommentActivity extends AppCompatActivity { finish(); return true; case R.id.action_send_comment_activity: - CommentData commentData = null; - SendComment.sendComment(commentEditText.getText().toString(), parentFullname, mOauthRetrofit, + item.setEnabled(false); + item.getIcon().setAlpha(130); + Snackbar sendingSnackbar = Snackbar.make(coordinatorLayout, R.string.sending_comment, Snackbar.LENGTH_INDEFINITE); + sendingSnackbar.show(); + + SendComment.sendComment(commentEditText.getText().toString(), parentFullname, parentDepth, + getResources().getConfiguration().locale, mOauthRetrofit, sharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, ""), new SendComment.SendCommentListener() { @Override - public void sendCommentSuccess() { + public void sendCommentSuccess(CommentData commentData) { Intent returnIntent = new Intent(); - returnIntent.putExtra(EXTRA_COMMENT_DATA, commentData); + returnIntent.putExtra(EXTRA_COMMENT_DATA_KEY, commentData); setResult(RESULT_OK, returnIntent); finish(); } @Override public void sendCommentFailed() { + sendingSnackbar.dismiss(); + item.setEnabled(true); + item.getIcon().setAlpha(255); Snackbar.make(coordinatorLayout, R.string.send_comment_failed, Snackbar.LENGTH_SHORT).show(); } + + @Override + public void parseSentCommentFailed() { + Intent returnIntent = new Intent(); + setResult(RESULT_OK, returnIntent); + finish(); + } }); } return super.onOptionsItemSelected(item); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java index 57f44cc3..a099960b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java @@ -387,7 +387,7 @@ public class MainActivity extends AppCompatActivity { mInsertSuccess = false; loadUserData();*/ Intent intent = new Intent(this, CommentActivity.class); - intent.putExtra(CommentActivity.EXTRA_COMMENT_DATA, "asdfasdfas"); + intent.putExtra(CommentActivity.EXTRA_COMMENT_DATA_KEY, "asdfasdfas"); startActivity(intent); return true; case R.id.action_lazy_mode_main_activity: diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseComment.java index 78bc2581..fba61483 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseComment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseComment.java @@ -24,6 +24,11 @@ class ParseComment { void onParseMoreCommentBasicInfoFailed(); } + interface ParseSentCommentListener { + void onParseSentCommentSuccess(CommentData commentData); + void onParseSentCommentFailed(); + } + static void parseComment(String response, ArrayList commentData, Locale locale, boolean isPost, int parentDepth, ParseCommentListener parseCommentListener) { try { @@ -39,7 +44,9 @@ class ParseComment { new ParseCommentAsyncTask(childrenArray, commentData, locale, parentDepth, parseCommentListener).execute(); } catch (JSONException e) { e.printStackTrace(); - Log.i("comment json error", e.getMessage()); + if(e.getMessage() != null) { + Log.i("comment json error", e.getMessage()); + } parseCommentListener.onParseCommentFailed(); } } @@ -55,11 +62,18 @@ class ParseComment { new ParseCommentAsyncTask(childrenArray, commentData, locale, parentDepth, parseCommentListener).execute(); } catch (JSONException e) { e.printStackTrace(); - Log.i("comment json error", e.getMessage()); + if(e.getMessage() != null) { + Log.i("comment json error", e.getMessage()); + } parseCommentListener.onParseCommentFailed(); } } + static void parseSentComment(String response, int parentDepth, Locale locale, + ParseSentCommentListener parseSentCommentListener) { + new ParseSentCommentAsyncTask(response, parentDepth, locale, parseSentCommentListener).execute(); + } + private static class ParseCommentAsyncTask extends AsyncTask { private JSONArray comments; private ArrayList commentData; @@ -110,38 +124,13 @@ class ParseComment { for (int i = 0; i < actualCommentLength; i++) { JSONObject data = comments.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY); - String id = data.getString(JSONUtils.ID_KEY); - String fullName = data.getString(JSONUtils.LINK_ID_KEY); - String author = data.getString(JSONUtils.AUTHOR_KEY); - boolean isSubmitter = data.getBoolean(JSONUtils.IS_SUBMITTER_KEY); - String commentContent = ""; - if(!data.isNull(JSONUtils.BODY_HTML_KEY)) { - commentContent = data.getString(JSONUtils.BODY_HTML_KEY).trim(); - } - String permalink = data.getString(JSONUtils.PERMALINK_KEY); - int score = data.getInt(JSONUtils.SCORE_KEY); - long submitTime = data.getLong(JSONUtils.CREATED_UTC_KEY) * 1000; - boolean scoreHidden = data.getBoolean(JSONUtils.SCORE_HIDDEN_KEY); - - Calendar submitTimeCalendar = Calendar.getInstance(); - submitTimeCalendar.setTimeInMillis(submitTime); - String formattedSubmitTime = new SimpleDateFormat("MMM d, YYYY, HH:mm", - locale).format(submitTimeCalendar.getTime()); - - int depth; - if(data.has(JSONUtils.DEPTH_KEY)) { - depth = data.getInt(JSONUtils.DEPTH_KEY) + parentDepth; - } else { - depth = parentDepth; - } - boolean collapsed = data.getBoolean(JSONUtils.COLLAPSED_KEY); - boolean hasReply = !(data.get(JSONUtils.REPLIES_KEY) instanceof String); - - newcommentData.add(new CommentData(id, fullName, author, formattedSubmitTime, commentContent, score, isSubmitter, permalink, depth, collapsed, hasReply, scoreHidden)); + newcommentData.add(parseSingleComment(data, parentDepth, locale)); } } catch (JSONException e) { parseFailed = true; - Log.i("parse comment error", e.getMessage()); + if(e.getMessage() != null) { + Log.i("parse comment error", e.getMessage()); + } } return null; } @@ -201,4 +190,75 @@ class ParseComment { } } } + + private static class ParseSentCommentAsyncTask extends AsyncTask { + private String response; + private int parentDepth; + private Locale locale; + private ParseSentCommentListener parseSentCommentListener; + private boolean parseFailed; + private CommentData commentData; + + ParseSentCommentAsyncTask(String response, int parentDepth, Locale locale, ParseSentCommentListener parseSentCommentListener) { + this.response = response; + this.parentDepth = parentDepth; + this.locale = locale; + this.parseSentCommentListener = parseSentCommentListener; + parseFailed = false; + } + + @Override + protected Void doInBackground(Void... voids) { + try { + JSONObject sentCommentData = new JSONObject(response); + commentData = parseSingleComment(sentCommentData, parentDepth, locale); + } catch (JSONException e) { + e.printStackTrace(); + parseFailed = true; + } + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + if(parseFailed) { + parseSentCommentListener.onParseSentCommentFailed(); + } else { + parseSentCommentListener.onParseSentCommentSuccess(commentData); + } + } + } + + private static CommentData parseSingleComment(JSONObject singleCommentData, int parentDepth, Locale locale) throws JSONException { + String id = singleCommentData.getString(JSONUtils.ID_KEY); + String fullName = singleCommentData.getString(JSONUtils.LINK_ID_KEY); + String author = singleCommentData.getString(JSONUtils.AUTHOR_KEY); + boolean isSubmitter = singleCommentData.getBoolean(JSONUtils.IS_SUBMITTER_KEY); + String commentContent = ""; + if(!singleCommentData.isNull(JSONUtils.BODY_HTML_KEY)) { + commentContent = singleCommentData.getString(JSONUtils.BODY_HTML_KEY).trim(); + } + String permalink = singleCommentData.getString(JSONUtils.PERMALINK_KEY); + int score = singleCommentData.getInt(JSONUtils.SCORE_KEY); + long submitTime = singleCommentData.getLong(JSONUtils.CREATED_UTC_KEY) * 1000; + boolean scoreHidden = singleCommentData.getBoolean(JSONUtils.SCORE_HIDDEN_KEY); + + Calendar submitTimeCalendar = Calendar.getInstance(); + submitTimeCalendar.setTimeInMillis(submitTime); + String formattedSubmitTime = new SimpleDateFormat("MMM d, YYYY, HH:mm", + locale).format(submitTimeCalendar.getTime()); + + int depth; + if(singleCommentData.has(JSONUtils.DEPTH_KEY)) { + depth = singleCommentData.getInt(JSONUtils.DEPTH_KEY) + parentDepth; + } else { + depth = parentDepth; + } + boolean collapsed = singleCommentData.getBoolean(JSONUtils.COLLAPSED_KEY); + boolean hasReply = !(singleCommentData.get(JSONUtils.REPLIES_KEY) instanceof String); + + return new CommentData(id, fullName, author, formattedSubmitTime, commentContent, score, + isSubmitter, permalink, depth, collapsed, hasReply, scoreHidden); + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SendComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SendComment.java index 5f7da2d7..18eac5cf 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SendComment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SendComment.java @@ -1,10 +1,9 @@ package ml.docilealligator.infinityforreddit; -import android.util.Log; - import androidx.annotation.NonNull; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import retrofit2.Call; @@ -15,12 +14,14 @@ import retrofit2.Retrofit; class SendComment { interface SendCommentListener { - void sendCommentSuccess(); + void sendCommentSuccess(CommentData commentData); void sendCommentFailed(); + void parseSentCommentFailed(); } - static void sendComment(String commentMarkdown, String thingFullname, Retrofit oauthRetrofit, - String accessToken, SendCommentListener sendCommentListener) { + static void sendComment(String commentMarkdown, String thingFullname, int parentDepth, + Locale locale, Retrofit oauthRetrofit, String accessToken, + SendCommentListener sendCommentListener) { RedditAPI api = oauthRetrofit.create(RedditAPI.class); Map headers = RedditUtils.getOAuthHeader(accessToken); Map params = new HashMap<>(); @@ -35,8 +36,17 @@ class SendComment { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if(response.isSuccessful()) { - Log.i("asdfasdfaf", response.body()); - sendCommentListener.sendCommentSuccess(); + ParseComment.parseSentComment(response.body(), parentDepth, locale, new ParseComment.ParseSentCommentListener() { + @Override + public void onParseSentCommentSuccess(CommentData commentData) { + sendCommentListener.sendCommentSuccess(commentData); + } + + @Override + public void onParseSentCommentFailed() { + + } + }); } else { sendCommentListener.sendCommentFailed(); } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java index ff9d3dd4..fc4a0fe5 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java @@ -64,6 +64,7 @@ import retrofit2.Retrofit; import ru.noties.markwon.SpannableConfiguration; import ru.noties.markwon.view.MarkwonView; +import static ml.docilealligator.infinityforreddit.CommentActivity.EXTRA_COMMENT_DATA_KEY; import static ml.docilealligator.infinityforreddit.CommentActivity.WRITE_COMMENT_REQUEST_CODE; public class ViewPostDetailActivity extends AppCompatActivity { @@ -684,8 +685,9 @@ public class ViewPostDetailActivity extends AppCompatActivity { return true; case R.id.action_comment_view_post_detail_activity: Intent intent = new Intent(this, CommentActivity.class); - intent.putExtra(CommentActivity.COMMENT_PARENT_TEXT, mPost.getTitle()); - intent.putExtra(CommentActivity.PARENT_FULLNAME, mPost.getFullName()); + intent.putExtra(CommentActivity.EXTRA_COMMENT_PARENT_TEXT_KEY, mPost.getTitle()); + intent.putExtra(CommentActivity.EXTRA_PARENT_FULLNAME_KEY, mPost.getFullName()); + intent.putExtra(CommentActivity.EXTRA_PARENT_DEPTH_KEY, 0); startActivityForResult(intent, WRITE_COMMENT_REQUEST_CODE); return true; case android.R.id.home: @@ -698,9 +700,13 @@ public class ViewPostDetailActivity extends AppCompatActivity { @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); - if(resultCode == RESULT_OK && requestCode == WRITE_COMMENT_REQUEST_CODE) { - /*CommentData comment = data.getExtras().getParcelable(EXTRA_COMMENT_DATA); - mAdapter.addComment(comment);*/ + if(data != null && resultCode == RESULT_OK && requestCode == WRITE_COMMENT_REQUEST_CODE) { + if(data.hasExtra(EXTRA_COMMENT_DATA_KEY)) { + CommentData comment = data.getExtras().getParcelable(EXTRA_COMMENT_DATA_KEY); + mAdapter.addComment(comment); + } else { + Toast.makeText(this, R.string.send_comment_failed, Toast.LENGTH_SHORT).show(); + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b4968b0..c9f5b44d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -72,6 +72,8 @@ Lazy Mode stopped Your interesting thoughts here + Sending Could not send this comment + The comment is sent but unable to get the sent comment