From 75b0cc784ec6e84d9f7f41a3a8f6653ae5d982c5 Mon Sep 17 00:00:00 2001 From: Thodoris1999 Date: Thu, 26 Jul 2018 16:54:05 +0300 Subject: [PATCH] change behaviour of controls when editing and replying --- app/src/main/AndroidManifest.xml | 3 +- .../activities/topic/TopicActivity.java | 84 ++++++++++--------- .../mthmmy/viewmodel/TopicViewModel.java | 15 ++++ 3 files changed, 59 insertions(+), 43 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c6b4a73b..3e7a42a9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,8 +72,7 @@ android:name=".activities.topic.TopicActivity" android:configChanges="orientation|screenSize" android:parentActivityName=".activities.main.MainActivity" - android:theme="@style/AppTheme.NoActionBar" - android:windowSoftInputMode="adjustPan"> + android:theme="@style/AppTheme.NoActionBar"> diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java index f969b933..08633cde 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java @@ -169,7 +169,7 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb recyclerView.setAdapter(topicAdapter); replyFAB = findViewById(R.id.topic_fab); - replyFAB.setEnabled(false); + replyFAB.hide(); bottomNavBar = findViewById(R.id.bottom_navigation_bar); if (!sessionManager.isLoggedIn()) replyFAB.hide(); else { @@ -194,7 +194,7 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb viewModel.getTopicTaskResult().observe(this, topicTaskResult -> { if (topicTaskResult == null) { - hideControls(); + progressBar.setVisibility(ProgressBar.VISIBLE); } else { switch (topicTaskResult.getResultCode()) { case SUCCESS: @@ -203,6 +203,12 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb toolbarTitle.setText(topicTaskResult.getTopicTitle()); } + if (topicTaskResult.getReplyPageUrl() == null) { + replyFAB.hide(); + topicAdapter.resetTopic(false); + } else + topicAdapter.resetTopic(true); + if (!postsList.isEmpty()) { recyclerView.getRecycledViewPool().clear(); //Avoid inconsistency detected bug postsList.clear(); @@ -222,18 +228,18 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb notificationManager.cancel(NEW_POST_TAG, topicTaskResult.getLoadedPageTopicId()); } - showControls(); + progressBar.setVisibility(ProgressBar.GONE); break; case NETWORK_ERROR: Toast.makeText(getBaseContext(), "Network Error", Toast.LENGTH_SHORT).show(); break; case SAME_PAGE: - showControls(); + progressBar.setVisibility(ProgressBar.GONE); Toast.makeText(getBaseContext(), "That's the same page", Toast.LENGTH_SHORT).show(); //TODO change focus break; case UNAUTHORIZED: - showControls(); + progressBar.setVisibility(ProgressBar.GONE); Toast.makeText(getBaseContext(), "This topic is either missing or off limits to you", Toast.LENGTH_SHORT).show(); break; default: @@ -249,12 +255,12 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb viewModel.getPrepareForReplyResult().observe(this, prepareForReplyResult -> { if (prepareForReplyResult != null) { //prepare for a reply - viewModel.setWritingReply(true); postsList.add(Post.newQuickReply()); topicAdapter.notifyItemInserted(postsList.size()); recyclerView.scrollToPosition(postsList.size() - 1); - showControls(); + progressBar.setVisibility(ProgressBar.GONE); replyFAB.setVisibility(View.GONE); + bottomNavBar.setVisibility(View.GONE); } }); @@ -264,27 +270,14 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb postsList.get(result.getPosition()).setPostType(Post.TYPE_EDIT); topicAdapter.notifyItemChanged(result.getPosition()); recyclerView.scrollToPosition(result.getPosition()); - showControls(); + progressBar.setVisibility(ProgressBar.GONE); + replyFAB.setVisibility(View.GONE); + bottomNavBar.setVisibility(View.GONE); } }); viewModel.initialLoad(topicPageUrl); } - public void hideControls() { - progressBar.setVisibility(ProgressBar.VISIBLE); - if (replyFAB.getVisibility() != View.GONE) replyFAB.setEnabled(false); - } - - public void showControls() { - progressBar.setVisibility(ProgressBar.GONE); - if (viewModel.getTopicTaskResult().getValue().getReplyPageUrl() == null) { - replyFAB.hide(); - topicAdapter.resetTopic(false); - } else - topicAdapter.resetTopic(true); - if (replyFAB.getVisibility() != View.GONE) replyFAB.setEnabled(true); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflates the menu; this adds items to the action bar if it is present. @@ -344,13 +337,21 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb if (drawer.isDrawerOpen()) { drawer.closeDrawer(); return; - } else if (postsList != null && postsList.size() > 0 && postsList.get(postsList.size() - 1) == null) { + } else if (viewModel.isWritingReply()) { postsList.remove(postsList.size() - 1); topicAdapter.notifyItemRemoved(postsList.size()); topicAdapter.setBackButtonHidden(); - replyFAB.setVisibility(View.INVISIBLE); - paginationEnabled(true); - replyFAB.setEnabled(true); + viewModel.setWritingReply(false); + replyFAB.setVisibility(View.VISIBLE); + bottomNavBar.setVisibility(View.VISIBLE); + return; + } else if (viewModel.isEditingPost()) { + postsList.get(viewModel.getPostEditedPosition()).setPostType(Post.TYPE_POST); + topicAdapter.notifyItemChanged(viewModel.getPostEditedPosition()); + topicAdapter.setBackButtonHidden(); + viewModel.setEditingPost(false); + replyFAB.setVisibility(View.VISIBLE); + bottomNavBar.setVisibility(View.VISIBLE); return; } super.onBackPressed(); @@ -538,17 +539,17 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb @Override public void onTopicTaskStarted() { - hideControls(); + progressBar.setVisibility(ProgressBar.VISIBLE); } @Override public void onTopicTaskCancelled() { - showControls(); + progressBar.setVisibility(ProgressBar.GONE); } @Override public void onReplyTaskStarted() { - hideControls(); + progressBar.setVisibility(ProgressBar.VISIBLE); } @Override @@ -562,8 +563,9 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb postsList.remove(postsList.size() - 1); topicAdapter.notifyItemRemoved(postsList.size()); - showControls(); + progressBar.setVisibility(ProgressBar.GONE); replyFAB.setVisibility(View.VISIBLE); + bottomNavBar.setVisibility(View.VISIBLE); viewModel.setWritingReply(false); if (success) { @@ -579,22 +581,22 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb @Override public void onPrepareForReplyStarted() { - hideControls(); + progressBar.setVisibility(ProgressBar.VISIBLE); } @Override public void onPrepareForReplyCancelled() { - showControls(); + progressBar.setVisibility(ProgressBar.GONE); } @Override public void onDeleteTaskStarted() { - hideControls(); + progressBar.setVisibility(ProgressBar.VISIBLE); } @Override public void onDeleteTaskFinished(boolean result) { - showControls(); + progressBar.setVisibility(ProgressBar.GONE); if (result) { viewModel.reloadPage(); @@ -605,17 +607,17 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb @Override public void onPrepareEditStarted() { - hideControls(); + progressBar.setVisibility(ProgressBar.VISIBLE); } @Override public void onPrepareEditCancelled() { - showControls(); + progressBar.setVisibility(ProgressBar.GONE); } @Override public void onEditTaskStarted() { - hideControls(); + progressBar.setVisibility(ProgressBar.VISIBLE); } @Override @@ -629,11 +631,11 @@ public class TopicActivity extends BaseActivity implements TopicTask.TopicTaskOb postsList.get(position).setPostType(Post.TYPE_POST); topicAdapter.notifyItemChanged(position); viewModel.setEditingPost(false); - - showControls(); + progressBar.setVisibility(ProgressBar.GONE); + replyFAB.setVisibility(View.VISIBLE); + bottomNavBar.setVisibility(View.VISIBLE); if (result) { - viewModel.setEditingPost(false); viewModel.reloadPage(); } else { Toast.makeText(TopicActivity.this, "Edit failed!", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java index 426fd8d8..0fdb4c21 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java +++ b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java @@ -27,6 +27,10 @@ public class TopicViewModel extends BaseViewModel implements TopicTask.OnTopicTa private boolean editingPost = false; private boolean writingReply = false; + /** + * holds the adapter position of the post being edited + */ + private int postEditedPosition; private TopicTask currentTopicTask; private PrepareForEditTask currentPrepareForEditTask; @@ -87,6 +91,14 @@ public class TopicViewModel extends BaseViewModel implements TopicTask.OnTopicTa return editingPost; } + public int getPostEditedPosition() { + return postEditedPosition; + } + + public boolean isWritingReply() { + return writingReply; + } + public void setWritingReply(boolean writingReply) { this.writingReply = writingReply; } @@ -215,11 +227,14 @@ public class TopicViewModel extends BaseViewModel implements TopicTask.OnTopicTa @Override public void onPrepareForReplyFinished(PrepareForReplyResult result) { + writingReply = true; prepareForReplyResult.setValue(result); } @Override public void onPrepareEditFinished(PrepareForEditResult result, int position) { + editingPost = true; + postEditedPosition = position; prepareForEditResult.setValue(result); } }