Skip to content
Snippets Groups Projects
Commit c8741e1b authored by Thibault Wittemberg's avatar Thibault Wittemberg Committed by gerrit2
Browse files

blockchain: fix send text messages to contacts found on blockchain

We could not send text messages to users found via the blockchain.
Only the registered username was given to the ConversationActivity.
We now keep the CallContact (with its RingID) in a list in the
StateService so we can find him whenever we want and contact him
with its RingID.

Change-Id: I16dc72c0a711989944a60cddc35fc8b72df7989a
Tuleap: #1266
parent 535b96c7
No related branches found
No related tags found
No related merge requests found
......@@ -55,10 +55,13 @@ import android.widget.TextView;
import java.util.List;
import javax.inject.Inject;
import cx.ring.R;
import cx.ring.adapters.ContactDetailsTask;
import cx.ring.adapters.ConversationAdapter;
import cx.ring.adapters.NumberAdapter;
import cx.ring.application.RingApplication;
import cx.ring.model.Account;
import cx.ring.model.CallContact;
import cx.ring.model.Conference;
......@@ -66,6 +69,7 @@ import cx.ring.model.Conversation;
import cx.ring.model.Phone;
import cx.ring.model.Uri;
import cx.ring.service.LocalService;
import cx.ring.services.StateService;
import cx.ring.utils.ActionHelper;
import cx.ring.utils.ClipboardHelper;
import cx.ring.utils.ContentUriHandler;
......@@ -74,6 +78,10 @@ public class ConversationActivity extends AppCompatActivity implements
Conversation.ConversationActionCallback,
ClipboardHelper.ClipboardHelperCallback,
ContactDetailsTask.DetailsLoadedCallback {
@Inject
StateService mStateService;
private static final String TAG = ConversationActivity.class.getSimpleName();
private static final String CONVERSATION_DELETE = "CONVERSATION_DELETE";
......@@ -106,6 +114,7 @@ public class ConversationActivity extends AppCompatActivity implements
String conv_id = i.getData().getLastPathSegment();
Uri number = new Uri(i.getStringExtra("number"));
Log.d(TAG, "getConversation " + conv_id + " " + number);
Conversation conv = s.getConversation(conv_id);
if (conv == null) {
......@@ -154,6 +163,7 @@ public class ConversationActivity extends AppCompatActivity implements
Pair<Conversation, Uri> conv = getConversation(mService, getIntent());
mConversation = conv.first;
mPreferredNumber = conv.second;
if (mConversation == null) {
finish();
return;
......@@ -161,6 +171,13 @@ public class ConversationActivity extends AppCompatActivity implements
ActionBar ab = getSupportActionBar();
if (ab != null) {
if (!mConversation.getContact().getPhones().isEmpty()) {
CallContact contact = mStateService.getContact(mConversation.getContact().getPhones().get(0).getNumber());
if (contact != null) {
mConversation.setContact(contact);
}
}
ab.setTitle(mConversation.getContact().getDisplayName());
}
......@@ -285,6 +302,9 @@ public class ConversationActivity extends AppCompatActivity implements
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Dependency injection
((RingApplication) getApplication()).getRingInjectionComponent().inject(this);
mMsgEditTxt = (EditText) findViewById(R.id.msg_input_txt);
mMsgEditTxt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
......
......@@ -24,7 +24,9 @@ import javax.inject.Singleton;
import cx.ring.about.AboutFragment;
import cx.ring.about.AboutPresenter;
import cx.ring.application.RingApplication;
import cx.ring.client.ConversationActivity;
import cx.ring.fragments.SmartListFragment;
import cx.ring.navigation.RingNavigationFragment;
import cx.ring.service.BootReceiver;
import cx.ring.service.LocalService;
import cx.ring.services.HistoryServiceImpl;
......@@ -33,7 +35,6 @@ import cx.ring.settings.SettingsFragment;
import cx.ring.settings.SettingsPresenter;
import cx.ring.share.ShareFragment;
import cx.ring.share.SharePresenter;
import cx.ring.navigation.RingNavigationFragment;
import dagger.Component;
@Singleton
......@@ -43,6 +44,8 @@ public interface RingInjectionComponent {
void inject(RingNavigationFragment view);
void inject(ConversationActivity activity);
void inject(AboutFragment fragment);
void inject(SmartListFragment fragment);
......
......@@ -134,7 +134,6 @@ public class SmartListFragment extends Fragment implements SearchView.OnQueryTex
@Inject
StateService mStateService;
final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
......@@ -313,12 +312,12 @@ public class SmartListFragment extends Fragment implements SearchView.OnQueryTex
if (currentAccount.isSip()) {
// sip search
displayNewContactRowWithName(query);
displayNewContactRowWithName(query, null);
} else {
Uri uri = new Uri(query);
if (uri.isRingId()) {
displayNewContactRowWithName(query);
displayNewContactRowWithName(query, null);
} else {
mNewContact.setVisibility(View.GONE);
}
......@@ -428,6 +427,10 @@ public class SmartListFragment extends Fragment implements SearchView.OnQueryTex
mSearchMenuItem.collapseActionView();
}
// We add the contact to the current State so that we can
// get it from whatever part of the app as "an already used contact"
mStateService.addContact(c);
Intent intent = new Intent()
.setClass(getActivity(), ConversationActivity.class)
.setAction(Intent.ACTION_VIEW)
......@@ -721,12 +724,12 @@ public class SmartListFragment extends Fragment implements SearchView.OnQueryTex
@Override
public void onFound(String name, String address) {
displayNewContactRowWithName(name);
displayNewContactRowWithName(name, address);
}
private void displayNewContactRowWithName(String name) {
private void displayNewContactRowWithName(String name, String address) {
((TextView) mNewContact.findViewById(R.id.display_name)).setText(name);
CallContact contact = CallContact.buildUnknown(name);
CallContact contact = CallContact.buildUnknown(name, address);
mNewContact.setTag(contact);
mNewContact.setVisibility(View.VISIBLE);
}
......@@ -735,7 +738,7 @@ public class SmartListFragment extends Fragment implements SearchView.OnQueryTex
public void onInvalidName(String name) {
Uri uri = new Uri(name);
if (uri.isRingId()) {
displayNewContactRowWithName(name);
displayNewContactRowWithName(name, null);
} else {
mNewContact.setVisibility(View.GONE);
}
......@@ -745,7 +748,7 @@ public class SmartListFragment extends Fragment implements SearchView.OnQueryTex
public void onError(String name, String address) {
Uri uri = new Uri(address);
if (uri.isRingId()) {
displayNewContactRowWithName(address);
displayNewContactRowWithName(name, address);
} else {
mNewContact.setVisibility(View.GONE);
}
......
......@@ -69,6 +69,17 @@ public class CallContact {
return new CallContact(UNKNOWN_ID, null, to, 0, phones, "", false);
}
public static CallContact buildUnknown(String to, String address) {
ArrayList<Phone> phones = new ArrayList<>();
if (address != null) {
phones.add(new Phone(address, 0));
} else {
phones.add(new Phone(to, 0));
}
return new CallContact(UNKNOWN_ID, null, to, 0, phones, "", false);
}
public static CallContact buildUnknown(String to, int type) {
ArrayList<Phone> phones = new ArrayList<>();
phones.add(new Phone(to, type));
......
......@@ -19,15 +19,21 @@
*/
package cx.ring.services;
import java.util.HashMap;
import java.util.Map;
import java.util.Observable;
import cx.ring.model.Account;
import cx.ring.model.CallContact;
import cx.ring.model.Uri;
public class StateService extends Observable {
private Account mCurrentAccount;
private Map<String, CallContact> mContacts;
public StateService() {
mContacts = new HashMap<>();
}
public Account getCurrentAccount() {
......@@ -39,4 +45,19 @@ public class StateService extends Observable {
setChanged();
notifyObservers();
}
public void addContact(CallContact contact) {
if (contact == null
|| contact.getPhones().isEmpty()
|| contact.getPhones().get(0) == null
|| contact.getPhones().get(0).getNumber() == null) {
return;
}
mContacts.put(contact.getPhones().get(0).getNumber().toString(), contact);
}
public CallContact getContact(Uri uri) {
return mContacts.get(uri.toString());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment