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=85554bf58c40f98ee0f6e9b50f9802ca313a9cf2;hp=3e4f14b2d37fd3f7cc76a8ab58bb542eefa23a72;hb=badaea311478b5a6b28f7ba11991d9ea5f4c13af;hpb=ab390e82c5d6c9924d3fac5edbc808fb491fbc8d 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 3e4f14b2..85554bf5 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,6 +23,7 @@ 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; @@ -30,7 +31,6 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.CompoundButton; import android.widget.RadioButton; import android.widget.TextView; @@ -39,12 +39,8 @@ import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.MobileLedgerProfile; 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; /** * An activity representing a list of Profiles. This activity @@ -65,6 +61,7 @@ public class ProfileListActivity extends AppCompatActivity { * device. */ private boolean mTwoPane; + private FloatingActionButton fab; @Override protected void onCreate(Bundle savedInstanceState) { @@ -79,14 +76,11 @@ public class ProfileListActivity extends AppCompatActivity { if (recyclerView == null) throw new AssertionError(); setupRecyclerView(recyclerView); - FloatingActionButton fab = findViewById(R.id.fab); - fab.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - ProfilesRecyclerViewAdapter adapter = - (ProfilesRecyclerViewAdapter) recyclerView.getAdapter(); - if (adapter != null) adapter.editProfile(recyclerView, null); - } + fab = findViewById(R.id.fab); + fab.setOnClickListener(view -> { + ProfilesRecyclerViewAdapter adapter = + (ProfilesRecyclerViewAdapter) recyclerView.getAdapter(); + if (adapter != null) adapter.editProfile(recyclerView, null); }); if (findViewById(R.id.profile_detail_container) != null) { @@ -102,16 +96,19 @@ public class ProfileListActivity extends AppCompatActivity { Log.d("profiles", "got edit profile action"); int index = getIntent().getIntExtra(ARG_PROFILE_INDEX, -1); if (index >= 0) { - List list = MobileLedgerProfile.loadAllFromDB(); - if (index < list.size()) { - ProfilesRecyclerViewAdapter adapter = - (ProfilesRecyclerViewAdapter) recyclerView.getAdapter(); - if (adapter != null) adapter.editProfile(recyclerView, list.get(index)); - } + MobileLedgerProfile profile = Data.profiles.get(index); + ProfilesRecyclerViewAdapter adapter = + (ProfilesRecyclerViewAdapter) recyclerView.getAdapter(); + if (adapter != null) adapter.editProfile(recyclerView, profile); } } } + @Override + protected void onStart() { + super.onStart(); + fab.show(); + } private void setupRecyclerView(@NonNull RecyclerView recyclerView) { final ProfilesRecyclerViewAdapter adapter = new ProfilesRecyclerViewAdapter(this, mTwoPane); recyclerView.setAdapter(adapter); @@ -138,6 +135,27 @@ public class ProfileListActivity extends AppCompatActivity { } }; new ItemTouchHelper(cb).attachToRecyclerView(recyclerView); + recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), + DividerItemDecoration.VERTICAL)); + + recyclerView.setOnFlingListener(new RecyclerView.OnFlingListener() { + @Override + public boolean onFling(int dX, int dY) { + Log.d("tmp", String.format("fling %d %d", dX, dY)); + if (dY > 0) fab.hide(); + if (dY < 0) fab.show(); + return false; + } + }); + + recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + if (dy > 0) fab.hide(); + if (dy < 0) fab.show(); + } + }); } public static class ProfilesRecyclerViewAdapter @@ -145,25 +163,24 @@ public class ProfileListActivity extends AppCompatActivity { private final ProfileListActivity mParentActivity; private final boolean mTwoPane; - private final View.OnClickListener mOnClickListener = new View.OnClickListener() { - @Override - public void onClick(View view) { - MobileLedgerProfile item = (MobileLedgerProfile) ((View) view.getParent()).getTag(); - editProfile(view, item); - } + private final View.OnClickListener mOnClickListener = view -> { + MobileLedgerProfile profile = (MobileLedgerProfile) ((View) view.getParent()).getTag(); + editProfile(view, profile); }; ProfilesRecyclerViewAdapter(ProfileListActivity parent, boolean twoPane) { mParentActivity = parent; mTwoPane = twoPane; Data.profiles.addObserver((o, arg) -> { Log.d("profiles", "profile list changed"); - notifyDataSetChanged(); + if (arg == null) notifyDataSetChanged(); + else notifyItemChanged((int) arg); }); } - private void editProfile(View view, MobileLedgerProfile item) { + private void editProfile(View view, MobileLedgerProfile profile) { + int index = Data.profiles.indexOf(profile); if (mTwoPane) { Bundle arguments = new Bundle(); - arguments.putString(ProfileDetailFragment.ARG_ITEM_ID, item.getUuid()); + arguments.putInt(ProfileDetailFragment.ARG_ITEM_ID, index); ProfileDetailFragment fragment = new ProfileDetailFragment(); fragment.setArguments(arguments); mParentActivity.getSupportFragmentManager().beginTransaction() @@ -172,8 +189,7 @@ public class ProfileListActivity extends AppCompatActivity { else { Context context = view.getContext(); Intent intent = new Intent(context, ProfileDetailActivity.class); - intent.putExtra(ProfileDetailFragment.ARG_ITEM_ID, - (item == null) ? null : item.getUuid()); + if (index != -1) intent.putExtra(ProfileDetailFragment.ARG_ITEM_ID, index); context.startActivity(intent); } @@ -184,14 +200,25 @@ public class ProfileListActivity extends AppCompatActivity { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.profile_list_content, parent, false); ProfileListViewHolder holder = new ProfileListViewHolder(view); - Data.profile.addObserver(new Observer() { - @Override - public void update(Observable o, Object arg) { - MobileLedgerProfile newProfile = Data.profile.get(); - MobileLedgerProfile profile = (MobileLedgerProfile) holder.itemView.getTag(); - holder.mRadioView.setChecked( - newProfile != null && newProfile.getUuid().equals(profile.getUuid())); - } + Data.profile.addObserver((o, arg) -> { + MobileLedgerProfile newProfile = Data.profile.get(); + MobileLedgerProfile profile = (MobileLedgerProfile) holder.itemView.getTag(); + holder.mRadioView.setChecked(profile.equals(newProfile)); + }); + + holder.mRadioView.setOnCheckedChangeListener((buttonView, isChecked) -> { + if (!isChecked) return; + MobileLedgerProfile profile = (MobileLedgerProfile) holder.itemView.getTag(); + if (profile != null) Data.setCurrentProfile(profile); + }); + View.OnClickListener profileSelector = v -> { + holder.mRadioView.setChecked(true); + }; + holder.mTitle.setOnClickListener(profileSelector); + holder.mSubTitle.setOnClickListener(profileSelector); + Data.profile.addObserver((o, arg) -> { + MobileLedgerProfile profile = (MobileLedgerProfile) holder.itemView.getTag(); + holder.mRadioView.setChecked(Data.profile.get().equals(profile)); }); return holder; } @@ -201,21 +228,12 @@ public class ProfileListActivity extends AppCompatActivity { 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()); + holder.mTitle.setText(profile.getName()); + holder.mSubTitle.setText(profile.getUrl()); holder.mRadioView.setChecked(profile.getUuid().equals(currentProfile.getUuid())); - holder.mRadioView - .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (!isChecked) return; - MLDB.set_option_value(MLDB.OPT_PROFILE_UUID, profile.getUuid()); - Data.profile.set(profile); - } - }); holder.itemView.setTag(profile); holder.mEditButton.setOnClickListener(mOnClickListener); - } @Override public int getItemCount() { @@ -224,11 +242,14 @@ public class ProfileListActivity extends AppCompatActivity { 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); } } }