mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-06 06:15:12 +00:00
Some action mode things
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
8dce2ccb9b
commit
ce499aae55
@ -147,6 +147,7 @@ public class CallsListController extends BaseController implements SearchView.On
|
||||
}
|
||||
}
|
||||
|
||||
adapter.addListener(this);
|
||||
prepareViews();
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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(
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user