diff --git a/res/layout-hdpi/main.xml b/res/layout-hdpi/main.xml
new file mode 100644
index 000000000..eacf13737
--- /dev/null
+++ b/res/layout-hdpi/main.xml
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/org/linphone/ContactFragment.java b/src/org/linphone/ContactFragment.java
index 45b48ec2c..cd7cfb7a0 100644
--- a/src/org/linphone/ContactFragment.java
+++ b/src/org/linphone/ContactFragment.java
@@ -120,6 +120,10 @@ public class ContactFragment extends Fragment implements OnClickListener {
LinphoneActivity.instance().selectMenu(FragmentsAvailable.CONTACT);
}
contact.refresh(getActivity().getContentResolver());
+ if (contact.getName() == null || contact.getName().equals("")) {
+ //Contact has been deleted, return
+ LinphoneActivity.instance().displayContacts();
+ }
displayContact(inflater, view);
}
diff --git a/src/org/linphone/ContactsFragment.java b/src/org/linphone/ContactsFragment.java
index 73b3c8db9..ad5db9e4f 100644
--- a/src/org/linphone/ContactsFragment.java
+++ b/src/org/linphone/ContactsFragment.java
@@ -51,6 +51,8 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
private boolean onlyDisplayLinphoneContacts;
private int lastKnownPosition;
private AlphabetIndexer indexer;
+ private boolean editOnClick = false, editConsumed = false;
+ private String sipAddressToAdd;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -58,6 +60,11 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
mInflater = inflater;
View view = inflater.inflate(R.layout.contacts_list, container, false);
+ if (getArguments() != null) {
+ editOnClick = getArguments().getBoolean("EditOnClick");
+ sipAddressToAdd = getArguments().getString("SipAddress");
+ }
+
contactsList = (ListView) view.findViewById(R.id.contactsList);
contactsList.setOnItemClickListener(this);
@@ -91,7 +98,8 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
}
else if (id == R.id.newContact) {
- Intent intent = Compatibility.prepareAddContactIntent(null, null);
+ editConsumed = true;
+ Intent intent = Compatibility.prepareAddContactIntent(null, sipAddressToAdd);
startActivity(intent);
}
}
@@ -124,22 +132,32 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
@Override
public void onItemClick(AdapterView> adapter, View view, int position, long id) {
- lastKnownPosition = contactsList.getFirstVisiblePosition();
- LinphoneActivity.instance().displayContact((Contact) adapter.getItemAtPosition(position));
+ Contact contact = (Contact) adapter.getItemAtPosition(position);
+ if (editOnClick) {
+ editConsumed = true;
+ Intent intent = Compatibility.prepareEditContactIntentWithSipAddress(Integer.parseInt(contact.getID()), sipAddressToAdd);
+ startActivity(intent);
+ } else {
+ lastKnownPosition = contactsList.getFirstVisiblePosition();
+ LinphoneActivity.instance().displayContact(contact);
+ }
}
@Override
public void onResume() {
super.onResume();
+
+ if (editConsumed) {
+ editOnClick = false;
+ sipAddressToAdd = null;
+ }
+
if (LinphoneActivity.isInstanciated()) {
LinphoneActivity.instance().selectMenu(FragmentsAvailable.CONTACTS);
onlyDisplayLinphoneContacts = LinphoneActivity.instance().isLinphoneContactsPrefered();
}
- if (contactsList.getAdapter() == null) {
- changeContactsAdapter();
- }
-
+ changeContactsAdapter();
contactsList.setSelectionFromTop(lastKnownPosition, 0);
}
diff --git a/src/org/linphone/DialerFragment.java b/src/org/linphone/DialerFragment.java
index 6f664413b..80a8c8650 100644
--- a/src/org/linphone/DialerFragment.java
+++ b/src/org/linphone/DialerFragment.java
@@ -17,7 +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 org.linphone.compatibility.Compatibility;
import org.linphone.core.LinphoneCore;
import org.linphone.ui.AddressAware;
import org.linphone.ui.AddressText;
@@ -25,7 +24,6 @@ import org.linphone.ui.CallButton;
import org.linphone.ui.EraseButton;
import android.app.Activity;
-import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@@ -81,8 +79,7 @@ public class DialerFragment extends Fragment {
addContactListener = new OnClickListener() {
@Override
public void onClick(View v) {
- Intent intent = Compatibility.prepareAddContactIntent(mAddress.getDisplayedName(), mAddress.getText().toString());
- startActivity(intent);
+ LinphoneActivity.instance().displayContactsForEdition(mAddress.getText().toString());
}
};
cancelListener = new OnClickListener() {
@@ -167,9 +164,8 @@ public class DialerFragment extends Fragment {
mAddContact.setEnabled(true);
mAddContact.setImageResource(R.drawable.add_contact);
mAddContact.setOnClickListener(addContactListener);
+ enableDisableAddContact();
}
-
- enableDisableAddContact();
}
public void enableDisableAddContact() {
diff --git a/src/org/linphone/HistoryDetailFragment.java b/src/org/linphone/HistoryDetailFragment.java
index e6b74a7a9..11fb87911 100644
--- a/src/org/linphone/HistoryDetailFragment.java
+++ b/src/org/linphone/HistoryDetailFragment.java
@@ -17,10 +17,8 @@ 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 org.linphone.compatibility.Compatibility;
import org.linphone.ui.AvatarWithShadow;
-import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@@ -84,6 +82,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
private void displayHistory(String status, String callTime, String callDate) {
if (pictureUri != null) {
LinphoneUtils.setImagePictureFromUri(view.getContext(), contactPicture.getView(), Uri.parse(pictureUri), R.drawable.unknown_small);
+ view.findViewById(R.id.addContactRow).setVisibility(View.GONE);
}
contactName.setText(displayName == null ? sipUri : displayName);
@@ -121,8 +120,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
} else if (id == R.id.chat) {
LinphoneActivity.instance().displayChat(sipUri);
} else if (id == R.id.addToContacts) {
- Intent intent = Compatibility.prepareAddContactIntent(displayName, sipUri);
- startActivity(intent);
+ LinphoneActivity.instance().displayContactsForEdition(sipUri);
}
}
}
diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java
index 0ab814e38..afda1cf01 100644
--- a/src/org/linphone/LinphoneActivity.java
+++ b/src/org/linphone/LinphoneActivity.java
@@ -358,6 +358,13 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
changeCurrentFragment(FragmentsAvailable.CONTACTS, null);
}
+ public void displayContactsForEdition(String sipAddress) {
+ Bundle extras = new Bundle();
+ extras.putBoolean("EditOnClick", true);
+ extras.putString("SipAddress", sipAddress);
+ changeCurrentFragment(FragmentsAvailable.CONTACTS, extras);
+ }
+
public void displayChat(String sipUri) {
LinphoneAddress lAddress = LinphoneCoreFactory.instance().createLinphoneAddress(sipUri);
Uri uri = LinphoneUtils.findUriPictureOfContactAndSetDisplayName(lAddress, getContentResolver());
diff --git a/src/org/linphone/compatibility/ApiFivePlus.java b/src/org/linphone/compatibility/ApiFivePlus.java
index 6a5b2f7dc..310b04bd3 100644
--- a/src/org/linphone/compatibility/ApiFivePlus.java
+++ b/src/org/linphone/compatibility/ApiFivePlus.java
@@ -90,6 +90,28 @@ public class ApiFivePlus {
return intent;
}
+ public static Intent prepareEditContactIntentWithSipAddress(int id, String sipUri) {
+ Intent intent = new Intent(Intent.ACTION_EDIT, Contacts.CONTENT_URI);
+ Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, id);
+ intent.setData(contactUri);
+
+ if (Version.sdkAboveOrEqual(Version.API09_GINGERBREAD_23)) {
+ ArrayList data = new ArrayList();
+ ContentValues sipAddressRow = new ContentValues();
+ sipAddressRow.put(Contacts.Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
+ sipAddressRow.put(SipAddress.SIP_ADDRESS, sipUri);
+ data.add(sipAddressRow);
+ data.add(sipAddressRow);
+ intent.putParcelableArrayListExtra(Insert.DATA, data);
+ } else {
+ // VoIP field not available, we store the address in the IM field
+ intent.putExtra(ContactsContract.Intents.Insert.IM_HANDLE, sipUri);
+ intent.putExtra(ContactsContract.Intents.Insert.IM_PROTOCOL, "sip");
+ }
+
+ return intent;
+ }
+
public static List extractContactNumbersAndAddresses(String id, ContentResolver cr) {
List list = new ArrayList();
diff --git a/src/org/linphone/compatibility/Compatibility.java b/src/org/linphone/compatibility/Compatibility.java
index d09de073a..a1f760144 100644
--- a/src/org/linphone/compatibility/Compatibility.java
+++ b/src/org/linphone/compatibility/Compatibility.java
@@ -60,6 +60,13 @@ public class Compatibility {
return null;
}
+ public static Intent prepareEditContactIntentWithSipAddress(int id, String sipAddress) {
+ if (Version.sdkAboveOrEqual(5)) {
+ return ApiFivePlus.prepareEditContactIntentWithSipAddress(id, sipAddress);
+ }
+ return null;
+ }
+
public static List extractContactNumbersAndAddresses(String id, ContentResolver cr) {
if (Version.sdkAboveOrEqual(5)) {
return ApiFivePlus.extractContactNumbersAndAddresses(id, cr);