X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Factivity%2FProfileListActivity.java;h=03088b473a1abd6f463bca9966b40e100ee8c88e;hp=3cd61712ff96dcfc6f31a487209747bd62b0ab6f;hb=64de9b485d42fee572e012a61601fa8c316fc64d;hpb=3b365016042215dd73cb4600840aa8199b8322b9 diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/activity/ProfileListActivity.java b/app/src/main/java/net/ktnx/mobileledger/ui/activity/ProfileListActivity.java index 3cd61712..03088b47 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/activity/ProfileListActivity.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/activity/ProfileListActivity.java @@ -23,8 +23,10 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; +import android.support.v7.widget.helper.ItemTouchHelper; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -40,6 +42,7 @@ import net.ktnx.mobileledger.ui.profiles.ProfileDetailActivity; import net.ktnx.mobileledger.ui.profiles.ProfileDetailFragment; import net.ktnx.mobileledger.utils.MLDB; +import java.util.Collections; import java.util.List; import java.util.Observable; import java.util.Observer; @@ -69,7 +72,7 @@ public class ProfileListActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile_list); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); toolbar.setTitle(getTitle()); @@ -77,7 +80,7 @@ public class ProfileListActivity extends AppCompatActivity { if (recyclerView == null) throw new AssertionError(); setupRecyclerView(recyclerView); - FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + FloatingActionButton fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -111,15 +114,39 @@ public class ProfileListActivity extends AppCompatActivity { } private void setupRecyclerView(@NonNull RecyclerView recyclerView) { - List list = MobileLedgerProfile.loadAllFromDB(); - recyclerView.setAdapter(new ProfilesRecyclerViewAdapter(this, list, mTwoPane)); + final ProfilesRecyclerViewAdapter adapter = new ProfilesRecyclerViewAdapter(this, mTwoPane); + recyclerView.setAdapter(adapter); + ItemTouchHelper.Callback cb = new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(@NonNull RecyclerView recyclerView, + @NonNull RecyclerView.ViewHolder viewHolder) { + return makeMovementFlags(ItemTouchHelper.UP | ItemTouchHelper.DOWN, 0); + } + @Override + public boolean onMove(@NonNull RecyclerView recyclerView, + @NonNull RecyclerView.ViewHolder viewHolder, + @NonNull RecyclerView.ViewHolder target) { + Collections.swap(Data.profiles.getList(), viewHolder.getAdapterPosition(), + target.getAdapterPosition()); + MobileLedgerProfile.storeProfilesOrder(); + adapter.notifyItemMoved(viewHolder.getAdapterPosition(), + target.getAdapterPosition()); + return true; + } + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) { + + } + }; + new ItemTouchHelper(cb).attachToRecyclerView(recyclerView); + recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), + DividerItemDecoration.VERTICAL)); } public static class ProfilesRecyclerViewAdapter extends RecyclerView.Adapter { private final ProfileListActivity mParentActivity; - private final List mValues; private final boolean mTwoPane; private final View.OnClickListener mOnClickListener = new View.OnClickListener() { @Override @@ -128,11 +155,13 @@ public class ProfileListActivity extends AppCompatActivity { editProfile(view, item); } }; - ProfilesRecyclerViewAdapter(ProfileListActivity parent, List items, - boolean twoPane) { - mValues = items; + ProfilesRecyclerViewAdapter(ProfileListActivity parent, boolean twoPane) { mParentActivity = parent; mTwoPane = twoPane; + Data.profiles.addObserver((o, arg) -> { + Log.d("profiles", "profile list changed"); + notifyDataSetChanged(); + }); } private void editProfile(View view, MobileLedgerProfile item) { if (mTwoPane) { @@ -171,11 +200,15 @@ public class ProfileListActivity extends AppCompatActivity { } @Override public void onBindViewHolder(@NonNull final ProfileListViewHolder holder, int position) { - final MobileLedgerProfile profile = mValues.get(position); + final MobileLedgerProfile profile = Data.profiles.get(position); final MobileLedgerProfile currentProfile = Data.profile.get(); Log.d("profiles", String.format("pos %d: %s, current: %s", position, profile.getUuid(), currentProfile.getUuid())); - holder.mRadioView.setText(profile.getName()); + View.OnClickListener profileSelector = v -> holder.mRadioView.setChecked(true); + holder.mTitle.setText(profile.getName()); + holder.mTitle.setOnClickListener(profileSelector); + holder.mSubTitle.setText(profile.getUrl()); + holder.mSubTitle.setOnClickListener(profileSelector); holder.mRadioView.setChecked(profile.getUuid().equals(currentProfile.getUuid())); holder.mRadioView .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @@ -193,16 +226,19 @@ public class ProfileListActivity extends AppCompatActivity { } @Override public int getItemCount() { - return mValues.size(); + return Data.profiles.size(); } class ProfileListViewHolder extends RecyclerView.ViewHolder { final RadioButton mRadioView; final TextView mEditButton; + final TextView mTitle, mSubTitle; ProfileListViewHolder(View view) { super(view); mRadioView = view.findViewById(R.id.profile_list_radio); mEditButton = view.findViewById(R.id.profile_list_edit_button); + mTitle = view.findViewById(R.id.title); + mSubTitle = view.findViewById(R.id.subtitle); } } }