diff --git a/res/layout/locale_drag_cell.xml b/res/layout/locale_drag_cell.xml
index eb26d2c3e39..522f28428e9 100644
--- a/res/layout/locale_drag_cell.xml
+++ b/res/layout/locale_drag_cell.xml
@@ -40,12 +40,11 @@
diff --git a/res/layout/locale_order_list.xml b/res/layout/locale_order_list.xml
index a5021d15e7d..d2ad072b69f 100644
--- a/res/layout/locale_order_list.xml
+++ b/res/layout/locale_order_list.xml
@@ -14,33 +14,38 @@
limitations under the License.
-->
-
+
-
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp">
-
+
-
+
+
+
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index fd21db1f297..3e114b4877c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -525,20 +525,22 @@
Add a language
-
- Remove from your language preference?
-
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla egestas porta aliquet. Ut laoreet orci tellus, id cursus enim volutpat in.
+
+
+ - Remove selected language?
+ - Remove selected languages?
+
-
- Language removal error
-
- Can’t remove all the languages, you should leave at least one.
+
+ Text will be displayed in another language
-
-
- Not all applications are translated into this language; you might experience a mixture.
+
+ Can’t remove all languages
+
+ Keep at least one preferred language
+
+
+ May not be available in some apps
Choose activity
diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
index 1b5594c523d..b56dd6cb255 100644
--- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
+++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
@@ -17,22 +17,24 @@
package com.android.settings.localepicker;
import android.content.Context;
+import android.graphics.Canvas;
import android.support.v4.view.MotionEventCompat;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.LocaleList;
import android.util.Log;
+import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
-import com.android.settings.R;
-
import com.android.internal.app.LocalePicker;
import com.android.internal.app.LocaleStore;
+import com.android.settings.R;
+
import java.text.NumberFormat;
import java.util.Collections;
import java.util.List;
@@ -79,6 +81,10 @@ class LocaleDragAndDropAdapter
this.mFeedItemList = feedItemList;
this.mContext = context;
+
+ final float dragElevation = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8,
+ context.getResources().getDisplayMetrics());
+
this.mItemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(
ItemTouchHelper.UP | ItemTouchHelper.DOWN, 0 /* no swipe */) {
@@ -93,6 +99,35 @@ class LocaleDragAndDropAdapter
public void onSwiped(RecyclerView.ViewHolder viewHolder, int i) {
// Swipe is disabled, this is intentionally empty.
}
+
+ private static final int SELECTION_GAINED = 1;
+ private static final int SELECTION_LOST = 0;
+ private static final int SELECTION_UNCHANGED = -1;
+ private int mSelectionStatus = SELECTION_UNCHANGED;
+ @Override
+ public void onChildDraw(Canvas c, RecyclerView recyclerView,
+ RecyclerView.ViewHolder viewHolder, float dX, float dY,
+ int actionState, boolean isCurrentlyActive) {
+
+ super.onChildDraw(c, recyclerView, viewHolder, dX, dY,
+ actionState, isCurrentlyActive);
+ // We change the elevation if selection changed
+ if (mSelectionStatus != SELECTION_UNCHANGED) {
+ viewHolder.itemView.setElevation(
+ mSelectionStatus == SELECTION_GAINED ? dragElevation : 0);
+ mSelectionStatus = SELECTION_UNCHANGED;
+ }
+ }
+
+ @Override
+ public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
+ super.onSelectedChanged(viewHolder, actionState);
+ if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {
+ mSelectionStatus = SELECTION_GAINED;
+ } else if (actionState == ItemTouchHelper.ACTION_STATE_IDLE) {
+ mSelectionStatus = SELECTION_LOST;
+ }
+ }
});
}
@@ -187,6 +222,15 @@ class LocaleDragAndDropAdapter
return result;
}
+ LocaleStore.LocaleInfo getFirstChecked() {
+ for (LocaleStore.LocaleInfo li : mFeedItemList) {
+ if (li.getChecked()) {
+ return li;
+ }
+ }
+ return null;
+ }
+
void addLocale(LocaleStore.LocaleInfo li) {
mFeedItemList.add(li);
notifyItemInserted(mFeedItemList.size() - 1);
diff --git a/src/com/android/settings/localepicker/LocaleListEditor.java b/src/com/android/settings/localepicker/LocaleListEditor.java
index 81610361468..18bec157829 100644
--- a/src/com/android/settings/localepicker/LocaleListEditor.java
+++ b/src/com/android/settings/localepicker/LocaleListEditor.java
@@ -21,7 +21,6 @@ import android.app.FragmentTransaction;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
-import android.preference.PreferenceFragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.LocaleList;
@@ -33,12 +32,11 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
-import com.android.settings.R;
-
import com.android.internal.app.LocalePicker;
import com.android.internal.app.LocalePickerWithRegion;
import com.android.internal.app.LocaleStore;
import com.android.settings.InstrumentedFragment;
+import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import java.util.ArrayList;
@@ -107,16 +105,16 @@ public class LocaleListEditor extends SettingsPreferenceFragment
}
private void removeLocaleWarningDialog() {
- int checked = mAdapter.getCheckedCount();
+ int checkedCount = mAdapter.getCheckedCount();
// Nothing checked, just exit remove mode without a warning dialog
- if (checked == 0) {
+ if (checkedCount == 0) {
setRemoveMode(!mRemoveMode);
return;
}
// All locales selected, warning dialog, can't remove them all
- if (checked == mAdapter.getItemCount()) {
+ if (checkedCount == mAdapter.getItemCount()) {
new AlertDialog.Builder(getActivity())
.setTitle(R.string.dlg_remove_locales_error_title)
.setMessage(R.string.dlg_remove_locales_error_message)
@@ -130,8 +128,10 @@ public class LocaleListEditor extends SettingsPreferenceFragment
return;
}
+ final String title = getResources().getQuantityString(R.plurals.dlg_remove_locales_title,
+ checkedCount);
new AlertDialog.Builder(getActivity())
- .setTitle(R.string.dlg_remove_locales_title)
+ .setTitle(title)
.setMessage(R.string.dlg_remove_locales_message)
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
@Override
@@ -161,9 +161,9 @@ public class LocaleListEditor extends SettingsPreferenceFragment
}
private static List getUserLocaleList(Context context) {
- List result = new ArrayList<>();
+ final List result = new ArrayList<>();
- LocaleList localeList = LocalePicker.getLocales();
+ final LocaleList localeList = LocalePicker.getLocales();
for (int i = 0; i < localeList.size(); i++) {
Locale locale = localeList.get(i);
result.add(LocaleStore.getLocaleInfo(locale));
@@ -173,8 +173,10 @@ public class LocaleListEditor extends SettingsPreferenceFragment
}
private void configureDragAndDrop(View view) {
- RecyclerView list = (RecyclerView) view.findViewById(R.id.dragList);
- list.setLayoutManager(new LinearLayoutManager(this.getContext()));
+ final RecyclerView list = (RecyclerView) view.findViewById(R.id.dragList);
+ final LinearLayoutManager llm = new LinearLayoutManager(this.getContext());
+ llm.setAutoMeasureEnabled(true);
+ list.setLayoutManager(llm);
list.setHasFixedSize(true);
mAdapter.setRecyclerView(list);