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