Close CAB when scrolled or back pressed
Bug: 33106791
Bug: 33106962
Test: manual - long press to display context menu on formula and
result, then drag to open history fragment. Long press on a
history result to display the context menu, then begin scrolling
or close history. CAB should close automatically in all cases.
Change-Id: Ibe3ceee2d06c5e15335a6938dbbd0ebbf444ce68
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index b877ed6..2f68f99 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -553,13 +553,8 @@
* Return true if there was one.
*/
private boolean stopActionModeOrContextMenu() {
- if (mResultText.stopActionModeOrContextMenu()) {
- return true;
- }
- if (mFormulaText.stopActionModeOrContextMenu()) {
- return true;
- }
- return false;
+ return mResultText.stopActionModeOrContextMenu()
+ || mFormulaText.stopActionModeOrContextMenu();
}
@Override
@@ -577,8 +572,10 @@
public void onBackPressed() {
if (!stopActionModeOrContextMenu()) {
if (mDragLayout.isOpen()) {
- mDragLayout.setClosed();
- popFragmentBackstack();
+ if (!mHistoryFragment.stopActionModeOrContextMenu()) {
+ mDragLayout.setClosed();
+ popFragmentBackstack();
+ }
return;
}
if (mPadViewPager != null && mPadViewPager.getCurrentItem() != 0) {
@@ -1271,6 +1268,8 @@
return;
}
if (!mDragLayout.isOpen()) {
+ stopActionModeOrContextMenu();
+
manager.beginTransaction()
.replace(R.id.history_frame, mHistoryFragment, HistoryFragment.TAG)
.setTransition(transit)
diff --git a/src/com/android/calculator2/CalculatorResult.java b/src/com/android/calculator2/CalculatorResult.java
index c1750ef..3e42963 100644
--- a/src/com/android/calculator2/CalculatorResult.java
+++ b/src/com/android/calculator2/CalculatorResult.java
@@ -964,7 +964,7 @@
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
final MenuInflater inflater = mode.getMenuInflater();
- return createCopyMenu(inflater, menu);
+ return createContextMenu(inflater, menu);
}
@Override
@@ -1038,7 +1038,7 @@
public void onCreateContextMenu(ContextMenu contextMenu, View view,
ContextMenu.ContextMenuInfo contextMenuInfo) {
final MenuInflater inflater = new MenuInflater(getContext());
- createCopyMenu(inflater, contextMenu);
+ createContextMenu(inflater, contextMenu);
mContextMenu = contextMenu;
for(int i = 0; i < contextMenu.size(); i ++) {
contextMenu.getItem(i).setOnMenuItemClickListener(CalculatorResult.this);
@@ -1056,7 +1056,7 @@
});
}
- private boolean createCopyMenu(MenuInflater inflater, Menu menu) {
+ private boolean createContextMenu(MenuInflater inflater, Menu menu) {
inflater.inflate(R.menu.menu_result, menu);
final boolean displayMemory = mEvaluator.getMemoryIndex() != 0;
final MenuItem memoryAddItem = menu.findItem(R.id.memory_add);
@@ -1134,4 +1134,10 @@
return false;
}
}
+
+ @Override
+ protected void onDetachedFromWindow() {
+ stopActionModeOrContextMenu();
+ super.onDetachedFromWindow();
+ }
}
diff --git a/src/com/android/calculator2/HistoryFragment.java b/src/com/android/calculator2/HistoryFragment.java
index 22adcd3..480eb67 100644
--- a/src/com/android/calculator2/HistoryFragment.java
+++ b/src/com/android/calculator2/HistoryFragment.java
@@ -31,6 +31,8 @@
import java.util.ArrayList;
+import static android.support.v7.widget.RecyclerView.SCROLL_STATE_DRAGGING;
+
public class HistoryFragment extends Fragment {
public static final String TAG = "HistoryFragment";
@@ -94,6 +96,15 @@
R.layout.fragment_history, container, false /* attachToRoot */);
mRecyclerView = (RecyclerView) view.findViewById(R.id.history_recycler_view);
+ mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ if (newState == SCROLL_STATE_DRAGGING) {
+ stopActionModeOrContextMenu();
+ }
+ super.onScrollStateChanged(recyclerView, newState);
+ }
+ });
// The size of the RecyclerView is not affected by the adapter's contents.
mRecyclerView.setAdapter(mAdapter);
@@ -227,4 +238,16 @@
calculator.onClearAnimationEnd();
calculator.onBackPressed();
}
+
+ public boolean stopActionModeOrContextMenu() {
+ for (int i = 0; i < mRecyclerView.getChildCount(); i++) {
+ final View view = mRecyclerView.getChildAt(i);
+ final HistoryAdapter.ViewHolder viewHolder =
+ (HistoryAdapter.ViewHolder) mRecyclerView.getChildViewHolder(view);
+ if (viewHolder != null && viewHolder.getResult().stopActionModeOrContextMenu()) {
+ return true;
+ }
+ }
+ return false;
+ }
}