/* * 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.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.view.KeyEvent; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.AdapterView; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; 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.adapter.ChatSDKUsersListAdapter; import com.braunster.chatsdk.dao.BUser; 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.ArrayList; import java.util.List; /** * Created by braunster on 29/06/14. */ public class ChatSDKSearchActivity extends ChatSDKBaseActivity { private static final String TAG = ChatSDKSearchActivity.class.getSimpleName(); private static final boolean DEBUG = Debug.SearchActivity; /** Add each user found as a contact automatically.*/ public static final String ACTION_ADD_WHEN_FOUND = "com.braunster.chatsdk.ACTION_SEARCH_AND_ADD_USERS"; /** Request code for on activity result. For the add when found mode. * In the result intent there will be list of all the users entity id that were found and added.*/ public static final int GET_CONTACTS_ADDED_REQUEST = 10; public static final String USER_IDS_LIST = "User_Ids_List"; private ImageView btnSearch; private Button btnAddContacts; private EditText etInput; private ListView listResults; private ChatSDKUsersListAdapter adapter; private CheckBox chSelectAll; private String action = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chat_sdk_activity_search); initViews(); if (getIntent().getAction() != null) action = getIntent().getAction(); getActionBar().setHomeButtonEnabled(true); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (getIntent().getAction() != null) action = getIntent().getAction(); } private void initViews(){ btnSearch = (ImageView) findViewById(R.id.chat_sdk_btn_search); btnAddContacts = (Button) findViewById(R.id.chat_sdk_btn_add_contacts); etInput = (EditText) findViewById(R.id.chat_sdk_et_search_input); listResults = (ListView) findViewById(R.id.chat_sdk_list_search_results); chSelectAll = (CheckBox) findViewById(R.id.chat_sdk_chk_select_all); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { onBackPressed(); } return true; } @Override protected void onPause() { super.onPause(); } @Override protected void onResume() { super.onResume(); adapter = new ChatSDKUsersListAdapter(this, !action.equals(ACTION_ADD_WHEN_FOUND)); listResults.setAdapter(adapter); // Listening to key press etInput.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { btnSearch.callOnClick(); } return false; } }); // Selection listResults.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { adapter.toggleSelection(position); } }); btnSearch.setOnClickListener(searchOnClickListener); btnAddContacts.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (action.equals(ACTION_ADD_WHEN_FOUND)) return; if (adapter.getSelectedCount() == 0) { showAlertToast(getString(R.string.search_activity_no_contact_selected_toast)); return; } BUser currentUser = BNetworkManager.sharedManager().getNetworkAdapter().currentUserModel(); String[] entitiesIDs = new String[adapter.getSelectedCount()]; BUser user; for (int i = 0; i < adapter.getSelectedCount(); i++) { int pos = -1; if (adapter.getSelectedUsersPositions().valueAt(i)) pos = adapter.getSelectedUsersPositions().keyAt(i); user = adapter.getUserItems().get(pos).asBUser(); currentUser.addContact(user); entitiesIDs[i] = user.getEntityID(); } showToast(adapter.getSelectedCount() + " " + getString(R.string.search_activity_user_added_as_contact_after_count_toast)); Intent intent = new Intent(ChatSDKMainActivity.Action_Contacts_Added); intent.putExtra(USER_IDS_LIST, entitiesIDs); sendBroadcast(intent); finish(); } }); chSelectAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) adapter.selectAll(); else adapter.clearSelection(); } }); } private View.OnClickListener searchOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { if (etInput.getText().toString().isEmpty()) { showAlertToast(getString(R.string.search_activity_no_text_input_toast)); return; } final ProgressDialog dialog = new ProgressDialog(ChatSDKSearchActivity.this); dialog.setMessage(getString(R.string.search_activity_prog_dialog_init_message)); dialog.show(); adapter.clear(); final List<String> userIds = new ArrayList<String>(); BNetworkManager.sharedManager().getNetworkAdapter().usersForIndex(BDefines.Keys.BName, etInput.getText().toString()) .done(new DoneCallback<List<BUser>>() { @Override public void onDone(List<BUser> users) { dialog.dismiss(); if (users.size() == 0) { showAlertToast(getString(R.string.search_activity_no_user_found_toast)); return; } if (action.equals(ACTION_ADD_WHEN_FOUND)) { for (BUser u : users){ BNetworkManager.sharedManager().getNetworkAdapter().currentUserModel().addContact(u); userIds.add(u.getEntityID()); } Intent resultIntent = new Intent(); String ids[] = userIds.toArray(new String[userIds.size()]); Bundle extras = new Bundle(); extras.putStringArray(USER_IDS_LIST, ids); resultIntent.putExtras(extras); setResult(RESULT_OK, resultIntent); finish(); } else adapter.setBUserItems(users, true); chSelectAll.setEnabled(true); hideSoftKeyboard(ChatSDKSearchActivity.this); } }) .fail(new FailCallback<BError>() { @Override public void onFail(BError bError) { if (bError.code == BError.Code.NO_USER_FOUND) { showAlertToast(getString(R.string.search_activity_no_user_found_toast)); dialog.dismiss(); chSelectAll.setEnabled(false); if (action.equals(ACTION_ADD_WHEN_FOUND)) { setResult(RESULT_CANCELED, new Intent()); finish(); } } } }); } }; }