package com.mega4tech.whatsappapi; import android.Manifest; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.gun0912.tedpermission.PermissionListener; import com.gun0912.tedpermission.TedPermission; import com.mega4tech.whatsappapilibrary.WhatsappApi; import com.mega4tech.whatsappapilibrary.exception.WhatsappNotInstalledException; import com.mega4tech.whatsappapilibrary.liseteners.GetContactsListener; import com.mega4tech.whatsappapilibrary.liseteners.SendMessageListener; import com.mega4tech.whatsappapilibrary.model.WContact; import com.mega4tech.whatsappapilibrary.model.WMessage; import com.miguelgaeta.media_picker.MediaPicker; import com.miguelgaeta.media_picker.RequestType; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; public class MainActivity extends AppCompatActivity implements View.OnClickListener, MediaPicker.Provider, MediaPicker.OnError { String[] mContacts; boolean[] mSelectedContacts; HashMap<WContact, Integer> mDictionary; List<WContact> mAllContacts; List<WContact> mReceivers; File attachmentFile; private RecyclerView mContactsRv; private Button mAddContactsBtn; private EditText mMessageTextTv; private Button mSendMsgBtn; private TextView mAttachmentTv; private Button mAddAttachmentBtn; private ContactCardRecyclerViewAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDictionary = new HashMap<>(); mReceivers = new LinkedList<>(); if (!WhatsappApi.getInstance().isWhatsappInstalled()) { Toast.makeText(this, "Whatsapp not installed", Toast.LENGTH_SHORT).show(); return; } if (!WhatsappApi.getInstance().isRootAvailable()) { Toast.makeText(this, "Root is not available", Toast.LENGTH_SHORT).show(); return; } setContentView(R.layout.activity_main); initView(); mSendMsgBtn.setOnClickListener(this); mAddContactsBtn.setOnClickListener(this); mAddAttachmentBtn.setOnClickListener(this); mAddContactsBtn.setEnabled(false); mSendMsgBtn.setEnabled(false); RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL, true); mContactsRv.setLayoutManager(mLayoutManager); mContactsRv.setItemAnimator(new DefaultItemAnimator()); try { WhatsappApi.getInstance().getContacts(this, new GetContactsListener() { @Override public void receiveWhatsappContacts(List<WContact> contacts) { mAllContacts = contacts; mAddContactsBtn.setEnabled(true); mSendMsgBtn.setEnabled(true); mContacts = new String[contacts.size()]; mSelectedContacts = new boolean[contacts.size()]; mAdapter = new ContactCardRecyclerViewAdapter(MainActivity.this, mReceivers, mContacts, mSelectedContacts, mDictionary); mContactsRv.setAdapter(mAdapter); int i = 0; for (WContact contact : contacts) { mContacts[i] = contact.getName();//+ ", " + contact.getId().split("@")[0]; i++; } } }); } catch (WhatsappNotInstalledException e) { e.printStackTrace(); } } private void initView() { mContactsRv = (RecyclerView) findViewById(R.id.contacts_rv); mAddContactsBtn = (Button) findViewById(R.id.add_contacts_btn); mMessageTextTv = (EditText) findViewById(R.id.message_text_tv); mSendMsgBtn = (Button) findViewById(R.id.send_msg_btn); mAttachmentTv = (TextView) findViewById(R.id.attachment_tv); mAddAttachmentBtn = (Button) findViewById(R.id.add_attachment_btn); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.add_contacts_btn: new AlertDialog.Builder(this) .setMultiChoiceItems(mContacts, mSelectedContacts, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { mSelectedContacts[which] = isChecked; if (isChecked) { mReceivers.add(mAllContacts.get(which)); mDictionary.put(mAllContacts.get(which), which); } else { mReceivers.remove(mAllContacts.get(which)); mDictionary.remove(mAllContacts.get(which)); } } }) .setPositiveButton(R.string.ok_button_label, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); mAdapter.setmObjects(mReceivers); } }) .show(); break; case R.id.add_attachment_btn: new TedPermission(this) .setPermissionListener(new PermissionListener() { @Override public void onPermissionGranted() { MediaPicker.startForDocuments(MainActivity.this, MainActivity.this); } @Override public void onPermissionDenied(ArrayList<String> deniedPermissions) { Toast.makeText(MainActivity.this, "We need \"read file from storage\" permission to select attachment", Toast.LENGTH_SHORT).show(); } }) .setDeniedMessage("If you reject permission,you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]") .setPermissions(Manifest.permission.READ_EXTERNAL_STORAGE) .check(); break; case R.id.send_msg_btn: if (mReceivers.size() < 1) { Toast.makeText(this, "You should select one receiver at least", Toast.LENGTH_SHORT).show(); return; } if (mReceivers.size() > 5) { Toast.makeText(this, "You should select less than 5 receivers, demo version !!", Toast.LENGTH_SHORT).show(); return; } if (TextUtils.isEmpty(mMessageTextTv.getText()) && attachmentFile == null) { Toast.makeText(this, "please enter your message or select a media file to send", Toast.LENGTH_SHORT).show(); return; } String text = (!TextUtils.isEmpty(mMessageTextTv.getText())) ? mMessageTextTv.getText().toString() : ""; WMessage message = new WMessage(text, attachmentFile, this); try { WhatsappApi.getInstance().sendMessage(mReceivers, message, this, new SendMessageListener() { @Override public void finishSendWMessage(List<WContact> contact, WMessage message) { Toast.makeText(MainActivity.this, "your message has been sent successfully", Toast.LENGTH_SHORT).show(); } }); } catch (WhatsappNotInstalledException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); MediaPicker.handleActivityResult(this, requestCode, resultCode, data, new MediaPicker.OnResult() { @Override public void onError(IOException e) { Log.e("MediaPicker", "Got file error.", e); e.printStackTrace(); attachmentFile = null; mAttachmentTv.setText(""); } @Override public void onSuccess(File mediaFile, String mimeType, RequestType request) { attachmentFile = mediaFile; mAttachmentTv.setText("Attachment file: " + mediaFile.getName()); } @Override public void onCancelled() { Log.e("MediaPicker", "Got cancelled event."); attachmentFile = null; mAttachmentTv.setText(""); } }); } @Override public void onError(IOException e) { e.printStackTrace(); } @Override public Context getContext() { return this; } @Override public File getImageFile() { return null; } }