package com.quickblox.sample.chat.ui.activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
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.UsersAdapter;
import com.quickblox.sample.chat.utils.chat.ChatHelper;
import com.quickblox.sample.core.ui.activity.CoreBaseActivity;
import com.quickblox.sample.core.ui.dialog.ProgressDialogFragment;
import com.quickblox.sample.core.utils.ErrorUtils;
import com.quickblox.sample.core.utils.SharedPrefsHelper;
import com.quickblox.users.QBUsers;
import com.quickblox.users.model.QBUser;
import java.util.ArrayList;
import java.util.List;
public class LoginActivity extends CoreBaseActivity {
private ListView userListView;
public static void start(Context context) {
Intent intent = new Intent(context, LoginActivity.class);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
userListView = _findViewById(R.id.list_login_users);
TextView listHeader = (TextView) LayoutInflater.from(this)
.inflate(R.layout.include_list_hint_header, userListView, false);
listHeader.setText(R.string.login_select_user_for_login);
userListView.addHeaderView(listHeader, null, false);
userListView.setOnItemClickListener(new OnUserLoginItemClickListener());
buildUsersList();
}
private void buildUsersList() {
List<String> tags = new ArrayList<>();
tags.add(App.getSampleConfigs().getUsersTag());
QBUsers.getUsersByTags(tags, null).performAsync(new QBEntityCallback<ArrayList<QBUser>>() {
@Override
public void onSuccess(ArrayList<QBUser> result, Bundle params) {
UsersAdapter adapter = new UsersAdapter(LoginActivity.this, result);
userListView.setAdapter(adapter);
}
@Override
public void onError(QBResponseException e) {
ErrorUtils.showSnackbar(userListView, R.string.login_cant_obtain_users, e,
R.string.dlg_retry, new View.OnClickListener() {
@Override
public void onClick(View v) {
buildUsersList();
}
});
}
});
}
private void login(final QBUser user) {
ProgressDialogFragment.show(getSupportFragmentManager(), R.string.dlg_login);
ChatHelper.getInstance().login(user, new QBEntityCallback<Void>() {
@Override
public void onSuccess(Void result, Bundle bundle) {
SharedPrefsHelper.getInstance().saveQbUser(user);
DialogsActivity.start(LoginActivity.this);
finish();
ProgressDialogFragment.hide(getSupportFragmentManager());
}
@Override
public void onError(QBResponseException e) {
ProgressDialogFragment.hide(getSupportFragmentManager());
ErrorUtils.showSnackbar(userListView, R.string.login_chat_login_error, e,
R.string.dlg_retry, new View.OnClickListener() {
@Override
public void onClick(View v) {
login(user);
}
});
}
});
}
private class OnUserLoginItemClickListener implements AdapterView.OnItemClickListener {
public static final int LIST_HEADER_POSITION = 0;
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position == LIST_HEADER_POSITION) {
return;
}
final QBUser user = (QBUser) parent.getItemAtPosition(position);
// We use hardcoded password for all users for test purposes
// Of course you shouldn't do that in your app
user.setPassword(App.getSampleConfigs().getUsersPassword());
login(user);
}
}
}