package org.awesomeapp.messenger.tasks; import android.os.AsyncTask; import android.os.IBinder; import android.os.RemoteException; import android.text.TextUtils; import android.util.Log; import java.util.List; import org.awesomeapp.messenger.crypto.otr.OtrAndroidKeyManagerImpl; import org.awesomeapp.messenger.service.IContactList; import org.awesomeapp.messenger.service.IContactListManager; import org.awesomeapp.messenger.service.IImConnection; import org.awesomeapp.messenger.ImApp; import org.awesomeapp.messenger.model.ImErrorInfo; /** * Created by n8fr8 on 6/9/15. */ public class AddContactAsyncTask extends AsyncTask<String, Void, Integer> { long mProviderId; long mAccountId; ImApp mApp; public AddContactAsyncTask(long providerId, long accountId, ImApp app) { mProviderId = providerId; mAccountId = accountId; mApp = app; } @Override public Integer doInBackground(String... strings) { String address = strings[0]; String fingerprint = strings[1]; String nickname = null; if (strings.length > 2) nickname = strings[2]; return addToContactList(address, fingerprint, nickname); } @Override protected void onPostExecute(Integer response) { super.onPostExecute(response); } private int addToContactList (String address, String otrFingperint, String nickname) { int res = -1; try { IImConnection conn = mApp.getConnection(mProviderId,-1); if (conn == null) conn = mApp.createConnection(mProviderId,mAccountId); IContactList list = getContactList(conn); if (list != null) { res = list.addContact(address, nickname); if (res != ImErrorInfo.NO_ERROR) { //what to do here? } if (!TextUtils.isEmpty(otrFingperint)) { OtrAndroidKeyManagerImpl.getInstance(mApp).verifyUser(address, otrFingperint); } //Contact contact = new Contact(new XmppAddress(address),address); //IContactListManager contactListMgr = conn.getContactListManager(); //contactListMgr.approveSubscription(contact); } } catch (RemoteException re) { Log.e(ImApp.LOG_TAG, "error adding contact", re); } return res; } private IContactList getContactList(IImConnection conn) { if (conn == null) { return null; } try { IContactListManager contactListMgr = conn.getContactListManager(); // Use the default list List<IBinder> lists = contactListMgr.getContactLists(); for (IBinder binder : lists) { IContactList list = IContactList.Stub.asInterface(binder); if (list.isDefault()) { return list; } } // No default list, use the first one as default list if (!lists.isEmpty()) { return IContactList.Stub.asInterface(lists.get(0)); } return null; } catch (RemoteException e) { // If the service has died, there is no list for now. return null; } } }