diff --git a/app/src/main/java/org/linphone/assistant/PhoneAccountLinkingAssistantActivity.java b/app/src/main/java/org/linphone/assistant/PhoneAccountLinkingAssistantActivity.java
index dd4bb8a0b..abe0710ce 100644
--- a/app/src/main/java/org/linphone/assistant/PhoneAccountLinkingAssistantActivity.java
+++ b/app/src/main/java/org/linphone/assistant/PhoneAccountLinkingAssistantActivity.java
@@ -70,7 +70,9 @@ public class PhoneAccountLinkingAssistantActivity extends AssistantActivity {
unexpectedError();
}
if (!mProxyConfig.getDomain().equals(getString(R.string.default_domain))) {
- Log.e("[Account Linking] Can't link account on domain " + mProxyConfig.getDomain());
+ Log.e(
+ "[Account Linking] Can't link account on domain "
+ + mProxyConfig.getDomain());
unexpectedError();
}
mAccountCreator.setUsername(identity.getUsername());
diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java
index 44719e6c9..d34f04bc0 100644
--- a/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java
+++ b/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java
@@ -27,6 +27,7 @@ import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
import java.util.ArrayList;
import org.linphone.LinphoneManager;
+import org.linphone.R;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.core.Address;
@@ -70,17 +71,32 @@ class ApiTwentyFivePlus {
ContactsManager.getInstance().findContactFromAddress(participantAddress);
if (contact != null && !contacts.contains(contact)) {
- String peerAddress = room.getPeerAddress().asStringUriOnly();
- ShortcutInfo shortcut = manager.createChatRoomShortcutInfo(contact, peerAddress);
- if (shortcut != null) {
- Log.i(
- "[Shortcut] Creating launcher shortcut "
- + shortcut.getShortLabel()
- + " for room "
- + shortcut.getId());
- shortcuts.add(shortcut);
- contacts.add(contact);
- i += 1;
+ if (context.getResources().getBoolean(R.bool.shortcut_to_contact)) {
+ ShortcutInfo shortcut = manager.createContactShortcutInfo(contact);
+ if (shortcut != null) {
+ Log.i(
+ "[Shortcut] Creating launcher shortcut "
+ + shortcut.getShortLabel()
+ + " for contact "
+ + shortcut.getShortLabel());
+ shortcuts.add(shortcut);
+ contacts.add(contact);
+ i += 1;
+ }
+ } else if (context.getResources().getBoolean(R.bool.shortcut_to_chatroom)) {
+ String peerAddress = room.getPeerAddress().asStringUriOnly();
+ ShortcutInfo shortcut =
+ manager.createChatRoomShortcutInfo(contact, peerAddress);
+ if (shortcut != null) {
+ Log.i(
+ "[Shortcut] Creating launcher shortcut "
+ + shortcut.getShortLabel()
+ + " for room "
+ + shortcut.getId());
+ shortcuts.add(shortcut);
+ contacts.add(contact);
+ i += 1;
+ }
}
}
}
diff --git a/app/src/main/java/org/linphone/contacts/ContactsActivity.java b/app/src/main/java/org/linphone/contacts/ContactsActivity.java
index fe4cda67f..83ae382bd 100644
--- a/app/src/main/java/org/linphone/contacts/ContactsActivity.java
+++ b/app/src/main/java/org/linphone/contacts/ContactsActivity.java
@@ -138,14 +138,19 @@ public class ContactsActivity extends MainActivity {
showContactsList();
}
- if (extras.containsKey("ContactUri")) {
- String uri = extras.getString("ContactUri");
- Log.i("[Contacts Activity] Found ContactUri " + uri);
- Uri contactUri = Uri.parse(uri);
- String id = ContactsManager.getInstance().getAndroidContactIdFromUri(contactUri);
+ if (extras.containsKey("ContactUri") || extras.containsKey("ContactId")) {
+ String contactId = extras.getString("ContactId");
+ if (contactId == null) {
+ String uri = extras.getString("ContactUri");
+ Log.i("[Contacts Activity] Found Contact URI " + uri);
+ Uri contactUri = Uri.parse(uri);
+ contactId = ContactsManager.getInstance().getAndroidContactIdFromUri(contactUri);
+ } else {
+ Log.i("[Contacts Activity] Found Contact ID " + contactId);
+ }
LinphoneContact linphoneContact =
- ContactsManager.getInstance().findContactFromAndroidId(id);
+ ContactsManager.getInstance().findContactFromAndroidId(contactId);
if (linphoneContact != null) {
showContactDetails(linphoneContact);
}
diff --git a/app/src/main/java/org/linphone/contacts/LinphoneContact.java b/app/src/main/java/org/linphone/contacts/LinphoneContact.java
index 297c788b2..0ad951af2 100644
--- a/app/src/main/java/org/linphone/contacts/LinphoneContact.java
+++ b/app/src/main/java/org/linphone/contacts/LinphoneContact.java
@@ -76,6 +76,15 @@ public class LinphoneContact extends AndroidContact
return contact;
}
+ public String getContactId() {
+ if (isAndroidContact()) {
+ return getAndroidId();
+ } else {
+ // TODO
+ }
+ return null;
+ }
+
@Override
public int compareTo(LinphoneContact contact) {
String fullName = getFullName() != null ? getFullName() : "";
diff --git a/app/src/main/java/org/linphone/settings/ContactSettingsFragment.java b/app/src/main/java/org/linphone/settings/ContactSettingsFragment.java
index d56ed1f01..9eebbcfff 100644
--- a/app/src/main/java/org/linphone/settings/ContactSettingsFragment.java
+++ b/app/src/main/java/org/linphone/settings/ContactSettingsFragment.java
@@ -82,7 +82,7 @@ public class ContactSettingsFragment extends SettingsFragment {
}
if (Version.sdkAboveOrEqual(Version.API25_NOUGAT_71)
- && getResources().getBoolean(R.bool.create_most_recent_chat_rooms_shortcuts)) {
+ && getResources().getBoolean(R.bool.create_shortcuts)) {
mCreateShortcuts.setChecked(mPrefs.shortcutsCreationEnabled());
} else {
mCreateShortcuts.setVisibility(View.GONE);
diff --git a/app/src/main/java/org/linphone/utils/LinphoneShortcutManager.java b/app/src/main/java/org/linphone/utils/LinphoneShortcutManager.java
index a5ff44c33..03bed682f 100644
--- a/app/src/main/java/org/linphone/utils/LinphoneShortcutManager.java
+++ b/app/src/main/java/org/linphone/utils/LinphoneShortcutManager.java
@@ -29,6 +29,7 @@ import android.util.ArraySet;
import java.util.Set;
import org.linphone.R;
import org.linphone.chat.ChatActivity;
+import org.linphone.contacts.ContactsActivity;
import org.linphone.contacts.LinphoneContact;
import org.linphone.core.tools.Log;
@@ -79,4 +80,36 @@ public class LinphoneShortcutManager {
return null;
}
+
+ public ShortcutInfo createContactShortcutInfo(LinphoneContact contact) {
+ if (contact == null) return null;
+
+ Bitmap bm = null;
+ if (contact.getThumbnailUri() != null) {
+ bm = ImageUtils.getRoundBitmapFromUri(mContext, contact.getThumbnailUri());
+ }
+ Icon icon =
+ bm == null
+ ? Icon.createWithResource(mContext, R.drawable.avatar)
+ : Icon.createWithBitmap(bm);
+
+ try {
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setClass(mContext, ContactsActivity.class);
+ intent.addFlags(
+ Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
+ intent.putExtra("ContactId", contact.getContactId());
+
+ return new ShortcutInfo.Builder(mContext, contact.getContactId())
+ .setShortLabel(contact.getFullName())
+ .setIcon(icon)
+ .setCategories(mCategories)
+ .setIntent(intent)
+ .build();
+ } catch (Exception e) {
+ Log.e("[Shortcuts Manager] ShortcutInfo.Builder exception: " + e);
+ }
+
+ return null;
+ }
}
diff --git a/app/src/main/res/values/non_localizable_custom.xml b/app/src/main/res/values/non_localizable_custom.xml
index 4dff7344b..53732b75c 100644
--- a/app/src/main/res/values/non_localizable_custom.xml
+++ b/app/src/main/res/values/non_localizable_custom.xml
@@ -93,9 +93,14 @@
true
true
false
- true
false
+
+ true
+
+ true
+ false
+
false
false