UX fixes for the language draggable cell
This should bring things closer to the recommended UX guidelines. It changes the way the checkbox / label play together, and changes the "localization missing" warning icon to a string. Also some cleanup of hard-coded styles and sizes. Bug: 26758865 Bug: 26707846 Change-Id: I07a78a1e4a41122b91e895e363a217d3e9cacd40
This commit is contained in:
committed by
Roozbeh Pournader
parent
4b796fa7d8
commit
7f78a4b723
@@ -21,6 +21,7 @@ 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.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
@@ -41,6 +42,7 @@ import java.util.Locale;
|
||||
class LocaleDragAndDropAdapter
|
||||
extends RecyclerView.Adapter<LocaleDragAndDropAdapter.CustomViewHolder> {
|
||||
|
||||
private static final String TAG = "LocaleDragAndDropAdapter";
|
||||
private final Context mContext;
|
||||
private final List<LocaleStore.LocaleInfo> mFeedItemList;
|
||||
private final ItemTouchHelper mItemTouchHelper;
|
||||
@@ -55,8 +57,6 @@ class LocaleDragAndDropAdapter
|
||||
super(view);
|
||||
mLocaleDragCell = view;
|
||||
mLocaleDragCell.getDragHandle().setOnTouchListener(this);
|
||||
mLocaleDragCell.getTextLabel().setOnTouchListener(this);
|
||||
mLocaleDragCell.getTranslateableLabel().setOnTouchListener(this);
|
||||
}
|
||||
|
||||
public LocaleDragCell getLocaleDragCell() {
|
||||
@@ -144,7 +144,14 @@ class LocaleDragAndDropAdapter
|
||||
}
|
||||
|
||||
private void onItemMove(int fromPosition, int toPosition) {
|
||||
Collections.swap(mFeedItemList, fromPosition, toPosition);
|
||||
if (fromPosition >= 0 && toPosition >= 0) {
|
||||
Collections.swap(mFeedItemList, fromPosition, toPosition);
|
||||
} else {
|
||||
// TODO: It looks like sometimes the RecycleView tries to swap item -1
|
||||
// Investigate and file a bug.
|
||||
Log.e(TAG, String.format(Locale.US,
|
||||
"Negative position in onItemMove %d -> %d", fromPosition, toPosition));
|
||||
}
|
||||
notifyItemChanged(fromPosition); // to update the numbers
|
||||
notifyItemChanged(toPosition);
|
||||
notifyItemMoved(fromPosition, toPosition);
|
||||
|
@@ -20,16 +20,19 @@ import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
class LocaleDragCell extends LinearLayout {
|
||||
class LocaleDragCell extends RelativeLayout {
|
||||
// We need to keep the label and the checkbox "in sync"
|
||||
// The checkbox shows in remove mode, and the label shows in normal mode, in the same position.
|
||||
// So we need to set the same text to both of them, and coordinate the show / hide.
|
||||
private TextView mLabel;
|
||||
private TextView mMiniLabel;
|
||||
private ImageView mLocalized;
|
||||
private CheckBox mCheckbox;
|
||||
private TextView mMiniLabel;
|
||||
private TextView mLocalized;
|
||||
private ImageView mDragHandle;
|
||||
|
||||
public LocaleDragCell(Context context, AttributeSet attrs) {
|
||||
@@ -40,20 +43,31 @@ class LocaleDragCell extends LinearLayout {
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
mLabel = (TextView) findViewById(R.id.label);
|
||||
mLocalized = (ImageView) findViewById(R.id.l10nWarn);
|
||||
mLocalized = (TextView) findViewById(R.id.l10nWarn);
|
||||
mMiniLabel = (TextView) findViewById(R.id.miniLabel);
|
||||
mCheckbox = (CheckBox) findViewById(R.id.checkbox);
|
||||
mDragHandle = (ImageView) findViewById(R.id.dragHandle);
|
||||
}
|
||||
|
||||
public void setShowHandle(boolean showHandle) {
|
||||
mDragHandle.setVisibility(showHandle ? VISIBLE : GONE);
|
||||
// We want invisible, not gone, so that everything else stays the same.
|
||||
// With GONE there is more space for the labels and the text wrapping change.
|
||||
// So the transition between "normal" mode (with numbers) and
|
||||
// "remove mode" (with checkboxes) is not that "smooth"
|
||||
mDragHandle.setVisibility(showHandle ? VISIBLE : INVISIBLE);
|
||||
invalidate();
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
public void setShowCheckbox(boolean showCheckbox) {
|
||||
mCheckbox.setVisibility(showCheckbox ? VISIBLE : GONE);
|
||||
// "Opposite" visibility for label / checkbox
|
||||
if (showCheckbox) {
|
||||
mCheckbox.setVisibility(VISIBLE);
|
||||
mLabel.setVisibility(INVISIBLE);
|
||||
} else {
|
||||
mCheckbox.setVisibility(INVISIBLE);
|
||||
mLabel.setVisibility(VISIBLE);
|
||||
}
|
||||
invalidate();
|
||||
requestLayout();
|
||||
}
|
||||
@@ -75,11 +89,12 @@ class LocaleDragCell extends LinearLayout {
|
||||
|
||||
public void setLabel(String labelText) {
|
||||
mLabel.setText(labelText);
|
||||
mCheckbox.setText(labelText);
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public void setLocalized(boolean localized) {
|
||||
mLocalized.setVisibility(localized ? INVISIBLE : VISIBLE);
|
||||
mLocalized.setVisibility(localized ? GONE : VISIBLE);
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@@ -87,14 +102,6 @@ class LocaleDragCell extends LinearLayout {
|
||||
return mDragHandle;
|
||||
}
|
||||
|
||||
public ImageView getTranslateableLabel() {
|
||||
return mLocalized;
|
||||
}
|
||||
|
||||
public TextView getTextLabel() {
|
||||
return mLabel;
|
||||
}
|
||||
|
||||
public CheckBox getCheckbox() {
|
||||
return mCheckbox;
|
||||
}
|
||||
|
Reference in New Issue
Block a user