From 2c2e435ff21f24dd5a72974ecb51f0cbdb2c620c Mon Sep 17 00:00:00 2001 From: Mihai Nita Date: Tue, 26 Apr 2016 08:03:02 -0700 Subject: [PATCH] Fix: accessibility actions move languages but don't update Also added a comment in onItemMove explaining why that method does not call doTheUpdate(). Bug: 28173358 Change-Id: Ifdc00e70346149aeb09bd95ec21c7df2ccbaa996 --- .../LocaleDragAndDropAdapter.java | 3 ++- .../LocaleLinearLayoutManager.java | 26 ++++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java index bc17814ba50..f1301509f1e 100644 --- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java +++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java @@ -197,6 +197,8 @@ class LocaleDragAndDropAdapter notifyItemChanged(fromPosition); // to update the numbers notifyItemChanged(toPosition); notifyItemMoved(fromPosition, toPosition); + // We don't call doTheUpdate() here because this method is called for each item swap. + // So if we drag something across several positions it will be called several times. } void setRemoveMode(boolean removeMode) { @@ -222,7 +224,6 @@ class LocaleDragAndDropAdapter } mFeedItemList.remove(position); notifyDataSetChanged(); - doTheUpdate(); } void removeChecked() { diff --git a/src/com/android/settings/localepicker/LocaleLinearLayoutManager.java b/src/com/android/settings/localepicker/LocaleLinearLayoutManager.java index 630f3825664..2917cc75561 100644 --- a/src/com/android/settings/localepicker/LocaleLinearLayoutManager.java +++ b/src/com/android/settings/localepicker/LocaleLinearLayoutManager.java @@ -114,40 +114,46 @@ public class LocaleLinearLayoutManager extends LinearLayoutManager { final int itemCount = this.getItemCount(); final int position = this.getPosition(host); + boolean result = false; switch (action) { case R.id.action_drag_move_up: if (position > 0) { mAdapter.onItemMove(position, position - 1); - return true; + result = true; } - return false; + break; case R.id.action_drag_move_down: if (position + 1 < itemCount) { mAdapter.onItemMove(position, position + 1); - return true; + result = true; } - return false; + break; case R.id.action_drag_move_top: if (position != 0) { mAdapter.onItemMove(position, 0); - return true; + result = true; } - return false; + break; case R.id.action_drag_move_bottom: if (position != itemCount - 1) { mAdapter.onItemMove(position, itemCount - 1); - return true; + result = true; } - return false; + break; case R.id.action_drag_remove: if (itemCount > 1) { mAdapter.removeItem(position); - return true; + result = true; } - return false; + break; default: return super.performAccessibilityActionForItem(recycler, state, host, action, args); } + + if (result) { + mAdapter.doTheUpdate(); + } + return result; } }