diff --git a/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java b/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java index 685f3d723a55bbc0bc1cab295d075958bb2dc98b..b2e344e4e836b5607a53541d74564543701b718e 100644 --- a/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java +++ b/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java @@ -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 diff --git a/ring-android/app/src/main/java/cx/ring/dependencyinjection/RingInjectionComponent.java b/ring-android/app/src/main/java/cx/ring/dependencyinjection/RingInjectionComponent.java index 679e0d8082c8216ccdd53c6fda121f8a9195dc71..7bdd4f687573b3dd78893144713b935c08b8f4c7 100755 --- a/ring-android/app/src/main/java/cx/ring/dependencyinjection/RingInjectionComponent.java +++ b/ring-android/app/src/main/java/cx/ring/dependencyinjection/RingInjectionComponent.java @@ -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); diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java index 5406aa97ebbbb824d695b183d1657c589dab910f..00becc8f25ef5046f91533a27a61acea7a9aaa7f 100644 --- a/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java +++ b/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java @@ -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); } diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/CallContact.java b/ring-android/libringclient/src/main/java/cx/ring/model/CallContact.java index 583280624531a29e6e064dca3b2a11fdb217f263..64a7330707e9032d38fe742d147e55645ceed1a5 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/model/CallContact.java +++ b/ring-android/libringclient/src/main/java/cx/ring/model/CallContact.java @@ -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)); diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/StateService.java b/ring-android/libringclient/src/main/java/cx/ring/services/StateService.java index e19303413cf5989f67c1bd19c04c220037d98b4b..0c0ea3ccb5fc350d9af0f3b3ab9bb30f3a54433f 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/services/StateService.java +++ b/ring-android/libringclient/src/main/java/cx/ring/services/StateService.java @@ -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()); + } + }