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