diff --git a/res/values/non_localizable_custom.xml b/res/values/non_localizable_custom.xml
index f99b87b04..8db855a1b 100644
--- a/res/values/non_localizable_custom.xml
+++ b/res/values/non_localizable_custom.xml
@@ -9,7 +9,6 @@
false
false
- false
false
false
false
diff --git a/src/org/linphone/CallActivity.java b/src/org/linphone/CallActivity.java
index 03e0be2b5..7922449bf 100644
--- a/src/org/linphone/CallActivity.java
+++ b/src/org/linphone/CallActivity.java
@@ -1557,12 +1557,12 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
}
private void setContactInformation(TextView contactName, ImageView contactPicture, LinphoneAddress lAddress) {
- Contact lContact = ContactsManager.getInstance().findContactWithAddress(contactName.getContext().getContentResolver(), lAddress);
+ LinphoneContact lContact = ContactsManager.getInstance().findContactFromAddress(contactName.getContext().getContentResolver(), lAddress);
if (lContact == null) {
contactName.setText(LinphoneUtils.getAddressDisplayName(lAddress));
contactPicture.setImageResource(R.drawable.avatar);
} else {
- contactName.setText(lContact.getName());
+ contactName.setText(lContact.getFullName());
LinphoneUtils.setImagePictureFromUri(contactPicture.getContext(), contactPicture, lContact.getPhotoUri(), lContact.getThumbnailUri());
}
}
@@ -1720,11 +1720,11 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
conferenceList.setId(index + 1);
TextView contact = (TextView) confView.findViewById(R.id.contactNameOrNumber);
- Contact lContact = ContactsManager.getInstance().findContactWithAddress(getContentResolver(),call.getRemoteAddress());
+ LinphoneContact lContact = ContactsManager.getInstance().findContactFromAddress(getContentResolver(),call.getRemoteAddress());
if (lContact == null) {
contact.setText(call.getRemoteAddress().getUserName());
} else {
- contact.setText(lContact.getName());
+ contact.setText(lContact.getFullName());
}
registerCallDurationTimer(confView, call);
diff --git a/src/org/linphone/CallAudioFragment.java b/src/org/linphone/CallAudioFragment.java
index a2fed87da..a31e04b0f 100644
--- a/src/org/linphone/CallAudioFragment.java
+++ b/src/org/linphone/CallAudioFragment.java
@@ -41,7 +41,6 @@ public class CallAudioFragment extends Fragment {
@Override
public void onAttach(Activity activity) {
- super.onAttach(activity);
incallActvityInstance = (CallActivity) activity;
if (incallActvityInstance != null) {
diff --git a/src/org/linphone/CallIncomingActivity.java b/src/org/linphone/CallIncomingActivity.java
index 8264e5c04..adbaaebf2 100644
--- a/src/org/linphone/CallIncomingActivity.java
+++ b/src/org/linphone/CallIncomingActivity.java
@@ -54,7 +54,6 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig
private LinphoneCoreListenerBase mListener;
private LinearLayout acceptUnlock;
private LinearLayout declineUnlock;
- private StatusFragment status;
private boolean isActive;
private float answerX;
private float declineX;
@@ -233,10 +232,10 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig
return;
}
LinphoneAddress address = mCall.getRemoteAddress();
- Contact contact = ContactsManager.getInstance().findContactWithAddress(getContentResolver(), address);
+ LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(getContentResolver(), address);
if (contact != null) {
LinphoneUtils.setImagePictureFromUri(this, contactPicture, contact.getPhotoUri(), contact.getThumbnailUri());
- name.setText(contact.getName());
+ name.setText(contact.getFullName());
} else {
name.setText(LinphoneUtils.getAddressDisplayName(address));
}
@@ -267,10 +266,6 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig
return super.onKeyDown(keyCode, event);
}
- public void updateStatusFragment(StatusFragment fragment) {
- status = fragment;
- }
-
private void decline() {
LinphoneManager.getLc().terminateCall(mCall);
finish();
diff --git a/src/org/linphone/CallOutgoingActivity.java b/src/org/linphone/CallOutgoingActivity.java
index 11c9d2c01..093d545dd 100644
--- a/src/org/linphone/CallOutgoingActivity.java
+++ b/src/org/linphone/CallOutgoingActivity.java
@@ -47,7 +47,6 @@ public class CallOutgoingActivity extends Activity implements OnClickListener{
private LinphoneCall mCall;
private LinphoneCoreListenerBase mListener;
private boolean isMicMuted, isSpeakerEnabled;
- private StatusFragment status;
public static CallOutgoingActivity instance() {
return instance;
@@ -57,10 +56,6 @@ public class CallOutgoingActivity extends Activity implements OnClickListener{
return instance != null;
}
- public void updateStatusFragment(StatusFragment fragment) {
- status = fragment;
- }
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -148,10 +143,10 @@ public class CallOutgoingActivity extends Activity implements OnClickListener{
}
LinphoneAddress address = mCall.getRemoteAddress();
- Contact contact = ContactsManager.getInstance().findContactWithAddress(getContentResolver(), address);
+ LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(getContentResolver(), address);
if (contact != null) {
LinphoneUtils.setImagePictureFromUri(this, contactPicture, contact.getPhotoUri(), contact.getThumbnailUri());
- name.setText(contact.getName());
+ name.setText(contact.getFullName());
} else {
name.setText(LinphoneUtils.getAddressDisplayName(address));
}
diff --git a/src/org/linphone/CallVideoFragment.java b/src/org/linphone/CallVideoFragment.java
index 19d4b705f..fc581d292 100644
--- a/src/org/linphone/CallVideoFragment.java
+++ b/src/org/linphone/CallVideoFragment.java
@@ -21,15 +21,13 @@ import org.linphone.compatibility.Compatibility;
import org.linphone.compatibility.CompatibilityScaleGestureDetector;
import org.linphone.compatibility.CompatibilityScaleGestureListener;
import org.linphone.core.LinphoneCall;
-import org.linphone.core.LinphoneCore;
import org.linphone.mediastream.Log;
import org.linphone.mediastream.video.AndroidVideoWindowImpl;
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
import android.app.Activity;
-//import android.opengl.GLSurfaceView;
-import android.os.Bundle;
import android.app.Fragment;
+import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
@@ -40,6 +38,7 @@ import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
+//import android.opengl.GLSurfaceView;
/**
* @author Sylvain Berfini
@@ -260,8 +259,6 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On
@Override
public void onAttach(Activity activity) {
- super.onAttach(activity);
-
inCallActivity = (CallActivity) activity;
if (inCallActivity != null) {
inCallActivity.bindVideoFragment(this);
diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java
index 24f50ea75..0e116f5ba 100644
--- a/src/org/linphone/ChatFragment.java
+++ b/src/org/linphone/ChatFragment.java
@@ -21,33 +21,27 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
-
-import android.app.Dialog;
-import android.app.Fragment;
-import android.graphics.Color;
-import android.graphics.Matrix;
import java.util.ArrayList;
import java.util.List;
-
+import java.util.Locale;
import org.linphone.compatibility.Compatibility;
import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneBuffer;
import org.linphone.core.LinphoneChatMessage;
+import org.linphone.core.LinphoneChatMessage.State;
import org.linphone.core.LinphoneChatRoom;
import org.linphone.core.LinphoneContent;
import org.linphone.core.LinphoneCore;
-import org.linphone.core.LinphoneChatMessage.State;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.core.LinphoneCoreListenerBase;
import org.linphone.mediastream.Log;
import org.linphone.ui.BubbleChat;
-import android.media.ExifInterface;
-import android.support.v4.content.CursorLoader;
-
import android.annotation.SuppressLint;
import android.app.Activity;
+import android.app.Dialog;
+import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
@@ -55,13 +49,16 @@ import android.content.res.Configuration;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Matrix;
import android.graphics.Rect;
+import android.media.ExifInterface;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Parcelable;
import android.provider.MediaStore;
+import android.support.v4.content.CursorLoader;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.ContextMenu;
@@ -106,21 +103,18 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
private LinphoneChatRoom chatRoom;
private String sipUri;
- private String displayName;
- private String pictureUri;
private EditText message;
private ImageView edit, selectAll, deselectAll, startCall, delete, sendImage, sendMessage, cancel;
private TextView contactName, remoteComposing;
private ImageView back, backToCall;
private EditText searchContactField;
private LinearLayout topBar, editList;
- private LinearLayout textLayout;
private SearchContactsListAdapter searchAdapter;
private ListView messagesList, resultContactsSearch;
private LayoutInflater inflater;
private boolean isEditMode = false;
- private Contact contact;
+ private LinphoneContact contact;
private Uri imageToUploadUri;
private String filePathToUpload;
private TextWatcher textWatcher;
@@ -152,8 +146,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
} else {
//Retrieve parameter from intent
sipUri = getArguments().getString("SipUri");
- displayName = getArguments().getString("DisplayName");
- pictureUri = getArguments().getString("PictureUri");
}
//Initialize UI
@@ -163,7 +155,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
resultContactsSearch = (ListView) view.findViewById(R.id.result_contacts);
editList = (LinearLayout) view.findViewById(R.id.edit_list);
- textLayout = (LinearLayout) view.findViewById(R.id.message_layout);
topBar = (LinearLayout) view.findViewById(R.id.top_bar);
sendMessage = (ImageView) view.findViewById(R.id.send_message);
@@ -468,7 +459,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
chatRoom = lc.getChatRoom(lAddress);
chatRoom.markAsRead();
LinphoneActivity.instance().updateMissedChatCount();
- contact = ContactsManager.getInstance().findContactWithAddress(getActivity().getContentResolver(), lAddress);
+ contact = ContactsManager.getInstance().findContactFromAddress(getActivity().getContentResolver(), lAddress);
if (chatRoom != null) {
displayChatHeader(lAddress);
dispayMessageList();
@@ -487,7 +478,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
private void displayChatHeader(LinphoneAddress address) {
if(contact != null) {
- contactName.setText(contact.getName());
+ contactName.setText(contact.getFullName());
} else if(address != null){
contactName.setText(LinphoneUtils.getAddressDisplayName(address));
}
@@ -495,9 +486,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
public void changeDisplayedChat(String newSipUri, String displayName, String pictureUri) {
this.sipUri = newSipUri;
- this.displayName = displayName;
- this.pictureUri = pictureUri;
-
initChatRoom(sipUri);
}
@@ -732,7 +720,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
//Start new conversation in fast chat
if(newChatConversation && chatRoom == null) {
- String address = searchContactField.getText().toString().toLowerCase();
+ String address = searchContactField.getText().toString().toLowerCase(Locale.getDefault());
if (address != null && !address.equals("")) {
initChatRoom(address);
}
@@ -748,7 +736,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
message.setListener(LinphoneManager.getInstance());
if (newChatConversation) {
- exitNewConversationMode(contact, lAddress.asStringUriOnly(), null);
+ exitNewConversationMode(lAddress.asStringUriOnly());
} else {
invalidate();
}
@@ -860,12 +848,10 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
class FileUploadPrepareTask extends AsyncTask {
private String path;
- private int imageSize;
private ProgressDialog progressDialog;
public FileUploadPrepareTask(Context context, String fileToUploadPath, int size) {
path = fileToUploadPath;
- imageSize = size;
progressDialog = new ProgressDialog(context);
progressDialog.setIndeterminate(true);
@@ -931,15 +917,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
}
}
- private void showPopupMenuAskingImageSize(final String filePath) {
- filePathToUpload = filePath;
- try {
- sendImage.showContextMenu();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ADD_PHOTO && resultCode == Activity.RESULT_OK) {
@@ -961,7 +938,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
}
//New conversation
- private void exitNewConversationMode(Contact c, String address, String username){
+ private void exitNewConversationMode(String address) {
sipUri = address;
searchContactField.setVisibility(View.GONE);
resultContactsSearch.setVisibility(View.GONE);
@@ -1006,10 +983,10 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
}
private class ContactAddress {
- Contact contact;
+ LinphoneContact contact;
String address;
- private ContactAddress(Contact c, String a){
+ private ContactAddress(LinphoneContact c, String a){
this.contact = c;
this.address = a;
}
@@ -1026,7 +1003,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
for (ContactAddress c : searchAdapter.contacts) {
String address = c.address;
if(address.startsWith("sip:")) address = address.substring(4);
- if (c.contact.getName().toLowerCase().startsWith(search.toLowerCase()) || address.toLowerCase().startsWith(search.toLowerCase())) {
+ if (c.contact.getFullName().toLowerCase(Locale.getDefault()).startsWith(search.toLowerCase(Locale.getDefault()))
+ || address.toLowerCase(Locale.getDefault()).startsWith(search.toLowerCase(Locale.getDefault()))) {
result.add(c);
}
}
@@ -1049,12 +1027,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
}
}
- public ListgetContactsList(){
+ public List getContactsList() {
List list = new ArrayList();
- if(ContactsManager.getInstance().getAllContacts() != null) {
- for (Contact con : ContactsManager.getInstance().getAllContacts()) {
- for (String numberOrAddress : con.getNumbersOrAddresses()) {
- list.add(new ContactAddress(con, numberOrAddress));
+ if(ContactsManager.getInstance().hasContacts()) {
+ for (LinphoneContact con : ContactsManager.getInstance().getContacts()) {
+ for (LinphoneNumberOrAddress noa : con.getNumbersOrAddresses()) {
+ list.add(new ContactAddress(con, noa.getValue()));
}
}
}
@@ -1092,10 +1070,10 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
}
final String a = contact.address;
- final Contact c = contact.contact;
+ final LinphoneContact c = contact.contact;
TextView name = (TextView) view.findViewById(R.id.contact_name);
- name.setText(c.getName());
+ name.setText(c.getFullName());
TextView address = (TextView) view.findViewById(R.id.contact_address);
address.setText(a);
@@ -1103,7 +1081,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
- exitNewConversationMode(c, a, null);
+ exitNewConversationMode(a);
}
});
diff --git a/src/org/linphone/ChatListFragment.java b/src/org/linphone/ChatListFragment.java
index a91efc074..ea9dcb7cc 100644
--- a/src/org/linphone/ChatListFragment.java
+++ b/src/org/linphone/ChatListFragment.java
@@ -17,9 +17,6 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
import java.util.List;
import org.linphone.core.LinphoneAddress;
@@ -30,17 +27,9 @@ import org.linphone.core.LinphoneCoreFactory;
import org.linphone.mediastream.Log;
import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.graphics.Bitmap;
-import android.graphics.Typeface;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Environment;
-import android.preference.PreferenceManager;
import android.app.Fragment;
+import android.graphics.Typeface;
+import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
@@ -59,7 +48,6 @@ import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
-import android.widget.RelativeLayout;
import android.widget.TextView;
/**
@@ -70,7 +58,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
private List mConversations, mDrafts;
private ListView chatList;
private TextView noChatHistory;
- private ImageView edit, selectAll, deselectAll, delete, newDiscussion, contactPicture, cancel, backInCall;
+ private ImageView edit, selectAll, deselectAll, delete, newDiscussion, cancel, backInCall;
private LinearLayout editList, topbar;
private boolean isEditMode = false;
@@ -323,32 +311,6 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
LinphoneActivity.instance().displayChat(sipUri);
}
}
-
- private String saveImageAsFile(int id, Bitmap bm) {
- try {
- String path = Environment.getExternalStorageDirectory().toString();
- if (!path.endsWith("/"))
- path += "/";
- path += "Pictures/";
- File directory = new File(path);
- directory.mkdirs();
-
- String filename = getString(R.string.picture_name_format).replace("%s", String.valueOf(id));
- File file = new File(path, filename);
-
- OutputStream fOut = null;
- fOut = new FileOutputStream(file);
-
- bm.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
- fOut.flush();
- fOut.close();
-
- return path + filename;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
class ChatListAdapter extends BaseAdapter {
@@ -386,7 +348,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
return view;
}
- Contact contact = ContactsManager.getInstance().findContactWithAddress(getActivity().getContentResolver(), address);
+ LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(getActivity().getContentResolver(), address);
String message = "";
Long time;
@@ -416,7 +378,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
}
displayName.setSelected(true); // For animation
- displayName.setText(contact == null ? LinphoneUtils.getAddressDisplayName(address) : contact.getName());
+ displayName.setText(contact == null ? LinphoneUtils.getAddressDisplayName(address) : contact.getFullName());
if(contact != null){
diff --git a/src/org/linphone/Contact.java b/src/org/linphone/Contact.java
index e1a0128a1..78b3667d1 100644
--- a/src/org/linphone/Contact.java
+++ b/src/org/linphone/Contact.java
@@ -32,6 +32,7 @@ import android.net.Uri;
/**
* @author Sylvain Berfini
+ * @deprecated
*/
public class Contact implements Serializable {
private static final long serialVersionUID = 3790717505065723499L;
diff --git a/src/org/linphone/ContactDetailsFragment.java b/src/org/linphone/ContactDetailsFragment.java
index f77b16ea4..5a6737913 100644
--- a/src/org/linphone/ContactDetailsFragment.java
+++ b/src/org/linphone/ContactDetailsFragment.java
@@ -17,23 +17,13 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-import java.io.InputStream;
-import java.util.ArrayList;
-
-import org.linphone.compatibility.Compatibility;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneProxyConfig;
-import org.linphone.mediastream.Log;
import android.annotation.SuppressLint;
-import android.app.AlertDialog;
import android.app.Dialog;
-import android.content.ContentProviderOperation;
-import android.content.DialogInterface;
-import android.graphics.BitmapFactory;
-import android.os.Bundle;
-import android.provider.ContactsContract;
import android.app.Fragment;
+import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -47,7 +37,7 @@ import android.widget.TextView;
* @author Sylvain Berfini
*/
public class ContactDetailsFragment extends Fragment implements OnClickListener {
- private Contact contact;
+ private LinphoneContact contact;
private ImageView editContact, deleteContact, back;
private LayoutInflater inflater;
private View view;
@@ -71,7 +61,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
} else {
to = v.getTag().toString();
}
- LinphoneActivity.instance().setAddresGoToDialerAndCall(to, contact.getName(), contact.getPhotoUri());
+ LinphoneActivity.instance().setAddresGoToDialerAndCall(to, contact.getFullName(), contact.getPhotoUri());
}
}
}
@@ -87,7 +77,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
};
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- contact = (Contact) getArguments().getSerializable("Contact");
+ contact = (LinphoneContact) getArguments().getSerializable("Contact");
this.inflater = inflater;
view = inflater.inflate(R.layout.contact, container, false);
@@ -112,38 +102,37 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
return view;
}
- public void changeDisplayedContact(Contact newContact) {
+ public void changeDisplayedContact(LinphoneContact newContact) {
contact = newContact;
- contact.refresh(getActivity().getContentResolver());
+ //contact.refresh();
displayContact(inflater, view);
}
@SuppressLint("InflateParams")
private void displayContact(LayoutInflater inflater, View view) {
ImageView contactPicture = (ImageView) view.findViewById(R.id.contact_picture);
- if (contact.getPhotoUri() != null) {
- InputStream input = Compatibility.getContactPictureInputStream(LinphoneActivity.instance().getContentResolver(), contact.getID());
- contactPicture.setImageBitmap(BitmapFactory.decodeStream(input));
+ if (contact.hasPhoto()) {
+ LinphoneUtils.setImagePictureFromUri(getActivity(), contactPicture, contact.getPhotoUri(), contact.getThumbnailUri());
} else {
contactPicture.setImageResource(R.drawable.avatar);
}
TextView contactName = (TextView) view.findViewById(R.id.contact_name);
- contactName.setText(contact.getName());
+ contactName.setText(contact.getFullName());
TableLayout controls = (TableLayout) view.findViewById(R.id.controls);
controls.removeAllViews();
- for (String numberOrAddress : contact.getNumbersOrAddresses()) {
+ for (LinphoneNumberOrAddress noa : contact.getNumbersOrAddresses()) {
boolean skip = false;
View v = inflater.inflate(R.layout.contact_control_row, null);
- String displayednumberOrAddress = numberOrAddress;
- if (numberOrAddress.startsWith("sip:")) {
+ String displayednumberOrAddress = noa.getValue();
+ if (displayednumberOrAddress.startsWith("sip:")) {
displayednumberOrAddress = displayednumberOrAddress.replace("sip:", "");
}
TextView label = (TextView) v.findViewById(R.id.address_label);
- if(LinphoneUtils.isSipAddress(numberOrAddress)) {
+ if (noa.isSIPAddress()) {
label.setText(R.string.sip_address);
skip |= getResources().getBoolean(R.bool.hide_contact_sip_addresses);
} else {
@@ -166,20 +155,19 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
LinphoneProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig();
if (lpc != null) {
displayednumberOrAddress = lpc.normalizePhoneNumber(displayednumberOrAddress);
- if (!displayednumberOrAddress.startsWith("sip:")) {
- numberOrAddress = "sip:" + displayednumberOrAddress;
+ String tag = noa.getValue();
+ if (!tag.startsWith("sip:")) {
+ tag = "sip:" + tag;
}
- String tag = numberOrAddress;
- if (!numberOrAddress.contains("@")) {
- tag = numberOrAddress + "@" + lpc.getDomain();
+ if (!tag.contains("@")) {
+ tag = tag + "@" + lpc.getDomain();
}
v.findViewById(R.id.contact_chat).setTag(tag);
} else {
- v.findViewById(R.id.contact_chat).setTag(numberOrAddress);
+ v.findViewById(R.id.contact_chat).setTag(noa.getValue());
}
- final String finalNumberOrAddress = numberOrAddress;
/*ImageView friend = (ImageView) v.findViewById(R.id.addFriend);
if (getResources().getBoolean(R.bool.enable_linphone_friends) && !displayChatAddressOnly) {
friend.setVisibility(View.VISIBLE);
@@ -226,8 +214,8 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
LinphoneActivity.instance().selectMenu(FragmentsAvailable.CONTACT_DETAIL);
LinphoneActivity.instance().hideTabBar(false);
}
- contact.refresh(getActivity().getContentResolver());
- if (contact.getName() == null || contact.getName().equals("")) {
+ contact.refresh();
+ if (contact.getFullName() == null || contact.getFullName().equals("")) {
//Contact has been deleted, return
LinphoneActivity.instance().displayContacts(false);
} else {
@@ -250,8 +238,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
- deleteExistingContact();
- ContactsManager.getInstance().removeContactFromLists(getActivity().getContentResolver(), contact);
+ contact.delete();
LinphoneActivity.instance().displayContacts(false);
dialog.dismiss();
}
@@ -270,22 +257,4 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
LinphoneActivity.instance().displayContacts(false);
}
}
-
- private void deleteExistingContact() {
- String select = ContactsContract.Data.CONTACT_ID + " = ?";
- String[] args = new String[] { contact.getID() };
-
- ArrayList ops = new ArrayList();
- ops.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI)
- .withSelection(select, args)
- .build()
- );
-
- try {
- getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
- ContactsManager.getInstance().removeAllFriends(contact);
- } catch (Exception e) {
- Log.w(e.getMessage() + ":" + e.getStackTrace());
- }
- }
}
diff --git a/src/org/linphone/ContactEditorFragment.java b/src/org/linphone/ContactEditorFragment.java
index e8621463f..9df4e3c39 100644
--- a/src/org/linphone/ContactEditorFragment.java
+++ b/src/org/linphone/ContactEditorFragment.java
@@ -77,9 +77,9 @@ public class ContactEditorFragment extends Fragment {
private static final int ADD_PHOTO = 1337;
private boolean isNewContact = true;
- private Contact contact;
+ private LinphoneContact contact;
private int contactID;
- private List numbersAndAddresses;
+ //private List numbersAndAddresses;
private ArrayList ops;
private int firstSipAddressIndex = -1;
private LinearLayout sipAddresses, numbers;
@@ -88,16 +88,15 @@ public class ContactEditorFragment extends Fragment {
private Uri imageToUploadUri;
private String fileToUploadPath;
private Bitmap imageToUpload;
- private Bitmap bitmapUnknown;
byte[] photoToAdd;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
this.inflater = inflater;
- contact = null;
+ /*contact = null;
if (getArguments() != null) {
if (getArguments().getSerializable("Contact") != null) {
- contact = (Contact) getArguments().getSerializable("Contact");
+ contact = (LinphoneContact) getArguments().getSerializable("Contact");
isNewContact = false;
contactID = Integer.parseInt(contact.getID());
contact.refresh(getActivity().getContentResolver());
@@ -181,7 +180,7 @@ public class ContactEditorFragment extends Fragment {
}
getFragmentManager().popBackStackImmediate();
} else {
- Contact updatedContact = contactsManager.findContactWithDisplayName(contactsManager.getDisplayName(firstName.getText().toString(), lastName.getText().toString()));
+ LinphoneContact updatedContact = contactsManager.findContactWithDisplayName(contactsManager.getDisplayName(firstName.getText().toString(), lastName.getText().toString()));
if (updatedContact != null) {
LinphoneActivity.instance().displayContact(updatedContact, false);
} else {
@@ -249,7 +248,7 @@ public class ContactEditorFragment extends Fragment {
firstName.setText(fn);
lastName.setText(ln);
} else {
- lastName.setText(contact.getName());
+ lastName.setText(contact.getFullName());
firstName.setText("");
}
deleteContact.setOnClickListener(new OnClickListener() {
@@ -262,8 +261,7 @@ public class ContactEditorFragment extends Fragment {
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
- deleteExistingContact();
- ContactsManager.getInstance().removeContactFromLists(getActivity().getContentResolver(), contact);
+ contact.delete();
LinphoneActivity.instance().displayContacts(false);
dialog.dismiss();
}
@@ -319,7 +317,7 @@ public class ContactEditorFragment extends Fragment {
});
ops = new ArrayList();
- lastName.requestFocus();
+ lastName.requestFocus();*/
return view;
}
@@ -348,7 +346,7 @@ public class ContactEditorFragment extends Fragment {
super.onPause();
}
- private void pickImage() {
+ /*private void pickImage() {
imageToUploadUri = null;
final List cameraIntents = new ArrayList();
final Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
@@ -419,24 +417,6 @@ public class ContactEditorFragment extends Fragment {
}
}
- private void deleteExistingContact() {
- String select = ContactsContract.Data.CONTACT_ID + " = ?";
- String[] args = new String[] { contact.getID() };
-
- ArrayList ops = new ArrayList();
- ops.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI)
- .withSelection(select, args)
- .build()
- );
-
- try {
- getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
- ContactsManager.getInstance().removeAllFriends(contact);
- } catch (Exception e) {
- Log.w(e.getMessage() + ":" + e.getStackTrace());
- }
- }
-
private void showPopupMenuAskingImageSize(final String filePath, final Bitmap image) {
fileToUploadPath = filePath;
imageToUpload = image;
@@ -962,5 +942,5 @@ public class ContactEditorFragment extends Fragment {
);
}
}
- }
+ }*/
}
\ No newline at end of file
diff --git a/src/org/linphone/ContactsListFragment.java b/src/org/linphone/ContactsListFragment.java
index 09ba25795..8d208787b 100644
--- a/src/org/linphone/ContactsListFragment.java
+++ b/src/org/linphone/ContactsListFragment.java
@@ -1,4 +1,3 @@
-package org.linphone;
/*
ContactsListFragment.java
Copyright (C) 2015 Belledonne Communications, Grenoble, France
@@ -17,23 +16,18 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-import java.util.ArrayList;
+
+package org.linphone;
+
import java.util.List;
-import org.linphone.compatibility.Compatibility;
import org.linphone.core.LinphoneFriend;
import org.linphone.core.PresenceActivityType;
-import org.linphone.mediastream.Log;
import android.annotation.SuppressLint;
import android.app.Dialog;
-import android.content.ContentProviderOperation;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.os.Bundle;
import android.app.Fragment;
-import android.provider.ContactsContract;
+import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
@@ -43,7 +37,6 @@ import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
-import android.widget.AlphabetIndexer;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
@@ -52,8 +45,6 @@ import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
-import android.widget.RelativeLayout;
-import android.widget.SectionIndexer;
import android.widget.TextView;
/**
@@ -69,12 +60,10 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
private View allContactsSelected, linphoneContactsSelected;
private LinearLayout editList, topbar;
private int lastKnownPosition;
- private AlphabetIndexer indexer;
private boolean editOnClick = false, editConsumed = false, onlyDisplayChatAddress = false;
private String sipAddressToAdd;
private ImageView clearSearchField;
private EditText searchField;
- private Cursor searchCursor;
private static ContactsListFragment instance;
@@ -284,31 +273,12 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
}
}
- private void deleteExistingContact(Contact contact) {
- String select = ContactsContract.Data.CONTACT_ID + " = ?";
- String[] args = new String[] { contact.getID() };
-
- ArrayList ops = new ArrayList();
- ops.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI)
- .withSelection(select, args)
- .build()
- );
-
- try {
- getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
- ContactsManager.getInstance().removeAllFriends(contact);
- } catch (Exception e) {
- Log.w(e.getMessage() + ":" + e.getStackTrace());
- }
- }
-
private void removeContacts(){
int size = contactsList.getAdapter().getCount();
for(int i=0; i 0) {
- LinphoneActivity.instance().displayContact((Contact) contactsList.getAdapter().getItem(0), false);
+ LinphoneActivity.instance().displayContact((LinphoneContact) contactsList.getAdapter().getItem(0), false);
} else {
LinphoneActivity.instance().displayEmptyFragment();
}
@@ -341,73 +311,31 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
return;
}
changeContactsToggle();
-
- if (searchCursor != null) {
- searchCursor.close();
- }
- if(LinphoneActivity.instance().getResources().getBoolean(R.bool.use_linphone_friend)) {
- //searchCursor = Compatibility.getSIPContactsCursor(getActivity().getContentResolver(), search, ContactsManager.getInstance().getContactsId());
- //indexer = new AlphabetIndexer(searchCursor, Compatibility.getCursorDisplayNameColumnIndex(searchCursor), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- //contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- //contactsList.setAdapter(new ContactsListAdapter(null, searchCursor));
- } else{
- if (onlyDisplayLinphoneContacts) {
- searchCursor = Compatibility.getSIPContactsCursor(getActivity().getContentResolver(), search, ContactsManager.getInstance().getContactsId());
- indexer = new AlphabetIndexer(searchCursor, Compatibility.getCursorDisplayNameColumnIndex(searchCursor), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- contactsList.setAdapter(new ContactsListAdapter(null, searchCursor));
- } else {
- searchCursor = Compatibility.getContactsCursor(getActivity().getContentResolver(), search, ContactsManager.getInstance().getContactsId());
- contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- indexer = new AlphabetIndexer(searchCursor, Compatibility.getCursorDisplayNameColumnIndex(searchCursor), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- contactsList.setAdapter(new ContactsListAdapter(null, searchCursor));
- }
+ if (onlyDisplayLinphoneContacts) {
+ contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
+ contactsList.setAdapter(new ContactsListAdapter(ContactsManager.getInstance().getSIPContacts()));
+ } else {
+ contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
+ contactsList.setAdapter(new ContactsListAdapter(ContactsManager.getInstance().getContacts()));
}
}
private void changeContactsAdapter() {
changeContactsToggle();
-
- if (searchCursor != null) {
- searchCursor.close();
- }
-
- Cursor allContactsCursor = ContactsManager.getInstance().getAllContactsCursor();
- Cursor sipContactsCursor = ContactsManager.getInstance().getSIPContactsCursor();
noSipContact.setVisibility(View.GONE);
noContact.setVisibility(View.GONE);
contactsList.setVisibility(View.VISIBLE);
- if(LinphoneActivity.instance().getResources().getBoolean(R.bool.use_linphone_friend)) {
- indexer = new AlphabetIndexer(allContactsCursor, Compatibility.getCursorDisplayNameColumnIndex(allContactsCursor), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+ if (onlyDisplayLinphoneContacts) {
contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- contactsList.setAdapter(new ContactsListAdapter(ContactsManager.getInstance().getAllContacts(), allContactsCursor));
+ contactsList.setAdapter(new ContactsListAdapter(ContactsManager.getInstance().getSIPContacts()));
+ edit.setEnabled(true);
} else {
- if (onlyDisplayLinphoneContacts) {
- if (sipContactsCursor != null && sipContactsCursor.getCount() > 0) {
- indexer = new AlphabetIndexer(sipContactsCursor, Compatibility.getCursorDisplayNameColumnIndex(sipContactsCursor), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- contactsList.setAdapter(new ContactsListAdapter(ContactsManager.getInstance().getSIPContacts(), sipContactsCursor));
- edit.setEnabled(true);
- } else {
- noSipContact.setVisibility(View.VISIBLE);
- contactsList.setVisibility(View.GONE);
- edit.setEnabled(false);
- }
- } else {
- if (allContactsCursor != null && allContactsCursor.getCount() > 0) {
- indexer = new AlphabetIndexer(allContactsCursor, Compatibility.getCursorDisplayNameColumnIndex(allContactsCursor), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- contactsList.setAdapter(new ContactsListAdapter(ContactsManager.getInstance().getAllContacts(), allContactsCursor));
- edit.setEnabled(true);
- } else {
- noContact.setVisibility(View.VISIBLE);
- contactsList.setVisibility(View.GONE);
- edit.setEnabled(false);
- }
- }
+ contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
+ contactsList.setAdapter(new ContactsListAdapter(ContactsManager.getInstance().getContacts()));
+ edit.setEnabled(true);
}
ContactsManager.getInstance().setLinphoneContactsPrefered(onlyDisplayLinphoneContacts);
}
@@ -428,7 +356,7 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
@Override
public void onItemClick(AdapterView> adapter, View view, int position, long id) {
- Contact contact = (Contact) adapter.getItemAtPosition(position);
+ LinphoneContact contact = (LinphoneContact) adapter.getItemAtPosition(position);
if (editOnClick) {
editConsumed = true;
LinphoneActivity.instance().editContact(contact, sipAddressToAdd);
@@ -460,9 +388,6 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
@Override
public void onPause() {
instance = null;
- if (searchCursor != null) {
- searchCursor.close();
- }
super.onPause();
}
@@ -475,34 +400,19 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
contactsList.setSelectionFromTop(lastKnownPosition, 0);
}
- class ContactsListAdapter extends BaseAdapter implements SectionIndexer {
- private int margin;
- private Bitmap bitmapUnknown;
- private List contacts;
- private Cursor cursor;
+ class ContactsListAdapter extends BaseAdapter {
+ private List contacts;
- ContactsListAdapter(List contactsList, Cursor c) {
+ ContactsListAdapter(List contactsList) {
contacts = contactsList;
- cursor = c;
-
- margin = LinphoneUtils.pixelsToDpi(LinphoneActivity.instance().getResources(), 10);
- bitmapUnknown = BitmapFactory.decodeResource(LinphoneActivity.instance().getResources(), R.drawable.avatar);
}
public int getCount() {
- if(LinphoneActivity.instance().getResources().getBoolean(R.bool.use_linphone_friend)) {
- return LinphoneManager.getLc().getFriendList().length;
- } else {
- return cursor.getCount();
- }
+ return contacts.size();
}
public Object getItem(int position) {
- if (contacts == null || position >= contacts.size()) {
- return Compatibility.getContact(getActivity().getContentResolver(), cursor, position);
- } else {
- return contacts.get(position);
- }
+ return contacts.get(position);
}
public long getItemId(int position) {
@@ -511,9 +421,9 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
- Contact contact = null;
+ LinphoneContact contact = null;
do {
- contact = (Contact) getItem(position);
+ contact = (LinphoneContact) getItem(position);
} while (contact == null);
if (convertView != null) {
@@ -525,20 +435,14 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
CheckBox delete = (CheckBox) view.findViewById(R.id.delete);
TextView name = (TextView) view.findViewById(R.id.name);
- name.setText(contact.getName());
+ name.setText(contact.getFullName());
LinearLayout separator = (LinearLayout) view.findViewById(R.id.separator);
- TextView separatorText = (TextView) view.findViewById(R.id.separator_text);
- if (getPositionForSection(getSectionForPosition(position)) != position) {
- separator.setVisibility(View.GONE);
- } else {
- separator.setVisibility(View.VISIBLE);
- separatorText.setText(String.valueOf(contact.getName().charAt(0)));
- }
+ separator.setVisibility(View.GONE);
ImageView icon = (ImageView) view.findViewById(R.id.contact_picture);
- if (contact.getPhoto() != null) {
- icon.setImageBitmap(contact.getPhoto());
+ if (contact.hasPhoto()) {
+ LinphoneUtils.setImagePictureFromUri(getActivity(), icon, contact.getPhotoUri(), contact.getThumbnailUri());
} else if (contact.getPhotoUri() != null) {
icon.setImageURI(contact.getPhotoUri());
} else {
@@ -568,7 +472,7 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
}
}
});
- if(contactsList.isItemChecked(position)) {
+ if (contactsList.isItemChecked(position)) {
delete.setChecked(true);
} else {
delete.setChecked(false);
@@ -597,20 +501,5 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
return view;
}
-
- @Override
- public int getPositionForSection(int section) {
- return indexer.getPositionForSection(section);
- }
-
- @Override
- public int getSectionForPosition(int position) {
- return indexer.getSectionForPosition(position);
- }
-
- @Override
- public Object[] getSections() {
- return indexer.getSections();
- }
}
}
diff --git a/src/org/linphone/ContactsManager.java b/src/org/linphone/ContactsManager.java
index 2c0f1814e..e3ff7dd3d 100644
--- a/src/org/linphone/ContactsManager.java
+++ b/src/org/linphone/ContactsManager.java
@@ -1,6 +1,5 @@
-package org.linphone;
/*
-CallManager.java
+ContactsManager.java
Copyright (C) 2015 Belledonne Communications, Grenoble, France
This program is free software; you can redistribute it and/or
@@ -18,63 +17,57 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.content.ContentProviderOperation;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.provider.ContactsContract;
+package org.linphone;
+
+import java.util.ArrayList;
+import java.util.List;
import org.linphone.compatibility.Compatibility;
import org.linphone.core.LinphoneAddress;
-import org.linphone.core.LinphoneCore;
-import org.linphone.core.LinphoneCoreException;
-import org.linphone.core.LinphoneCoreFactory;
import org.linphone.core.LinphoneFriend;
-import org.linphone.core.LinphoneProxyConfig;
import org.linphone.mediastream.Log;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Data;
public class ContactsManager {
private static ContactsManager instance;
- private List contactList, sipContactList;
- private Cursor contactCursor, sipContactCursor;
+ private List contacts;
+ //private Cursor contactCursor, sipContactCursor;
private Account mAccount;
private boolean preferLinphoneContacts = false, isContactPresenceDisabled = true, hasContactAccess = false;
private ContentResolver contentResolver;
- private Context context;
private ContactsManager() {}
+
+ public ContentResolver getContentResolver() {
+ return contentResolver;
+ }
public static final synchronized ContactsManager getInstance() {
if (instance == null) instance = new ContactsManager();
return instance;
}
-
- public List getAllContacts() {
- return contactList;
- }
-
- public List getSIPContacts() {
- return sipContactList;
- }
-
- public Cursor getAllContactsCursor() {
- return contactCursor;
- }
-
- public Cursor getSIPContactsCursor() {
- return sipContactCursor;
+
+ public boolean hasContacts() {
+ return contacts.size() > 0;
}
- public void enabledContactsAccess(){
+ public List getContacts() {
+ return contacts;
+ }
+
+ public List getSIPContacts() {
+ return contacts;
+ }
+
+ public void enableContactsAccess() {
hasContactAccess = true;
}
@@ -91,7 +84,6 @@ public class ContactsManager {
}
public void initializeContactManager(Context context, ContentResolver contentResolver){
- this.context = context;
this.contentResolver = contentResolver;
}
@@ -113,529 +105,59 @@ public class ContactsManager {
} else {
mAccount = accounts[0];
}
- initializeContactManager(context,contentResolver);
+ initializeContactManager(context, contentResolver);
}
-
- public String getDisplayName(String firstName, String lastName) {
- String displayName = null;
- if (firstName.length() > 0 && lastName.length() > 0)
- displayName = firstName + " " + lastName;
- else if (firstName.length() > 0)
- displayName = firstName;
- else if (lastName.length() > 0)
- displayName = lastName.toString();
- return displayName;
+
+ public LinphoneContact findContactFromAddress(LinphoneAddress address) {
+ return findContactFromAddress(null, address);
}
-
- //Contacts
- public void createNewContact(ArrayList ops, String firstName, String lastName) {
- int contactID = 0;
-
- ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
- .withValue(ContactsContract.RawContacts.AGGREGATION_MODE, ContactsContract.RawContacts.AGGREGATION_MODE_DEFAULT)
- .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
- .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
- .build()
- );
-
- if (getDisplayName(firstName, lastName) != null) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, contactID)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, firstName)
- .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, lastName)
- .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, getDisplayName(firstName, lastName))
- .build()
- );
- }
- }
-
- public void updateExistingContact(ArrayList ops, Contact contact, String firstName, String lastName) {
- if (getDisplayName(firstName, lastName) != null) {
- String select = ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE + "'";
- String[] args = new String[]{String.valueOf(contact.getID())};
-
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(select, args)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, firstName)
- .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, lastName)
- .build()
- );
- }
- }
-
- public void updateExistingContactPicture(ArrayList ops, Contact contact, String path){
- String select = ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'";
- String[] args =new String[]{String.valueOf(contact.getID())};
-
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(select, args)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID, path)
- //.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID, )
- .build()
- );
- }
-
-//Manage Linphone Friend if we cannot use Sip address
- public boolean createNewFriend(Contact contact, String sipUri) {
- if (!sipUri.startsWith("sip:")) {
- sipUri = "sip:" + sipUri;
- }
-
- LinphoneFriend friend = LinphoneCoreFactory.instance().createLinphoneFriend(sipUri);
- if (friend != null) {
- friend.edit();
- friend.enableSubscribes(false);
- friend.setRefKey(contact.getID());
- friend.done();
- try {
- LinphoneManager.getLcIfManagerNotDestroyedOrNull().addFriend(friend);
- return true;
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- return false;
- }
- } else {
- return false;
- }
- }
-
- public void updateFriend(String oldSipUri, String newSipUri) {
- if (!newSipUri.startsWith("sip:")) {
- newSipUri = "sip:" + newSipUri;
- }
-
- if (!oldSipUri.startsWith("sip:")) {
- oldSipUri = "sip:" + oldSipUri;
- }
-
- LinphoneFriend friend = LinphoneManager.getLcIfManagerNotDestroyedOrNull().findFriendByAddress(oldSipUri);
- if (friend != null) {
- friend.edit();
- try {
- friend.setAddress(LinphoneCoreFactory.instance().createLinphoneAddress(newSipUri));
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
- }
- friend.done();
- }
- }
-
- public boolean removeFriend(String sipUri) {
- if (!sipUri.startsWith("sip:")) {
- sipUri = "sip:" + sipUri;
- }
-
- LinphoneFriend friend = LinphoneManager.getLcIfManagerNotDestroyedOrNull().findFriendByAddress(sipUri);
- if (friend != null) {
- LinphoneManager.getLcIfManagerNotDestroyedOrNull().removeFriend(friend);
- return true;
- }
- return false;
- }
-
- public void removeAllFriends(Contact contact) {
- for (LinphoneFriend friend : LinphoneManager.getLcIfManagerNotDestroyedOrNull().getFriendList()) {
- if (friend.getRefKey().equals(contact.getID())) {
- LinphoneManager.getLcIfManagerNotDestroyedOrNull().removeFriend(friend);
- }
- }
- }
-
- public Contact findContactWithDisplayName(String displayName) {
- String[] projection = {ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME};
- String selection = new StringBuilder()
- .append(ContactsContract.Data.DISPLAY_NAME)
- .append(" = ?").toString();
-
- Cursor c = contentResolver.query(ContactsContract.Data.CONTENT_URI, projection, selection,
- new String[]{displayName}, null);
- if (c != null) {
- if (c.moveToFirst()) {
- Contact contact = Compatibility.getContact(contentResolver, c, c.getPosition());
- c.close();
-
- if (contact != null) {
- return contact;
- } else {
- return null;
- }
- }
- c.close();
- }
- return null;
- }
-
- public Contact getContact(String id, ContentResolver contentResolver){
- String[] projection = {ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME};
- String selection = new StringBuilder()
- .append(ContactsContract.Data.CONTACT_ID)
- .append(" = ?").toString();
-
- Cursor c = contentResolver.query(ContactsContract.Data.CONTENT_URI, projection, selection, new String[]{id}, null);
- if(c!=null){
- if (c.moveToFirst()) {
- Contact contact = Compatibility.getContact(contentResolver, c, c.getPosition());
- c.close();
-
- if (contact != null) {
- return contact;
- } else {
- return null;
- }
- }
- c.close();
- }
- return null;
- }
-
- public List getContactsId(){
- List ids = new ArrayList();
- if(LinphoneManager.getLcIfManagerNotDestroyedOrNull().getFriendList() == null) return null;
- for(LinphoneFriend friend : LinphoneManager.getLcIfManagerNotDestroyedOrNull().getFriendList()) {
- friend.edit();
- friend.enableSubscribes(false);
- friend.done();
- if(!ids.contains(friend.getRefKey())){
- ids.add(friend.getRefKey());
- }
- }
-
- return ids;
- }
-//End linphone Friend
-
- public boolean removeContactTagIsNeeded(Contact contact){
- LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
- if (lc != null) {
- LinphoneProxyConfig lpc = lc.createProxyConfig();
- contact.refresh(contentResolver);
- for (String address : contact.getNumbersOrAddresses()) {
- if (!lpc.isPhoneNumber(address)) {
- return false;
- }
- }
- return true;
- }
- return false;
- }
-
- public void removeLinphoneContactTag(Contact contact){
- ArrayList ops = new ArrayList();
- String select = ContactsContract.RawContacts._ID + " = ?";
- String[] args = new String[] { findRawLinphoneContactID(contact.getID()) };
-
-
- ops.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI)
- .withSelection(select, args)
- .build()
- );
-
- try {
- contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
- } catch (Exception e) {
- Log.w(e.getMessage() + ":" + e.getStackTrace());
- }
- }
-
- private Contact checkPhoneQueryResult(ContentResolver contentResolver, Cursor c, String columnPhone, String columnId, String username) {
- boolean contactFound = false;
-
- if (c != null) {
- while (!contactFound && c.moveToNext()) {
- String phone = c.getString(c.getColumnIndex(columnPhone));
- if (phone.equals(username)) {
- contactFound = true;
- } else {
- String normalizedUsername = null;
- LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
- if (lc != null) {
- LinphoneProxyConfig lpc = lc.getDefaultProxyConfig();
- if (lpc != null) {
- normalizedUsername = lpc.normalizePhoneNumber(phone);
- }
- }
-
- if (normalizedUsername != null && normalizedUsername.equals(username)) {
- contactFound = true;
- }
- }
-
- if(contactFound){
- Contact contact = getContact(c.getString(c.getColumnIndex(columnId)), contentResolver);
- c.close();
- return contact;
- }
- }
- c.close();
- }
- return null;
- }
-
- public Contact findContactWithAddress(LinphoneAddress address) {
+
+ public LinphoneContact findContactFromAddress(ContentResolver contentResolver, LinphoneAddress address) {
String sipUri = address.asStringUriOnly();
- if (sipUri.startsWith("sip:"))
+ if (sipUri.startsWith("sip:")) {
sipUri = sipUri.substring(4);
+ }
- for(Contact c: getAllContacts()){
- for(String a: c.getNumbersOrAddresses()){
- if(a.equals(sipUri))
+ for (LinphoneContact c: getContacts()) {
+ for (LinphoneNumberOrAddress noa: c.getNumbersOrAddresses()) {
+ if (noa.getValue().equals(sipUri)) {
return c;
- }
- }
- return null;
- }
-
- public Contact findContactWithAddress(ContentResolver contentResolver, LinphoneAddress address){
- String sipUri = address.asStringUriOnly();
- if (sipUri.startsWith("sip:"))
- sipUri = sipUri.substring(4);
-
- LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
- if(lc != null && lc.getFriendList() != null && LinphoneManager.getLcIfManagerNotDestroyedOrNull().getFriendList().length > 0) {
- for (LinphoneFriend friend : LinphoneManager.getLcIfManagerNotDestroyedOrNull().getFriendList()) {
- if (friend.getAddress().equals(address)) {
- return getContact(friend.getRefKey(), contentResolver);
}
}
}
-
- //Find Sip address
- if(hasContactAccess) {
- Contact contact;
- String[] projection = new String[]{ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME};
- String selection = new StringBuilder()
- .append(ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS)
- .append(" = ?").toString();
-
- Cursor cur = contentResolver.query(ContactsContract.Data.CONTENT_URI, projection, selection,
- new String[]{sipUri}, null);
- if (cur != null) {
- if (cur.moveToFirst()) {
- contact = Compatibility.getContact(contentResolver, cur, cur.getPosition());
- cur.close();
-
- if (contact != null) {
- return contact;
- }
- }
- cur.close();
- }
-
- //Find number
- Uri lookupUri = Uri.withAppendedPath(android.provider.ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(address.getUserName()));
- projection = new String[]{ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.NUMBER, ContactsContract.PhoneLookup.DISPLAY_NAME};
- Cursor c = contentResolver.query(lookupUri, projection, null, null, null);
- contact = checkPhoneQueryResult(contentResolver, c, ContactsContract.PhoneLookup.NUMBER, ContactsContract.PhoneLookup._ID, address.getUserName());
-
- if (contact != null) {
- return contact;
- }
- }
-
return null;
}
- public void removeContactFromLists(ContentResolver contentResolver, Contact contact) {
- for (Contact c : contactList) {
- if (c != null && c.getID().equals(contact.getID())) {
- contactList.remove(c);
- contactCursor = Compatibility.getContactsCursor(contentResolver,getContactsId());
- break;
- }
- }
-
- for (Contact c : sipContactList) {
- if (c != null && c.getID().equals(contact.getID())) {
- sipContactList.remove(c);
- sipContactCursor = Compatibility.getSIPContactsCursor(contentResolver,getContactsId());
- break;
- }
- }
- }
-
- public boolean isContactHasAddress(Contact contact, String address){
- if(contact != null) {
- contact.refresh(contentResolver);
- return contact.getNumbersOrAddresses().contains(address) || contact.getNumbersOrAddresses().contains("sip:" + address);
- }
- return false;
- }
-
- public String findRawContactID(ContentResolver cr, String contactID) {
- Cursor c = cr.query(ContactsContract.RawContacts.CONTENT_URI,
- new String[]{ContactsContract.RawContacts._ID},
- ContactsContract.RawContacts.CONTACT_ID + "=?",
- new String[]{contactID}, null);
- if (c != null) {
- String result = null;
- if (c.moveToFirst()) {
- result = c.getString(c.getColumnIndex(ContactsContract.RawContacts._ID));
- }
-
- c.close();
- return result;
- }
- return null;
- }
-
- public String findRawLinphoneContactID(String contactID) {
- String result = null;
- String[] projection = { ContactsContract.RawContacts._ID };
-
- String selection = ContactsContract.RawContacts.CONTACT_ID + "=? AND "
- + ContactsContract.RawContacts.ACCOUNT_TYPE + "=? ";
-
- Cursor c = contentResolver.query(ContactsContract.RawContacts.CONTENT_URI, projection,
- selection, new String[]{contactID, "org.linphone"}, null);
- if (c != null) {
- if (c.moveToFirst()) {
- result = c.getString(c.getColumnIndex(ContactsContract.RawContacts._ID));
- }
- }
- c.close();
- return result;
- }
-
- //Migrate old IM contacts into SIP addresses or linphoneFriends
- public void migrateContacts() {
- Cursor oldContacts = Compatibility.getImContactsCursor(contentResolver);
- ArrayList ops = new ArrayList();
-
- if(oldContacts != null){
- for (int i = 0; i < oldContacts.getCount(); i++) {
- Contact contact = Compatibility.getContact(contentResolver, oldContacts, i);
- for (String address : Compatibility.extractContactImAddresses(contact.getID(), contentResolver)) {
- if (LinphoneUtils.isSipAddress(address)) {
- if (address.startsWith("sip:")) {
- address = address.substring(4);
- }
-
- //Add new sip address
- Compatibility.addSipAddressToContact(context, ops, address, findRawContactID(contentResolver, contact.getID()));
- try {
- contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- ops.clear();
-
- contact.refresh(contentResolver);
-
- //If address sip is correctly add, remove the im address
- if(contact.getNumbersOrAddresses().contains(address)){
- Compatibility.deleteImAddressFromContact(ops, address, contact.getID());
- try {
- contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
- } catch (Exception e) {
- e.printStackTrace();
- }
- ops.clear();
- } else {
- //Add linphone friend instead
- if(createNewFriend(contact, address)) {
- contact.refresh(contentResolver);
-
- //Remove IM address
- Compatibility.deleteImAddressFromContact(ops, address, contact.getID());
- try {
- contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
- } catch (Exception e) {
- e.printStackTrace();
-
- }
- }
- }
- }
- ops.clear();
- }
- }
- oldContacts.close();
- }
-
- }
-
public synchronized void prepareContactsInBackground() {
- if (contactCursor != null) {
- contactCursor.close();
- }
- if (sipContactCursor != null) {
- sipContactCursor.close();
+ contacts = new ArrayList();
+
+ for (LinphoneFriend friend : LinphoneManager.getLc().getFriendList()) {
+ LinphoneContact contact = new LinphoneContact();
+ LinphoneAddress addr = friend.getAddress();
+ contact.setFullName(addr.getDisplayName());
+ contact.addNumberOrAddress(new LinphoneNumberOrAddress(addr.asStringUriOnly(), true));
+ contacts.add(contact);
}
- if(LinphoneActivity.instance().getResources().getBoolean(R.bool.use_linphone_friend)){
- contactList = new ArrayList();
- for(LinphoneFriend friend : LinphoneManager.getLc().getFriendList()){
- Contact contact = new Contact(friend.getRefKey(),friend.getAddress());
- contactList.add(contact);
+ if (mAccount == null || !hasContactAccess) return;
+
+ Cursor c = Compatibility.getContactsCursor(contentResolver, null);
+ if (c != null) {
+ c.moveToFirst();
+ do {
+ String id = c.getString(c.getColumnIndex(Data.CONTACT_ID));
+ LinphoneContact contact = new LinphoneContact();
+ contact.setAndroidId(id);
+ contact.refresh();
+ contacts.add(contact);
}
-
- contactCursor = getFriendListCursor(contactList,true);
- return;
+ while (c.moveToNext());
}
-
- if(mAccount == null) return;
-
- contactCursor = Compatibility.getContactsCursor(contentResolver, getContactsId());
- sipContactCursor = Compatibility.getSIPContactsCursor(contentResolver, getContactsId());
-
- Thread sipContactsHandler = new Thread(new Runnable() {
- @Override
- public void run() {
- if(sipContactCursor != null && sipContactCursor.getCount() > 0) {
- for (int i = 0; i < sipContactCursor.getCount(); i++) {
- Contact contact = Compatibility.getContact(contentResolver, sipContactCursor, i);
- if (contact == null)
- continue;
-
- contact.refresh(contentResolver);
- //Add tag to Linphone contact if it not existed
- if (LinphoneActivity.isInstanciated() && LinphoneActivity.instance().getResources().getBoolean(R.bool.use_linphone_tag)) {
- if (!isContactHasLinphoneTag(contact, contentResolver)) {
- Compatibility.createLinphoneContactTag(context, contentResolver, contact,
- findRawContactID(contentResolver, String.valueOf(contact.getID())));
- }
- }
-
- sipContactList.add(contact);
- }
- }
- if (contactCursor != null) {
- for (int i = 0; i < contactCursor.getCount(); i++) {
- Contact contact = Compatibility.getContact(contentResolver, contactCursor, i);
- if (contact == null)
- continue;
-
- //Remove linphone contact tag if the contact has no sip address
- if (LinphoneActivity.isInstanciated() && LinphoneActivity.instance().getResources().getBoolean(R.bool.use_linphone_tag)) {
- if (removeContactTagIsNeeded(contact) && findRawLinphoneContactID(contact.getID()) != null) {
- removeLinphoneContactTag(contact);
- }
- }
- for (Contact c : sipContactList) {
- if (c != null && c.getID().equals(contact.getID())) {
- contact = c;
- break;
- }
- }
- contactList.add(contact);
- }
- }
- }
- });
-
- contactList = new ArrayList();
- sipContactList = new ArrayList();
-
- sipContactsHandler.start();
}
-
- public static String queryAddressOrNumber(ContentResolver resolver, Uri contactUri) {
+
+ public static String getAddressOrNumberForAndroidContact(ContentResolver resolver, Uri contactUri) {
// Phone Numbers
- String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER};
+ String[] projection = new String[]{ ContactsContract.CommonDataKinds.Phone.NUMBER };
Cursor c = resolver.query(contactUri, projection, null, null, null);
if (c != null) {
while (c.moveToNext()) {
@@ -647,7 +169,7 @@ public class ContactsManager {
}
// SIP addresses
- projection = new String[] {ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS};
+ projection = new String[] { ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS };
c = resolver.query(contactUri, projection, null, null, null);
if (c != null) {
while (c.moveToNext()) {
@@ -660,50 +182,4 @@ public class ContactsManager {
}
return null;
}
-
- boolean isContactHasLinphoneTag(Contact contact, ContentResolver cr) {
- String select = ContactsContract.Data.CONTACT_ID + " = ?";
- String[] args = new String[] { contact.getID() };
-
- String[] projection = new String[] {ContactsContract.Data.MIMETYPE };
-
- Cursor cursor = cr.query(ContactsContract.Data.CONTENT_URI, projection, select, args, null);
-
- if (cursor != null) {
- while (cursor.moveToNext()) {
- if(cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE)).equals("vnd.android.cursor.item/org.linphone.profile")){
- cursor.close();
- return true;
- }
- }
- }
- cursor.close();
- return false;
- }
-
- public Cursor getFriendListCursor(List contacts, boolean shouldGroupBy){
- String[] columns = new String[] { ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME };
-
-
- if (!shouldGroupBy) {
- return null;
- }
-
- MatrixCursor result = new MatrixCursor(columns);
- Set groupBy = new HashSet();
- for (Contact contact: contacts) {
- String name = contact.getName();
- if (!groupBy.contains(name)) {
- groupBy.add(name);
- Object[] newRow = new Object[2];
-
- newRow[0] = contact.getID();
- newRow[1] = contact.getName();
-
- result.addRow(newRow);
- }
- }
- return result;
- }
-
}
diff --git a/src/org/linphone/DialerFragment.java b/src/org/linphone/DialerFragment.java
index 8ddb7cdee..5e0abac44 100644
--- a/src/org/linphone/DialerFragment.java
+++ b/src/org/linphone/DialerFragment.java
@@ -209,7 +209,7 @@ public class DialerFragment extends Fragment {
mAddress.setText(intent.getData().getSchemeSpecificPart());
} else {
Uri contactUri = intent.getData();
- String address = ContactsManager.getInstance().queryAddressOrNumber(LinphoneService.instance().getContentResolver(),contactUri);
+ String address = ContactsManager.getAddressOrNumberForAndroidContact(LinphoneService.instance().getContentResolver(), contactUri);
if(address != null) {
mAddress.setText(address);
} else {
diff --git a/src/org/linphone/HistoryDetailFragment.java b/src/org/linphone/HistoryDetailFragment.java
index 1a94e47eb..7d0f181a2 100644
--- a/src/org/linphone/HistoryDetailFragment.java
+++ b/src/org/linphone/HistoryDetailFragment.java
@@ -17,17 +17,13 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-
import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneCoreException;
import org.linphone.core.LinphoneCoreFactory;
-import android.annotation.SuppressLint;
+import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
-import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -112,9 +108,9 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
if(lAddress != null) {
contactAddress.setText(lAddress.asStringUriOnly());
- Contact contact = ContactsManager.getInstance().findContactWithAddress(getActivity().getContentResolver(), lAddress);
+ LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(getActivity().getContentResolver(), lAddress);
if (contact != null) {
- contactName.setText(contact.getName());
+ contactName.setText(contact.getFullName());
LinphoneUtils.setImagePictureFromUri(view.getContext(),contactPicture,contact.getPhotoUri(),contact.getThumbnailUri());
addToContacts.setVisibility(View.INVISIBLE);
} else {
diff --git a/src/org/linphone/HistoryListFragment.java b/src/org/linphone/HistoryListFragment.java
index b62cf6134..6ebdd7328 100644
--- a/src/org/linphone/HistoryListFragment.java
+++ b/src/org/linphone/HistoryListFragment.java
@@ -440,11 +440,11 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On
holder.callDirection.setImageResource(R.drawable.call_status_outgoing);
}
- Contact c = ContactsManager.getInstance().findContactWithAddress(getActivity().getContentResolver(), address);
+ LinphoneContact c = ContactsManager.getInstance().findContactFromAddress(getActivity().getContentResolver(), address);
String displayName = null;
final String sipUri = address.asString();
if(c != null){
- displayName = c.getName();
+ displayName = c.getFullName();
LinphoneUtils.setImagePictureFromUri(view.getContext(),holder.contactPicture,c.getPhotoUri(),c.getThumbnailUri());
} else {
holder.contactPicture.setImageResource(R.drawable.avatar);
diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java
index 54c1a93c0..3bae4279e 100644
--- a/src/org/linphone/LinphoneActivity.java
+++ b/src/org/linphone/LinphoneActivity.java
@@ -27,6 +27,7 @@ import java.util.List;
import org.linphone.LinphoneManager.AddressType;
import org.linphone.assistant.AssistantActivity;
+import org.linphone.assistant.RemoteProvisioningLoginActivity;
import org.linphone.core.CallDirection;
import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneAuthInfo;
@@ -44,7 +45,6 @@ import org.linphone.core.LinphoneCoreListenerBase;
import org.linphone.core.LinphoneProxyConfig;
import org.linphone.core.Reason;
import org.linphone.mediastream.Log;
-import org.linphone.assistant.RemoteProvisioningLoginActivity;
import org.linphone.ui.AddressText;
import android.Manifest;
@@ -99,7 +99,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
private static final int CALL_ACTIVITY = 19;
private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 200;
private static final int PERMISSIONS_REQUEST_RECORD_AUDIO = 201;
- private static final int PERMISSIONS_REQUEST_CAMERA = 202;
private static final int PERMISSIONS_REQUEST_RECORD_AUDIO_INCOMING_CALL = 203;
private static LinphoneActivity instance;
@@ -116,7 +115,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
private ChatFragment chatFragment;
private Fragment.SavedState dialerSavedState;
private boolean newProxyConfig;
- private boolean isAnimationDisabled = true, preferLinphoneContacts = false, emptyFragment = false, permissionAsked = false;
+ private boolean isAnimationDisabled = true, emptyFragment = false, permissionAsked = false;
private OrientationEventListener mOrientationHelper;
private LinphoneCoreListenerBase mListener;
private LinearLayout mTabBar;
@@ -126,7 +125,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
private RelativeLayout sideMenuContent, quitLayout, defaultAccount;
private ListView accountsList, sideMenuItemList;
private ImageView menu;
- private Dialog authInfoPassword;
static final boolean isInstanciated() {
return instance != null;
@@ -547,9 +545,9 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
//TODO display error message
return;
}
- Contact c = ContactsManager.getInstance().findContactWithAddress(getContentResolver(), lAddress);
+ LinphoneContact c = ContactsManager.getInstance().findContactFromAddress(getContentResolver(), lAddress);
- String displayName = c != null ? c.getName() : LinphoneUtils.getAddressDisplayName(sipUri);
+ String displayName = c != null ? c.getFullName() : LinphoneUtils.getAddressDisplayName(sipUri);
String pictureUri = c != null && c.getPhotoUri() != null ? c.getPhotoUri().toString() : null;
String status;
@@ -597,7 +595,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
return dateFormat.format(cal.getTime());
}
- public void displayContact(Contact contact, boolean chatOnly) {
+ public void displayContact(LinphoneContact contact, boolean chatOnly) {
Fragment fragment2 = getFragmentManager().findFragmentById(R.id.fragmentContainer2);
if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.CONTACT_DETAIL) {
ContactDetailsFragment contactFragment = (ContactDetailsFragment) fragment2;
@@ -611,14 +609,9 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
}
public void displayContacts(boolean chatOnly) {
- if (chatOnly) {
- preferLinphoneContacts = true;
- }
-
Bundle extras = new Bundle();
extras.putBoolean("ChatAddressOnly", chatOnly);
changeCurrentFragment(FragmentsAvailable.CONTACTS_LIST, extras);
- preferLinphoneContacts = false;
}
public void displayChatList() {
@@ -677,8 +670,8 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
Log.e("Cannot display chat", e);
return;
}
- Contact contact = ContactsManager.getInstance().findContactWithAddress(getContentResolver(), lAddress);
- displayName = contact != null ? contact.getName() : null;
+ LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(getContentResolver(), lAddress);
+ displayName = contact != null ? contact.getFullName() : null;
if (contact != null && contact.getPhotoUri() != null) {
pictureUri = contact.getPhotoUri().toString();
@@ -1148,7 +1141,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
changeCurrentFragment(FragmentsAvailable.CONTACT_EDITOR, extras);
}
- public void editContact(Contact contact)
+ public void editContact(LinphoneContact contact)
{
Bundle extras = new Bundle();
extras.putSerializable("Contact", contact);
@@ -1156,7 +1149,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
}
- public void editContact(Contact contact, String sipAddress)
+ public void editContact(LinphoneContact contact, String sipAddress)
{
Bundle extras = new Bundle();
@@ -1241,7 +1234,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
}
if (getPackageManager().checkPermission(Manifest.permission.READ_CONTACTS, getPackageName()) == PackageManager.PERMISSION_GRANTED){
- ContactsManager.getInstance().enabledContactsAccess();
+ ContactsManager.getInstance().enableContactsAccess();
ContactsManager.getInstance().prepareContactsInBackground();
} else {
checkAndRequestPermission(Manifest.permission.READ_CONTACTS, PERMISSIONS_REQUEST_READ_CONTACTS);
diff --git a/src/org/linphone/LinphoneContact.java b/src/org/linphone/LinphoneContact.java
new file mode 100644
index 000000000..98a3dbc64
--- /dev/null
+++ b/src/org/linphone/LinphoneContact.java
@@ -0,0 +1,254 @@
+/*
+LinphoneContact.java
+Copyright (C) 2016 Belledonne Communications, Grenoble, France
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+package org.linphone;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.linphone.core.LinphoneAddress;
+import org.linphone.core.LinphoneCoreFactory;
+import org.linphone.core.LinphoneFriend;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+
+public class LinphoneContact implements Serializable {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 9015568163905205244L;
+
+ private LinphoneFriend friend;
+ private String fullName, androidId;
+ private Uri photoUri, thumbnailUri;
+ private List addresses;
+
+ public LinphoneContact() {
+ addresses = new ArrayList();
+ androidId = null;
+ thumbnailUri = null;
+ photoUri = null;
+ }
+
+ public void setFullName(String name) {
+ if (name == null) return;
+
+ fullName = name;
+ if (friend != null) {
+ friend.setName(name);
+ }
+ }
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public boolean hasPhoto() {
+ return photoUri != null;
+ }
+
+ public void setPhotoUri(Uri uri) {
+ photoUri = uri;
+ }
+
+ public Uri getPhotoUri() {
+ return photoUri;
+ }
+
+ public void setThumbnailUri(Uri uri) {
+ thumbnailUri = uri;
+ }
+
+ public Uri getThumbnailUri() {
+ return thumbnailUri;
+ }
+
+ public void addNumberOrAddress(LinphoneNumberOrAddress noa) {
+ if (noa == null) return;
+ addresses.add(noa);
+ }
+
+ public List getNumbersOrAddresses() {
+ return addresses;
+ }
+
+ public boolean hasAddress(String address) {
+ for (LinphoneNumberOrAddress noa : getNumbersOrAddresses()) {
+ if (noa.isSIPAddress()) {
+ String value = noa.getValue();
+ if (value.equals(address) || value.equals("sip:" + address)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean hasAddress() {
+ for (LinphoneNumberOrAddress noa : getNumbersOrAddresses()) {
+ if (noa.isSIPAddress()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void setAndroidId(String id) {
+ androidId = id;
+ }
+
+ public String getAndroidId() {
+ return androidId;
+ }
+
+ public void delete() {
+ if (isAndroidContact()) {
+ // TODO
+ /*String select = ContactsContract.Data.CONTACT_ID + " = ?";
+ String[] args = new String[] { contact.getID() };
+
+ ArrayList ops = new ArrayList();
+ ops.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI)
+ .withSelection(select, args)
+ .build()
+ );
+
+ try {
+ getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
+ ContactsManager.getInstance().removeAllFriends(contact);
+ } catch (Exception e) {
+ Log.w(e.getMessage() + ":" + e.getStackTrace());
+ }
+ ContactsManager.getInstance().removeContactFromLists(getActivity().getContentResolver(), contact);*/
+ }
+ if (friend != null) {
+ LinphoneManager.getLcIfManagerNotDestroyedOrNull().removeFriend(friend);
+ }
+ }
+
+ public void refresh() {
+ addresses = new ArrayList();
+ if (friend != null) {
+ LinphoneAddress addr = friend.getAddress();
+ if (addr != null) {
+ addresses.add(new LinphoneNumberOrAddress(addr.asStringUriOnly(), true));
+ }
+ }
+
+ if (!isAndroidContact()) {
+ fullName = friend.getName();
+ thumbnailUri = null;
+ photoUri = null;
+ } else {
+ String id = getAndroidId();
+ String name = getName(id);
+ Uri thumbnail = getContactPictureUri(id);
+ Uri photo = getContactPhotoUri(id);
+
+ setFullName(name);
+ setThumbnailUri(thumbnail);
+ setPhotoUri(photo);
+ for (LinphoneNumberOrAddress noa : getAddressesAndNumbersForAndroidContact(id)) {
+ addresses.add(noa);
+ }
+ }
+ }
+
+ public boolean isAndroidContact() {
+ return androidId != null;
+ }
+
+ public static LinphoneContact createLinphoneFriend(String name, String address) {
+ LinphoneContact contact = new LinphoneContact();
+ LinphoneFriend friend = LinphoneCoreFactory.instance().createLinphoneFriend();
+ contact.friend = friend;
+
+ if (name != null) {
+ contact.setFullName(name);
+ }
+ if (address != null) {
+ contact.addNumberOrAddress(new LinphoneNumberOrAddress(address, true));
+ }
+
+ return contact;
+ }
+
+ private Uri getContactUri(String id) {
+ Uri person = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, id);
+ return person;
+ }
+
+ private Uri getContactPictureUri(String id) {
+ Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(id));
+ return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
+ }
+
+ private Uri getContactPhotoUri(String id) {
+ Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(id));
+ return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
+ }
+
+ private String getName(String id) {
+ ContentResolver resolver = ContactsManager.getInstance().getContentResolver();
+ Cursor cursor = resolver.query(getContactUri(id), null, null, null, null);
+ String name = null;
+ if (cursor != null) {
+ if (cursor.moveToFirst()) {
+ name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
+ }
+ cursor.close();
+ }
+ return name;
+ }
+
+ private List getAddressesAndNumbersForAndroidContact(String id) {
+ List result = new ArrayList();
+ ContentResolver resolver = ContactsManager.getInstance().getContentResolver();
+
+ Uri uri = ContactsContract.Data.CONTENT_URI;
+ String[] projection;
+
+ // SIP addresses
+ String selection2 = new StringBuilder().append(ContactsContract.Data.CONTACT_ID).append(" = ? AND ").append(ContactsContract.Data.MIMETYPE).append(" = '").append(ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE).append("'").toString();
+ projection = new String[] { ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS };
+ Cursor c = resolver.query(uri, projection, selection2, new String[]{ id }, null);
+ if (c != null) {
+ while (c.moveToNext()) {
+ result.add(new LinphoneNumberOrAddress("sip:" + c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS)), true));
+ }
+ c.close();
+ }
+
+ // Phone Numbers
+ c = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER }, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id, null, null);
+ if (c != null) {
+ while (c.moveToNext()) {
+ String number = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
+ result.add(new LinphoneNumberOrAddress(number, false));
+ }
+ c.close();
+ }
+
+ return result;
+ }
+}
diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java
index 2fa56d428..baa850fd2 100644
--- a/src/org/linphone/LinphoneManager.java
+++ b/src/org/linphone/LinphoneManager.java
@@ -171,7 +171,6 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
mCallLogDatabaseFile = basePath + "/linphone-log-history.db";
mFriendsDatabaseFile = basePath + "/linphone-friends.db";
mErrorToneFile = basePath + "/error.wav";
- mConfigFile = basePath + "/configrc";
mUserCertificatePath = basePath;
mPrefs = LinphonePreferences.instance();
@@ -197,7 +196,6 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
private final String mCallLogDatabaseFile;
private final String mFriendsDatabaseFile;
private final String mErrorToneFile;
- private final String mConfigFile;
private final String mUserCertificatePath;
private ByteArrayInputStream mUploadingImageStream;
@@ -866,13 +864,13 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
}
try {
- Contact contact = ContactsManager.getInstance().findContactWithAddress(mServiceContext.getContentResolver(), from);
+ LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(mServiceContext.getContentResolver(), from);
if (!mServiceContext.getResources().getBoolean(R.bool.disable_chat_message_notification)) {
if (LinphoneActivity.isInstanciated() && !LinphoneActivity.instance().displayChatMessageNotification(from.asStringUriOnly())) {
return;
} else {
if (contact != null) {
- LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), contact.getName(), textMessage);
+ LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), contact.getFullName(), textMessage);
} else {
LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), from.getUserName(), textMessage);
}
diff --git a/src/org/linphone/LinphoneNumberOrAddress.java b/src/org/linphone/LinphoneNumberOrAddress.java
new file mode 100644
index 000000000..5d5cf974b
--- /dev/null
+++ b/src/org/linphone/LinphoneNumberOrAddress.java
@@ -0,0 +1,42 @@
+/*
+LinphoneNumberOrAddress.java
+Copyright (C) 2016 Belledonne Communications, Grenoble, France
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+package org.linphone;
+
+public class LinphoneNumberOrAddress {
+ private boolean isSIPAddress;
+ private String value;
+
+ public LinphoneNumberOrAddress(String v, boolean isSIP) {
+ value = v;
+ isSIPAddress = isSIP;
+ }
+
+ public boolean isSIPAddress() {
+ return isSIPAddress;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String v) {
+ value = v;
+ }
+}
diff --git a/src/org/linphone/LinphoneService.java b/src/org/linphone/LinphoneService.java
index 216740ddc..2d8762bd3 100644
--- a/src/org/linphone/LinphoneService.java
+++ b/src/org/linphone/LinphoneService.java
@@ -315,7 +315,7 @@ public final class LinphoneService extends Service {
LinphoneAddress address = LinphoneCoreFactory.instance().createLinphoneAddress(userName,domain,null);
address.setDisplayName(displayName);
- Contact contact = ContactsManager.getInstance().findContactWithAddress(getContentResolver(), address);
+ LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(getContentResolver(), address);
Uri pictureUri = contact != null ? contact.getPhotoUri() : null;
Bitmap bm = null;
try {
@@ -393,7 +393,7 @@ public final class LinphoneService extends Service {
Uri pictureUri = null;
try {
- Contact contact = ContactsManager.getInstance().findContactWithAddress(getContentResolver(), LinphoneCoreFactory.instance().createLinphoneAddress(fromSipUri));
+ LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(getContentResolver(), LinphoneCoreFactory.instance().createLinphoneAddress(fromSipUri));
if (contact != null)
pictureUri = contact.getThumbnailUri();
} catch (LinphoneCoreException e1) {
@@ -489,7 +489,6 @@ public final class LinphoneService extends Service {
}
}
- @SuppressWarnings("deprecation")
private void dumpDeviceInformation() {
StringBuilder sb = new StringBuilder();
sb.append("DEVICE=").append(Build.DEVICE).append("\n");
diff --git a/src/org/linphone/LinphoneUtils.java b/src/org/linphone/LinphoneUtils.java
index 4015b1ce7..ca49cffc6 100644
--- a/src/org/linphone/LinphoneUtils.java
+++ b/src/org/linphone/LinphoneUtils.java
@@ -35,9 +35,11 @@ import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
+import java.util.Locale;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
+import org.linphone.compatibility.Compatibility;
import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCall.State;
@@ -46,7 +48,6 @@ import org.linphone.core.LinphoneCoreException;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.core.LinphoneProxyConfig;
import org.linphone.mediastream.Log;
-import org.linphone.mediastream.Version;
import org.linphone.mediastream.video.capture.hwconf.Hacks;
import android.app.Activity;
@@ -54,6 +55,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
+import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
@@ -148,9 +150,9 @@ public final class LinphoneUtils {
SimpleDateFormat dateFormat;
if (isToday(cal)) {
- dateFormat = new SimpleDateFormat(context.getResources().getString(R.string.today_date_format));
+ dateFormat = new SimpleDateFormat(context.getResources().getString(R.string.today_date_format), Locale.getDefault());
} else {
- dateFormat = new SimpleDateFormat(format);
+ dateFormat = new SimpleDateFormat(format, Locale.getDefault());
}
return dateFormat.format(cal.getTime());
@@ -226,7 +228,7 @@ public final class LinphoneUtils {
try {
bm = MediaStore.Images.Media.getBitmap(c.getContentResolver(),uri);
} catch (IOException e) {
- if(tUri != null){
+ if (tUri != null) {
try {
bm = MediaStore.Images.Media.getBitmap(c.getContentResolver(),tUri);
} catch (IOException ie) {
@@ -234,10 +236,11 @@ public final class LinphoneUtils {
}
}
}
- if(bm != null) {
+ if (bm != null) {
view.setImageBitmap(bm);
+ } else {
+ view.setImageResource(R.drawable.avatar);
}
-
}
}
@@ -456,5 +459,13 @@ public final class LinphoneUtils {
e.printStackTrace();
}
}
+
+ public static List contactCursorToList(ContentResolver cr, Cursor cursor) {
+ ArrayList list = new ArrayList();
+ for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
+ list.add(Compatibility.getContact(cr, cursor, cursor.getPosition()));
+ }
+ return list;
+ }
}
diff --git a/src/org/linphone/StatusFragment.java b/src/org/linphone/StatusFragment.java
index aa607cdac..a87cc2765 100644
--- a/src/org/linphone/StatusFragment.java
+++ b/src/org/linphone/StatusFragment.java
@@ -35,15 +35,13 @@ import org.linphone.core.PayloadType;
import org.linphone.mediastream.Log;
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.Fragment;
import android.content.Context;
-import android.content.DialogInterface;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
-import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -170,12 +168,6 @@ public class StatusFragment extends Fragment {
} else if (activity instanceof AssistantActivity) {
((AssistantActivity) activity).updateStatusFragment(this);
isInCall = false;
- } else if (activity instanceof CallIncomingActivity) {
- ((CallIncomingActivity) activity).updateStatusFragment(this);
- isInCall = true;
- } else if (activity instanceof CallOutgoingActivity) {
- ((CallOutgoingActivity) activity).updateStatusFragment(this);
- isInCall = true;
}
}
@@ -192,7 +184,7 @@ public class StatusFragment extends Fragment {
voicemailCount.setVisibility(View.GONE);
if (isInCall && isAttached) {
- LinphoneCall call = LinphoneManager.getLc().getCurrentCall();
+ //LinphoneCall call = LinphoneManager.getLc().getCurrentCall();
//initCallStatsRefresher(call, callStats);
} else if (!isInCall) {
voicemailCount.setVisibility(View.VISIBLE);
diff --git a/src/org/linphone/compatibility/ApiFivePlus.java b/src/org/linphone/compatibility/ApiFivePlus.java
index fdbdb3462..9ac9be80a 100644
--- a/src/org/linphone/compatibility/ApiFivePlus.java
+++ b/src/org/linphone/compatibility/ApiFivePlus.java
@@ -6,7 +6,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import org.linphone.Contact;
+import org.linphone.LinphoneContact;
import org.linphone.R;
import org.linphone.core.LinphoneAddress;
@@ -21,8 +21,6 @@ import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.MatrixCursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.media.AudioManager;
import android.net.Uri;
import android.preference.CheckBoxPreference;
@@ -208,7 +206,7 @@ public class ApiFivePlus {
return cursor.getColumnIndex(Data.DISPLAY_NAME);
}
- public static Contact getContact(ContentResolver cr, Cursor cursor, int position) {
+ public static LinphoneContact getContact(ContentResolver cr, Cursor cursor, int position) {
try {
if(cursor != null) {
cursor.moveToFirst();
@@ -222,16 +220,12 @@ public class ApiFivePlus {
Uri photo = getContactPhotoUri(id);
InputStream input = getContactPictureInputStream(cr, id);
- Contact contact;
- if (input == null) {
- contact = new Contact(id, name);
- } else {
- Bitmap bm = null;
- try {
- bm = BitmapFactory.decodeStream(input);
- } catch (OutOfMemoryError oome) {
- }
- contact = new Contact(id, name, photo, thumbnail, bm);
+ LinphoneContact contact = new LinphoneContact();
+ contact.setAndroidId(id);
+ contact.setFullName(name);
+ if (input != null) {
+ contact.setPhotoUri(photo);
+ contact.setThumbnailUri(thumbnail);
}
return contact;
@@ -270,9 +264,9 @@ public class ApiFivePlus {
Cursor cursor = getSIPContactCursor(cr, sipUri);
if(cursor != null) {
- Contact contact = getContact(cr, cursor, 0);
+ LinphoneContact contact = getContact(cr, cursor, 0);
if (contact != null && contact.getNumbersOrAddresses().contains(sipUri)) {
- address.setDisplayName(contact.getName());
+ address.setDisplayName(contact.getFullName());
cursor.close();
return contact.getPhotoUri();
}
diff --git a/src/org/linphone/compatibility/ApiNinePlus.java b/src/org/linphone/compatibility/ApiNinePlus.java
index 1bf125de6..82e4d9ad8 100644
--- a/src/org/linphone/compatibility/ApiNinePlus.java
+++ b/src/org/linphone/compatibility/ApiNinePlus.java
@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import org.linphone.Contact;
+import org.linphone.LinphoneContact;
import org.linphone.LinphoneUtils;
import org.linphone.R;
import org.linphone.core.LinphoneAddress;
@@ -16,8 +17,8 @@ import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds;
-import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.text.TextUtils;
@@ -183,9 +184,9 @@ public class ApiNinePlus {
String sipUri = username + "@" + domain;
Cursor cursor = getSIPContactCursor(cr, sipUri);
- Contact contact = ApiFivePlus.getContact(cr, cursor, 0);
+ LinphoneContact contact = ApiFivePlus.getContact(cr, cursor, 0);
if (contact != null && contact.getNumbersOrAddresses().contains(sipUri)) {
- address.setDisplayName(contact.getName());
+ address.setDisplayName(contact.getFullName());
cursor.close();
return contact.getPhotoUri();
}
diff --git a/src/org/linphone/compatibility/Compatibility.java b/src/org/linphone/compatibility/Compatibility.java
index 2e8bd3afb..da9f9b934 100644
--- a/src/org/linphone/compatibility/Compatibility.java
+++ b/src/org/linphone/compatibility/Compatibility.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import org.linphone.Contact;
+import org.linphone.LinphoneContact;
import org.linphone.core.LinphoneAddress;
import org.linphone.mediastream.Version;
@@ -131,7 +132,7 @@ public class Compatibility {
return -1;
}
- public static Contact getContact(ContentResolver cr, Cursor cursor, int position) {
+ public static LinphoneContact getContact(ContentResolver cr, Cursor cursor, int position) {
if (Version.sdkAboveOrEqual(Version.API05_ECLAIR_20)) {
return ApiFivePlus.getContact(cr, cursor, position);
}
diff --git a/src/org/linphone/ui/BubbleChat.java b/src/org/linphone/ui/BubbleChat.java
index ecc37a7bc..8081bece6 100644
--- a/src/org/linphone/ui/BubbleChat.java
+++ b/src/org/linphone/ui/BubbleChat.java
@@ -26,7 +26,7 @@ import java.util.Calendar;
import java.util.HashMap;
import java.util.Map.Entry;
-import org.linphone.Contact;
+import org.linphone.LinphoneContact;
import org.linphone.LinphoneManager;
import org.linphone.LinphoneUtils;
import org.linphone.R;
@@ -81,7 +81,7 @@ public class BubbleChat implements LinphoneChatMessage.LinphoneChatMessageListen
private Bitmap defaultBitmap;
@SuppressLint("InflateParams")
- public BubbleChat(final Context context, LinphoneChatMessage message, Contact c) {
+ public BubbleChat(final Context context, LinphoneChatMessage message, LinphoneContact c) {
if (message == null) {
return;
}
@@ -211,10 +211,9 @@ public class BubbleChat implements LinphoneChatMessage.LinphoneChatMessageListen
contactPicture = (ImageView) view.findViewById(R.id.contact_picture);
String displayName = nativeMessage.getFrom().getUserName();
- final String sipUri = nativeMessage.getFrom().asStringUriOnly();
if(!nativeMessage.isOutgoing()) {
if (c != null) {
- displayName = c.getName();
+ displayName = c.getFullName();
LinphoneUtils.setImagePictureFromUri(view.getContext(), contactPicture, c.getPhotoUri(), c.getThumbnailUri());
} else {
contactPicture.setImageResource(R.drawable.avatar);