package com.quickblox.sample.chat.ui.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.SystemClock; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import com.quickblox.chat.model.QBChatDialog; import com.quickblox.core.QBEntityCallback; import com.quickblox.core.exception.QBResponseException; import com.quickblox.sample.chat.App; import com.quickblox.sample.chat.R; import com.quickblox.sample.chat.ui.adapter.CheckboxUsersAdapter; import com.quickblox.sample.core.utils.Toaster; import com.quickblox.users.QBUsers; import com.quickblox.users.model.QBUser; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; public class SelectUsersActivity extends BaseActivity { public static final String EXTRA_QB_USERS = "qb_users"; public static final int MINIMUM_CHAT_OCCUPANTS_SIZE = 2; private static final long CLICK_DELAY = TimeUnit.SECONDS.toMillis(2); private static final String EXTRA_QB_DIALOG = "qb_dialog"; private ListView usersListView; private ProgressBar progressBar; private CheckboxUsersAdapter usersAdapter; private long lastClickTime = 0l; public static void start(Context context) { Intent intent = new Intent(context, SelectUsersActivity.class); context.startActivity(intent); } /** * Start activity for picking users * * @param activity activity to return result * @param code request code for onActivityResult() method * * in onActivityResult there will be 'ArrayList<QBUser>' in the intent extras * which can be obtained with SelectPeopleActivity.EXTRA_QB_USERS key */ public static void startForResult(Activity activity, int code) { startForResult(activity, code, null); } public static void startForResult(Activity activity, int code, QBChatDialog dialog) { Intent intent = new Intent(activity, SelectUsersActivity.class); intent.putExtra(EXTRA_QB_DIALOG, dialog); activity.startActivityForResult(intent, code); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_select_users); progressBar = _findViewById(R.id.progress_select_users); usersListView = _findViewById(R.id.list_select_users); TextView listHeader = (TextView) LayoutInflater.from(this) .inflate(R.layout.include_list_hint_header, usersListView, false); listHeader.setText(R.string.select_users_list_hint); usersListView.addHeaderView(listHeader, null, false); if (isEditingChat()) { setActionBarTitle(R.string.select_users_edit_chat); } else { setActionBarTitle(R.string.select_users_create_chat); } actionBar.setDisplayHomeAsUpEnabled(true); loadUsersFromQb(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_select_users, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if ((SystemClock.uptimeMillis() - lastClickTime) < CLICK_DELAY) { return super.onOptionsItemSelected(item); } lastClickTime = SystemClock.uptimeMillis(); switch (item.getItemId()) { case R.id.menu_select_people_action_done: if (usersAdapter != null) { List<QBUser> users = usersAdapter.getSelectedUsers(); if (users.size() >= MINIMUM_CHAT_OCCUPANTS_SIZE) { passResultToCallerActivity(); } else { Toaster.shortToast(R.string.select_users_choose_users); } } return true; default: return super.onOptionsItemSelected(item); } } @Override protected View getSnackbarAnchorView() { return findViewById(R.id.layout_root); } private void passResultToCallerActivity() { Intent result = new Intent(); ArrayList<QBUser> selectedUsers = new ArrayList<>(usersAdapter.getSelectedUsers()); result.putExtra(EXTRA_QB_USERS, selectedUsers); setResult(RESULT_OK, result); finish(); } private void loadUsersFromQb() { List<String> tags = new ArrayList<>(); tags.add(App.getSampleConfigs().getUsersTag()); progressBar.setVisibility(View.VISIBLE); QBUsers.getUsersByTags(tags, null).performAsync(new QBEntityCallback<ArrayList<QBUser>>() { @Override public void onSuccess(ArrayList<QBUser> result, Bundle params) { QBChatDialog dialog = (QBChatDialog) getIntent().getSerializableExtra(EXTRA_QB_DIALOG); usersAdapter = new CheckboxUsersAdapter(SelectUsersActivity.this, result); if (dialog != null) { usersAdapter.addSelectedUsers(dialog.getOccupants()); } usersListView.setAdapter(usersAdapter); progressBar.setVisibility(View.GONE); } @Override public void onError(QBResponseException e) { showErrorSnackbar(R.string.select_users_get_users_error, e, new View.OnClickListener() { @Override public void onClick(View v) { loadUsersFromQb(); } }); progressBar.setVisibility(View.GONE); } }); } private boolean isEditingChat() { return getIntent().getSerializableExtra(EXTRA_QB_DIALOG) != null; } }