/*
* Created by Itzik Braun on 12/3/2015.
* Copyright (c) 2015 deluge. All rights reserved.
*
* Last Modification at: 3/12/15 4:27 PM
*/
package com.braunster.chatsdk.activities;
import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.braunster.chatsdk.R;
import com.braunster.chatsdk.Utils.Debug;
import com.braunster.chatsdk.activities.abstracted.ChatSDKAbstractChatActivity;
import com.braunster.chatsdk.adapter.ChatSDKUsersListAdapter;
import com.braunster.chatsdk.dao.BThread;
import com.braunster.chatsdk.dao.BThreadDao;
import com.braunster.chatsdk.dao.BUser;
import com.braunster.chatsdk.dao.core.DaoCore;
import com.braunster.chatsdk.network.BDefines;
import com.braunster.chatsdk.network.BNetworkManager;
import com.braunster.chatsdk.object.BError;
import org.jdeferred.DoneCallback;
import org.jdeferred.FailCallback;
import java.util.List;
import timber.log.Timber;
/**
* Created by itzik on 6/17/2014.
*/
public class ChatSDKPickFriendsActivity extends ChatSDKBaseActivity {
public static final int MODE_NEW_CONVERSATION = 1991;
public static final int MODE_ADD_TO_CONVERSATION = 1992;
public static final String MODE = "mode";
private static final String TAG = ChatSDKPickFriendsActivity.class.getSimpleName();
private static boolean DEBUG = Debug.PickFriendsActivity;
private ListView listContacts;
private ChatSDKUsersListAdapter listAdapter;
private Button btnStartChat;
private TextView txtSearch;
private ImageView imgSearch;
private CheckBox chSelectAll;
/** Default value - MODE_NEW_CONVERSATION*/
private int mode = MODE_NEW_CONVERSATION;
/** For add to conversation mode.*/
private long threadID = -1;
/** For add to conversation mode.*/
private BThread thread;
/** Set true if you want slide down animation for this activity exit. */
private boolean animateExit = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_sdk_activity_pick_friends);
initActionBar();
if (savedInstanceState != null)
{
getDataFromBundle(savedInstanceState);
}
else
{
if (getIntent().getExtras() != null)
{
getDataFromBundle(getIntent().getExtras());
}
}
initViews();
}
private void getDataFromBundle(Bundle bundle){
mode = bundle.getInt(MODE, mode);
threadID = bundle.getLong(ChatSDKBaseThreadActivity.THREAD_ID, threadID);
animateExit = bundle.getBoolean(ChatSDKAbstractChatActivity.ANIMATE_EXIT, animateExit);
}
protected void initActionBar(){
ActionBar ab = getActionBar();
if (ab!=null)
{
ab.setTitle(getString(R.string.pick_friends));
ab.setHomeButtonEnabled(true);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong(ChatSDKBaseThreadActivity.THREAD_ID, threadID);
outState.putInt(MODE, mode);
outState.putBoolean(ChatSDKAbstractChatActivity.ANIMATE_EXIT, animateExit);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home)
{
onBackPressed();
}
return true;
}
private void initViews() {
listContacts = (ListView) findViewById(R.id.chat_sdk_list_contacts);
txtSearch = (TextView) findViewById(R.id.chat_sdk_et_search);
imgSearch = (ImageView) findViewById(R.id.chat_sdk_search_image);
btnStartChat = (Button) findViewById(R.id.chat_sdk_btn_add_contacts);
chSelectAll = (CheckBox) findViewById(R.id.chat_sdk_chk_select_all);
if (mode == MODE_ADD_TO_CONVERSATION)
btnStartChat.setText(getResources().getString(R.string.add_users));
if (!BDefines.Options.GroupEnabled)
{
btnStartChat.setVisibility(View.GONE);
chSelectAll.setVisibility(View.GONE);
}
}
private void initList(){
final List<BUser> list = BNetworkManager.sharedManager().getNetworkAdapter().currentUserModel().getContacts();
// Removing the users that is already inside the thread.
if (mode == MODE_ADD_TO_CONVERSATION && threadID != -1){
thread = DaoCore.fetchEntityWithProperty(BThread.class, BThreadDao.Properties.Id, threadID);
List<BUser> threadUser = thread.getUsers();
list.removeAll(threadUser);
}
if (list.size() > 0)
chSelectAll.setEnabled(true);
listAdapter = new ChatSDKUsersListAdapter(ChatSDKPickFriendsActivity.this, BDefines.Options.GroupEnabled);
listAdapter.setUserItems(listAdapter.makeList(list, false, true));
listContacts.setAdapter(listAdapter);
listContacts.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// If groups enabled toggeling selection
if (BDefines.Options.GroupEnabled)
listAdapter.toggleSelection(position);
else
{
createAndOpenThreadWithUsers("", getNetworkAdapter().currentUserModel(), listAdapter.getItem(position).asBUser());
}
}
});
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
initList();
btnStartChat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listAdapter.getSelectedCount() == 0)
{
showAlertToast(getString(R.string.pick_friends_activity_no_users_selected_toast));
return;
}
int addCurrent = 1;
if (mode == MODE_ADD_TO_CONVERSATION)
{
showProgDialog( getString(R.string.pick_friends_activity_prog_dialog_add_to_convo_message));
addCurrent = 0;
}
else if (mode == MODE_NEW_CONVERSATION)
{
showProgDialog(getString(R.string.pick_friends_activity_prog_dialog_open_new_convo_message));
addCurrent = 1;
}
final BUser[] users = new BUser[listAdapter.getSelectedCount() + addCurrent];
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0 ; i < listAdapter.getSelectedCount() ; i++)
{
int pos = -1;
if (listAdapter.getSelectedUsersPositions().valueAt(i))
pos = listAdapter.getSelectedUsersPositions().keyAt(i);
users[i] = listAdapter.getUserItems().get(pos).asBUser();
if (DEBUG) Timber.d("Selected User[%s]: ", users[i].getMetaName());
}
if (mode == MODE_NEW_CONVERSATION)
{
users[users.length - 1] = BNetworkManager.sharedManager().getNetworkAdapter().currentUserModel();
createAndOpenThreadWithUsers("", users);
chSelectAll.setSelected(false);
}
else if (mode == MODE_ADD_TO_CONVERSATION){
getNetworkAdapter().addUsersToThread(thread, users)
.done(new DoneCallback<BThread>() {
@Override
public void onDone(BThread thread) {
ChatSDKPickFriendsActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
setResult(Activity.RESULT_OK);
dismissProgDialog();
finish();
if (animateExit)
overridePendingTransition(R.anim.dummy, R.anim.slide_top_bottom_out);
}
});
}
})
.fail(new FailCallback<BError>() {
@Override
public void onFail(BError error) {
ChatSDKPickFriendsActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
dismissProgDialog();
setResult(Activity.RESULT_CANCELED);
finish();
}
});
}
});
}
}
}).start();
}
});
View.OnClickListener searchClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
chatSDKUiHelper.startSearchActivity();
}
};
txtSearch.setOnClickListener(searchClickListener);
imgSearch.setOnClickListener(searchClickListener);
chSelectAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked)
{
listAdapter.selectAll();
}
else listAdapter.clearSelection();
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
if (animateExit)
overridePendingTransition(R.anim.dummy, R.anim.slide_top_bottom_out);
}
}