migrate tab order to DSLV

This commit is contained in:
Adrian Ulrich 2014-10-17 12:07:39 +02:00
parent da6878da5e
commit 61663414b7
3 changed files with 44 additions and 36 deletions

View File

@ -22,18 +22,21 @@ THE SOFTWARE.
--> -->
<LinearLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dslv="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:orientation="vertical"
android:divider="?android:attr/dividerHorizontal" android:divider="?android:attr/dividerHorizontal"
android:showDividers="middle" android:showDividers="middle"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_width="fill_parent"> android:layout_width="fill_parent">
<ch.blinkenlights.android.vanilla.DragListView <com.mobeta.android.dslv.DragSortListView
android:id="@+id/list" android:id="@+id/list"
android:divider="@null" android:divider="@null"
android:layout_height="0px" android:layout_height="0px"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_weight="1" android:layout_weight="1"
android:choiceMode="multipleChoice" /> android:choiceMode="multipleChoice"
dslv:drag_enabled="true"
dslv:drag_start_mode="onMove" />
<LinearLayout <LinearLayout
style="?android:attr/buttonBarStyle" style="?android:attr/buttonBarStyle"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -54,4 +57,4 @@ THE SOFTWARE.
android:layout_weight="1" android:layout_weight="1"
android:text="@string/done" /> android:text="@string/done" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -29,13 +29,14 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemClickListener;
import com.mobeta.android.dslv.DragSortListView;
/** /**
* The preferences activity in which one can change application preferences. * The preferences activity in which one can change application preferences.
*/ */
public class TabOrderActivity extends Activity implements View.OnClickListener, OnItemClickListener { public class TabOrderActivity extends Activity implements View.OnClickListener, OnItemClickListener {
private TabOrderAdapter mAdapter; private TabOrderAdapter mAdapter;
private DragListView mList; private DragSortListView mList;
/** /**
* Initialize the activity, loading the preference specifications. * Initialize the activity, loading the preference specifications.
@ -48,10 +49,10 @@ public class TabOrderActivity extends Activity implements View.OnClickListener,
setContentView(R.layout.tab_order); setContentView(R.layout.tab_order);
mAdapter = new TabOrderAdapter(this); mAdapter = new TabOrderAdapter(this);
DragListView list = (DragListView)findViewById(R.id.list); DragSortListView list = (DragSortListView)findViewById(R.id.list);
list.setAdapter(mAdapter); list.setAdapter(mAdapter);
list.setEditable(true);
list.setOnItemClickListener(this); list.setOnItemClickListener(this);
list.setDropListener(onDrop);
mList = list; mList = list;
load(); load();
@ -89,7 +90,7 @@ public class TabOrderActivity extends Activity implements View.OnClickListener,
public void restoreDefault() public void restoreDefault()
{ {
mAdapter.setTabIds(LibraryPagerAdapter.DEFAULT_ORDER.clone()); mAdapter.setTabIds(LibraryPagerAdapter.DEFAULT_ORDER.clone());
DragListView list = mList; DragSortListView list = mList;
for (int i = 0; i != LibraryPagerAdapter.MAX_ADAPTER_COUNT; ++i) { for (int i = 0; i != LibraryPagerAdapter.MAX_ADAPTER_COUNT; ++i) {
list.setItemChecked(i, true); list.setItemChecked(i, true);
} }
@ -102,7 +103,7 @@ public class TabOrderActivity extends Activity implements View.OnClickListener,
public void save() public void save()
{ {
int[] ids = mAdapter.getTabIds(); int[] ids = mAdapter.getTabIds();
DragListView list = mList; DragSortListView list = mList;
char[] out = new char[LibraryPagerAdapter.MAX_ADAPTER_COUNT]; char[] out = new char[LibraryPagerAdapter.MAX_ADAPTER_COUNT];
for (int i = 0; i != LibraryPagerAdapter.MAX_ADAPTER_COUNT; ++i) { for (int i = 0; i != LibraryPagerAdapter.MAX_ADAPTER_COUNT; ++i) {
out[i] = (char)(list.isItemChecked(i) ? 128 + ids[i] : 127 - ids[i]); out[i] = (char)(list.isItemChecked(i) ? 128 + ids[i] : 127 - ids[i]);
@ -135,7 +136,7 @@ public class TabOrderActivity extends Activity implements View.OnClickListener,
if (ids != null) { if (ids != null) {
mAdapter.setTabIds(ids); mAdapter.setTabIds(ids);
DragListView list = mList; DragSortListView list = mList;
for (int i = 0; i != LibraryPagerAdapter.MAX_ADAPTER_COUNT; ++i) { for (int i = 0; i != LibraryPagerAdapter.MAX_ADAPTER_COUNT; ++i) {
list.setItemChecked(i, chars[i] >= 128); list.setItemChecked(i, chars[i] >= 128);
} }
@ -152,4 +153,34 @@ public class TabOrderActivity extends Activity implements View.OnClickListener,
{ {
save(); save();
} }
/**
* Fired from adapter listview if user moved an item
* @param from the item index that was dragged
* @param to the index where the item was dropped
*/
private DragSortListView.DropListener onDrop =
new DragSortListView.DropListener() {
@Override
public void drop(int from, int to) {
if (from == to)
return;
int[] ids = mAdapter.getTabIds();
int tempId = ids[from];
if (from > to) {
System.arraycopy(ids, to, ids, to + 1, from - to);
} else {
System.arraycopy(ids, from + 1, ids, from, to - from);
}
ids[to] = tempId;
save();
mAdapter.notifyDataSetChanged();
// no need to update the copy in mAdapter: We worked on a reference
}
};
} }

View File

@ -31,7 +31,7 @@ import android.widget.BaseAdapter;
/** /**
* CursorAdapter backed by MediaStore playlists. * CursorAdapter backed by MediaStore playlists.
*/ */
public class TabOrderAdapter extends BaseAdapter implements DragListView.DragAdapter { public class TabOrderAdapter extends BaseAdapter {
private final TabOrderActivity mActivity; private final TabOrderActivity mActivity;
private final LayoutInflater mInflater; private final LayoutInflater mInflater;
private int[] mTabIds; private int[] mTabIds;
@ -65,32 +65,6 @@ public class TabOrderAdapter extends BaseAdapter implements DragListView.DragAda
return mTabIds; return mTabIds;
} }
@Override
public void move(int from, int to)
{
if (from == to)
return;
int[] ids = mTabIds;
int tempId = ids[from];
if (from > to) {
System.arraycopy(ids, to, ids, to + 1, from - to);
} else {
System.arraycopy(ids, from + 1, ids, from, to - from);
}
ids[to] = tempId;
notifyDataSetChanged();
mActivity.save();
}
@Override
public void remove(int position)
{
// not implemented
}
@Override @Override
public int getCount() public int getCount()
{ {