Some action mode things

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2017-11-28 04:38:17 +01:00
parent 8dce2ccb9b
commit ce499aae55
4 changed files with 92 additions and 1 deletions

View File

@ -147,6 +147,7 @@ public class CallsListController extends BaseController implements SearchView.On
}
}
adapter.addListener(this);
prepareViews();
}

View File

@ -35,6 +35,7 @@ import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.text.InputType;
import android.text.TextUtils;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@ -70,6 +71,7 @@ import javax.inject.Inject;
import autodagger.AutoInjector;
import butterknife.BindView;
import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.SelectableAdapter;
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
@ -77,7 +79,8 @@ import io.reactivex.schedulers.Schedulers;
import retrofit2.HttpException;
@AutoInjector(NextcloudTalkApplication.class)
public class ContactsController extends BaseController implements SearchView.OnQueryTextListener {
public class ContactsController extends BaseController implements SearchView.OnQueryTextListener,
ActionMode.Callback, FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemLongClickListener {
public static final String TAG = "ContactsController";
@ -104,6 +107,8 @@ public class ContactsController extends BaseController implements SearchView.OnQ
private SearchView searchView;
private String searchQuery;
private ActionMode actionMode;
public ContactsController() {
super();
setHasOptionsMenu(true);
@ -136,6 +141,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
}
}
adapter.addListener(this);
prepareViews();
}
@ -361,4 +367,83 @@ public class ContactsController extends BaseController implements SearchView.OnQ
public boolean onQueryTextSubmit(String query) {
return onQueryTextChange(query);
}
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
adapter.setMode(SelectableAdapter.Mode.MULTI);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
adapter.setMode(SelectableAdapter.Mode.IDLE);
actionMode = null;
}
@Override
public boolean onItemClick(int position) {
if (actionMode != null && position != RecyclerView.NO_POSITION) {
// Mark the position selected
toggleSelection(position);
return true;
} else {
// Handle the item click listener
// We don't need to activate anything
return false;
}
}
private void toggleSelection(int position) {
adapter.toggleSelection(position);
int count = adapter.getSelectedItemCount();
if (count == 0) {
actionMode.finish();
} else {
setContextTitle(count);
}
}
private void setContextTitle(int count) {
actionMode.setTitle(String.valueOf(count) + " " + (count == 1 ?
getResources().getString(R.string.one_contact_selected) :
getResources().getString(R.string.more_contacts_selected)));
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
adapter.onSaveInstanceState(outState);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (adapter != null) {
adapter.onRestoreInstanceState(savedInstanceState);
if (adapter.getSelectedItemCount() > 0) {
actionMode = getActivity().startActionMode(this);
setContextTitle(adapter.getSelectedItemCount());
}
}
}
@Override
public void onItemLongClick(int position) {
if (actionMode == null) {
actionMode = getActivity().startActionMode(this);
}
toggleSelection(position);
}
}

View File

@ -81,6 +81,7 @@ public class RoomMenuController extends BaseController implements FlexibleAdapte
adapter = new FlexibleAdapter<>(menuItems, getActivity(), false);
}
adapter.addListener(this);
recyclerView.setAdapter(adapter);
recyclerView.addItemDecoration(new DividerItemDecoration(

View File

@ -72,4 +72,8 @@
<string name="nc_stop_sharing">Stop sharing the call</string>
<string name="nc_delete_call">Delete call</string>
<!-- Contacts -->
<string name="one_contact_selected">contact selected</string>
<string name="more_contacts_selected">contacts selected</string>
</resources>