package com.quickblox.sample.user.activities;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import com.orangegangsters.github.swipyrefreshlayout.library.SwipyRefreshLayout;
import com.orangegangsters.github.swipyrefreshlayout.library.SwipyRefreshLayoutDirection;
import com.quickblox.core.QBEntityCallback;
import com.quickblox.core.exception.QBResponseException;
import com.quickblox.core.request.GenericQueryRule;
import com.quickblox.core.request.QBPagedRequestBuilder;
import com.quickblox.sample.core.utils.Toaster;
import com.quickblox.sample.user.R;
import com.quickblox.sample.user.adapter.UserListAdapter;
import com.quickblox.sample.user.helper.DataHolder;
import com.quickblox.users.QBUsers;
import com.quickblox.users.model.QBUser;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class UsersListActivity extends BaseActivity implements AdapterView.OnItemClickListener {
private static final int LIMIT_USERS = 50;
private static final int REQUEST_CODE_SIGN_UP = 100;
private static final String ORDER_RULE = "order";
private static final String ORDER_VALUE = "desc date created_at";
private int currentPage = 1;
private UserListAdapter usersListAdapter;
private QBPagedRequestBuilder qbPagedBuilder;
private SwipyRefreshLayout setOnRefreshListener;
private List<QBUser> qbUsersList;
public static void start(Context context) {
Intent intent = new Intent(context, UsersListActivity.class);
context.startActivity(intent);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_users_list);
DataHolder.getInstance().clear();
initUI();
getAllUsers(true);
}
@Override
protected void initUI() {
ListView usersListView = _findViewById(R.id.users_listview);
setOnRefreshListener = _findViewById(R.id.swipy_refresh_layout);
TextView listHeader = (TextView) LayoutInflater.from(this)
.inflate(R.layout.include_list_header, usersListView, false);
usersListView.addHeaderView(listHeader, null, false);
qbUsersList = DataHolder.getInstance().getQBUsers();
usersListAdapter = new UserListAdapter(this, qbUsersList);
usersListView.setAdapter(usersListAdapter);
usersListView.setOnItemClickListener(this);
setQBPagedBuilder();
setOnRefreshListener.setOnRefreshListener(new SwipyRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh(SwipyRefreshLayoutDirection direction) {
qbPagedBuilder.setPage(++currentPage);
getAllUsers(false);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_CODE_SIGN_UP) {
qbUsersList = DataHolder.getInstance().getQBUsers();
Collections.rotate(qbUsersList, 1);
usersListAdapter.updateList(qbUsersList);
}
}
}
@Override
public void onResume() {
super.onResume();
usersListAdapter.notifyDataSetChanged();
setActionBarTitle(DataHolder.getInstance().isSignedIn() ? DataHolder.getInstance().getSignInQbUser().getLogin()
: getString(R.string.not_signed_in));
}
@Override
public void onDestroy() {
super.onDestroy();
DataHolder.getInstance().setSignInQbUser(null);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
QBUser qbUser = (QBUser) adapterView.getItemAtPosition(position);
ShowUserActivity.start(this, qbUser);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_users_list, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (!DataHolder.getInstance().isSignedIn()) {
setActionBarTitle(R.string.not_signed_in);
menu.getItem(0).setVisible(true);
menu.getItem(1).setVisible(true);
menu.getItem(2).setVisible(false);
menu.getItem(3).setEnabled(false);
} else {
setActionBarTitle(DataHolder.getInstance().getSignInQbUser().getLogin());
menu.getItem(0).setVisible(false);
menu.getItem(1).setVisible(false);
menu.getItem(2).setVisible(true);
menu.getItem(3).setEnabled(true);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent;
switch (item.getItemId()) {
case R.id.sign_in:
intent = new Intent(this, SignInActivity.class);
startActivity(intent);
return true;
case R.id.sign_up:
intent = new Intent(this, SignUpUserActivity.class);
startActivityForResult(intent, REQUEST_CODE_SIGN_UP);
return true;
case R.id.profile:
ShowUserActivity.start(this, DataHolder.getInstance().getSignInQbUser());
return true;
case R.id.logout:
progressDialog.show();
QBUsers.signOut().performAsync(new QBEntityCallback<Void>() {
@Override
public void onSuccess(Void result, Bundle bundle) {
progressDialog.dismiss();
Toaster.longToast(R.string.user_log_out_msg);
updateDataAfterLogOut();
}
@Override
public void onError(QBResponseException e) {
progressDialog.dismiss();
Toaster.longToast(e.getErrors().toString());
}
});
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void updateDataAfterLogOut() {
DataHolder.getInstance().setSignInQbUser(null);
invalidateOptionsMenu();
}
private void setQBPagedBuilder() {
qbPagedBuilder = new QBPagedRequestBuilder();
GenericQueryRule genericQueryRule = new GenericQueryRule(ORDER_RULE, ORDER_VALUE);
ArrayList<GenericQueryRule> rule = new ArrayList<>();
rule.add(genericQueryRule);
qbPagedBuilder.setPerPage(LIMIT_USERS);
qbPagedBuilder.setRules(rule);
}
private void getAllUsers(boolean showProgress) {
if (showProgress) {
progressDialog.show();
}
QBUsers.getUsers(qbPagedBuilder).performAsync(new QBEntityCallback<ArrayList<QBUser>>() {
@Override
public void onSuccess(ArrayList<QBUser> qbUsers, Bundle bundle) {
setOnRefreshListener.setEnabled(true);
setOnRefreshListener.setRefreshing(false);
DataHolder.getInstance().addQbUsers(qbUsers);
qbUsersList = DataHolder.getInstance().getQBUsers();
progressDialog.dismiss();
usersListAdapter.updateList(qbUsersList);
}
@Override
public void onError(QBResponseException e) {
progressDialog.dismiss();
setOnRefreshListener.setEnabled(false);
setOnRefreshListener.setRefreshing(false);
View rootLayout = findViewById(R.id.swipy_refresh_layout);
showSnackbarError(rootLayout, R.string.errors, e, new View.OnClickListener() {
@Override
public void onClick(View v) {
getAllUsers(false);
}
});
}
});
}
}