package com.xabber.android.ui.activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.data.Application;
import com.xabber.android.data.log.LogManager;
import com.xabber.android.data.entity.AccountJid;
import com.xabber.android.data.entity.UserJid;
import com.xabber.android.data.extension.blocking.BlockingManager;
import com.xabber.android.data.extension.blocking.OnBlockedListChangedListener;
import com.xabber.android.data.intent.AccountIntentBuilder;
import com.xabber.android.ui.adapter.BlockedListAdapter;
import com.xabber.android.ui.color.BarPainter;
import com.xabber.android.ui.dialog.UnblockAllContactsDialog;
import java.util.ArrayList;
import java.util.List;
public class BlockedListActivity extends ManagedActivity implements BlockedListAdapter.OnBlockedContactClickListener,
OnBlockedListChangedListener, BlockingManager.UnblockContactListener, Toolbar.OnMenuItemClickListener {
public static final String SAVED_CHECKED_CONTACTS = "com.xabber.android.ui.activity.BlockedListActivity.SAVED_CHECKED_CONTACTS";
BlockedListAdapter adapter;
private AccountJid account;
private Toolbar toolbar;
private BarPainter barPainter;
private int previousSize;
public static Intent createIntent(Context context, AccountJid account) {
return new AccountIntentBuilder(context, BlockedListActivity.class).setAccount(account).build();
}
private static AccountJid getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
account = getAccount(getIntent());
if (account == null) {
finish();
return;
}
setContentView(R.layout.activity_with_toolbar_and_container);
toolbar = (Toolbar) findViewById(R.id.toolbar_default);
toolbar.setNavigationIcon(R.drawable.ic_arrow_left_white_24dp);
toolbar.inflateMenu(R.menu.toolbar_block_list);
toolbar.setOnMenuItemClickListener(this);
barPainter = new BarPainter(this, toolbar);
RecyclerView recyclerView = new RecyclerView(this);
((RelativeLayout)findViewById(R.id.fragment_container)).addView(recyclerView);
adapter = new BlockedListAdapter(account);
adapter.setListener(this);
if (savedInstanceState != null) {
final ArrayList<String> checkedContacts = savedInstanceState.getStringArrayList(SAVED_CHECKED_CONTACTS);
if (checkedContacts != null) {
List<UserJid> checkedJids = new ArrayList<>();
for (String contactString : checkedContacts) {
try {
checkedJids.add(UserJid.from(contactString));
} catch (UserJid.UserJidCreateException e) {
LogManager.exception(this, e);
}
}
adapter.setCheckedContacts(checkedJids);
}
}
previousSize = -1;
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.toolbar_block_list, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.action_unblock_all).setVisible(adapter.getItemCount() > 0);
final boolean checkContactsIsEmpty = adapter.getCheckedContacts().isEmpty();
menu.findItem(R.id.action_unblock_selected).setVisible(!checkContactsIsEmpty);
return true;
}
@Override
protected void onResume() {
super.onResume();
Application.getInstance().addUIListener(OnBlockedListChangedListener.class, this);
update();
}
@Override
protected void onPause() {
super.onPause();
Application.getInstance().removeUIListener(OnBlockedListChangedListener.class, this);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
ArrayList<UserJid> checkedContacts = adapter.getCheckedContacts();
ArrayList<String> checkedContactsStringList = new ArrayList<>();
for (UserJid jid : checkedContacts) {
checkedContactsStringList.add(jid.toString());
}
outState.putStringArrayList(SAVED_CHECKED_CONTACTS, checkedContactsStringList);
}
@Override
public boolean onMenuItemClick(MenuItem item) {
return onOptionsItemSelected(item);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_unblock_all:
UnblockAllContactsDialog.newInstance(account).show(getFragmentManager(), UnblockAllContactsDialog.class.getName());
return true;
case R.id.action_unblock_selected:
BlockingManager.getInstance().unblockContacts(account, adapter.getCheckedContacts(), this);
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBlockedContactClick() {
updateToolbar();
updateMenu();
}
private void updateMenu() {
onPrepareOptionsMenu(toolbar.getMenu());
}
private void updateToolbar() {
final ArrayList<UserJid> checkedContacts = adapter.getCheckedContacts();
final int currentSize = checkedContacts.size();
if (currentSize == previousSize) {
return;
}
if (currentSize == 0) {
toolbar.setTitle(getString(R.string.block_list));
LogManager.i(this, "toolbar.setTitle " + toolbar.getTitle());
barPainter.updateWithAccountName(account);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
} else {
toolbar.setTitle(String.valueOf(currentSize));
LogManager.i(this, "toolbar.setTitle " + toolbar.getTitle());
barPainter.setGrey();
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.setCheckedContacts(new ArrayList<UserJid>());
adapter.onChange();
update();
}
});
}
previousSize = currentSize;
}
@Override
public void onBlockedListChanged(AccountJid account) {
update();
}
void update() {
adapter.onChange();
updateToolbar();
updateMenu();
}
@Override
public void onSuccess() {
Toast.makeText(BlockedListActivity.this, getString(R.string.contacts_unblocked_successfully), Toast.LENGTH_SHORT).show();
}
@Override
public void onError() {
Toast.makeText(BlockedListActivity.this, getString(R.string.error_unblocking_contacts), Toast.LENGTH_SHORT).show();
}
}