diff --git a/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java b/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java index 61dad49..55adf37 100644 --- a/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java +++ b/app/src/main/java/i2p/bote/android/addressbook/AddressBookFragment.java @@ -16,6 +16,7 @@ import android.view.ViewGroup; import android.widget.ImageButton; import com.google.zxing.integration.android.IntentIntegrator; +import com.pnikosis.materialishprogress.ProgressWheel; import java.util.SortedSet; @@ -24,13 +25,14 @@ import i2p.bote.android.R; import i2p.bote.android.util.AuthenticatedFragment; import i2p.bote.android.util.BetterAsyncTaskLoader; import i2p.bote.android.widget.DividerItemDecoration; +import i2p.bote.android.widget.LoadingRecyclerView; import i2p.bote.fileencryption.PasswordException; import i2p.bote.packet.dht.Contact; public class AddressBookFragment extends AuthenticatedFragment implements LoaderManager.LoaderCallbacks> { OnContactSelectedListener mCallback; - private RecyclerView mContactsList; + private LoadingRecyclerView mContactsList; private ContactAdapter mAdapter; private View mPromotedActions; @@ -66,7 +68,10 @@ public class AddressBookFragment extends AuthenticatedFragment implements LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_list_contacts, container, false); - mContactsList = (RecyclerView) v.findViewById(R.id.contacts_list); + mContactsList = (LoadingRecyclerView) v.findViewById(R.id.contacts_list); + View empty = v.findViewById(R.id.empty); + ProgressWheel loading = (ProgressWheel) v.findViewById(R.id.loading); + mContactsList.setLoadingView(empty, loading); mPromotedActions = v.findViewById(R.id.promoted_actions); ImageButton b = (ImageButton) v.findViewById(R.id.action_new_contact); @@ -100,7 +105,7 @@ public class AddressBookFragment extends AuthenticatedFragment implements mContactsList.setLayoutManager(mLayoutManager); // Set the adapter for the list view - mAdapter = new ContactAdapter(mCallback); + mAdapter = new ContactAdapter(getActivity(), mCallback); mContactsList.setAdapter(mAdapter); } diff --git a/app/src/main/java/i2p/bote/android/addressbook/ContactAdapter.java b/app/src/main/java/i2p/bote/android/addressbook/ContactAdapter.java index b80057a..50b14db 100644 --- a/app/src/main/java/i2p/bote/android/addressbook/ContactAdapter.java +++ b/app/src/main/java/i2p/bote/android/addressbook/ContactAdapter.java @@ -1,5 +1,6 @@ package i2p.bote.android.addressbook; +import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -15,23 +16,32 @@ import i2p.bote.android.R; import i2p.bote.android.util.BoteHelper; import i2p.bote.packet.dht.Contact; -public class ContactAdapter extends RecyclerView.Adapter { +public class ContactAdapter extends RecyclerView.Adapter { + private Context mCtx; private List mContacts; private AddressBookFragment.OnContactSelectedListener mListener; - public static class ViewHolder extends RecyclerView.ViewHolder { + public static class SimpleViewHolder extends RecyclerView.ViewHolder { + public SimpleViewHolder(View itemView) { + super(itemView); + } + } + + public static class ContactViewHolder extends RecyclerView.ViewHolder { public ImageView mPicture; public TextView mName; - public ViewHolder(View itemView) { + public ContactViewHolder(View itemView) { super(itemView); mPicture = (ImageView) itemView.findViewById(R.id.contact_picture); mName = (TextView) itemView.findViewById(R.id.contact_name); } } - public ContactAdapter(AddressBookFragment.OnContactSelectedListener listener) { + public ContactAdapter(Context context, AddressBookFragment.OnContactSelectedListener listener) { + mCtx = context; mListener = listener; + setHasStableIds(true); } public void setContacts(SortedSet contacts) { @@ -44,43 +54,78 @@ public class ContactAdapter extends RecyclerView.Adapter - + android:layout_height="match_parent"> + + + + + + + +