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;
}
}