/*
* This file is part of Find Your Friend.
*
* Find Your Friend is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Find Your Friend is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Find Your Friend. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sgu.findyourfriend.screen;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.ProgressBar;
import com.sgu.findyourfriend.R;
import com.sgu.findyourfriend.adapter.ContactAdapter;
import com.sgu.findyourfriend.mgr.Config;
import com.sgu.findyourfriend.mgr.MyProfileManager;
import com.sgu.findyourfriend.mgr.Config.AppState;
import com.sgu.findyourfriend.model.ContactBean;
import com.sgu.findyourfriend.net.PostData;
import com.sgu.findyourfriend.utils.Utility;
public class InviteFromContactsDialog extends Dialog {
private ArrayList<ContactBean> contactData;
private ArrayList<ContactBean> temptContactData;
private ContactAdapter contactAdapter;
private ListView listView;
private Button btnNext;
private ImageButton btnClose;
private EditText editSearch;
private Button btnSelectAll;
private Context ctx;
private ProgressBar pbLoader;
private boolean isSelectMode = true;
public InviteFromContactsDialog(Context context) {
super(context, R.style.full_screen_dialog);
this.ctx = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.invite_from_contact_dialog_custom);
getWindow().setLayout(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
pbLoader = (ProgressBar) findViewById(R.id.pbLoader);
btnClose = (ImageButton) findViewById(R.id.imgClose);
editSearch = (EditText) findViewById(R.id.editSearch);
btnSelectAll = (Button) findViewById(R.id.btnSelectAll);
btnNext = (Button) findViewById(R.id.btnNext);
listView = (ListView) findViewById(R.id.list);
contactData = new ArrayList<ContactBean>();
Cursor phones = ctx.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
null, Phone.DISPLAY_NAME + " ASC");
while (phones.moveToNext()) {
String name = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contactData.add(new ContactBean(name, phoneNumber, false));
}
phones.close();
temptContactData = (ArrayList<ContactBean>) contactData.clone();
contactAdapter = new ContactAdapter(ctx,
R.layout.custom_contact_addfriend, temptContactData);
listView.setAdapter(contactAdapter);
btnClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
dismiss();
}
});
editSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence textChanged, int arg1,
int arg2, int arg3) {
temptContactData.clear();
for (ContactBean cb : contactData) {
if (cb.getName().contains(textChanged))
temptContactData.add(cb);
}
contactAdapter.notifyDataSetChanged();
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
}
});
btnSelectAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isSelectMode) {
contactAdapter.checkAll();
btnSelectAll.setText("Bỏ chọn");
} else {
contactAdapter.unCheckAll();
btnSelectAll.setText("Chọn tất cả");
}
isSelectMode = !isSelectMode;
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// arraylist phone select
final ArrayList<ContactBean> phoneSelected = getContactsSelected(temptContactData);
if (phoneSelected.size() == 0) {
Utility.showMessage(ctx, "Chọn ít nhất 1 người bạn.");
return;
}
(new AsyncTask<Void, Void, HashMap<String, Integer>>() {
private ArrayList<String> phoneNumbers = new ArrayList<String>();
@Override
protected void onPreExecute() {
pbLoader.setVisibility(View.VISIBLE);
for (ContactBean cb : phoneSelected) {
phoneNumbers.add(cb.getPhoneNo());
}
}
@Override
protected HashMap<String, Integer> doInBackground(
Void... params) {
if (Config.currentState == AppState.ONLINE)
return PostData.userGetUserListWithoutFriend(ctx,
MyProfileManager.getInstance().getMyID(),
phoneNumbers);
else return new HashMap<String, Integer>();
}
@Override
protected void onPostExecute(
final HashMap<String, Integer> result) {
Log.i("CONTACT", result.size() + "");
for (ContactBean cb : phoneSelected) {
if (result.containsKey(cb.getPhoneNo()))
phoneSelected.remove(cb);
}
if (result.size() > 0) {
(new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
for (String kPhone : result.keySet()) {
PostData.sendFriendRequest(ctx,
MyProfileManager.getInstance()
.getMyID(), result
.get(kPhone));
}
return null;
}
protected void onPostExecute(Void rs) {
Utility.showMessage(
ctx,
"Đã gửi lời mời đến "
+ result.size()
+ " bạn đang dùng ứng dụng");
showAlertSendByMessage(phoneSelected);
}
}).execute();
} else {
showAlertSendByMessage(phoneSelected);
}
pbLoader.setVisibility(View.GONE);
dismiss();
}
}).execute();
}
});
}
protected ArrayList<ContactBean> getContactsSelected(
ArrayList<ContactBean> temptContactData) {
ArrayList<ContactBean> tempt = new ArrayList<ContactBean>();
for (ContactBean cb : temptContactData) {
if (cb.isCheck()) {
String formatPhoneNumber = cb.getPhoneNo();
formatPhoneNumber = formatPhoneNumber.replace("+84", "0");
formatPhoneNumber = formatPhoneNumber.replace("-", "");
formatPhoneNumber = formatPhoneNumber.trim();
Log.i("TRIM", formatPhoneNumber);
tempt.add(new ContactBean(cb.getName(), formatPhoneNumber, true));
}
}
return tempt;
}
private void showAlertSendByMessage(ArrayList<ContactBean> phoneSelected) {
if (phoneSelected.size() == 0) {
dismiss();
return;
}
StringBuilder addresses = new StringBuilder();
for (ContactBean cb : phoneSelected) {
addresses.append(cb.getPhoneNo());
addresses.append(",");
}
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address", addresses.toString());
smsIntent.putExtra("sms_body", Utility.INVITE_MESSAGE);
ctx.startActivity(smsIntent);
dismiss();
};
}