diff --git a/AndroidManifest.xml b/AndroidManifest.xml index e7379bc6f..c4535943a 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -104,6 +104,11 @@ + + + + + 0) { - LinphoneActivity.instance().displayChat(mConversations.get(0)); + LinphoneActivity.instance().displayChat(mConversations.get(0), null); } else { LinphoneActivity.instance().displayEmptyFragment(); } @@ -201,20 +201,20 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte } else { backInCall.setVisibility(View.INVISIBLE); } - + if (LinphoneActivity.isInstanciated()) { LinphoneActivity.instance().selectMenu(FragmentsAvailable.CHAT_LIST); LinphoneActivity.instance().hideTabBar(false); } - + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); } - + refresh(); } - + @Override public void onPause() { LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); @@ -238,7 +238,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte super.onCreateContextMenu(menu, v, menuInfo); menu.add(0, v.getId(), 0, getString(R.string.delete)); } - + @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); @@ -246,13 +246,13 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte return false; } String sipUri = chatList.getAdapter().getItem(info.position).toString(); - + LinphoneActivity.instance().removeFromChatList(sipUri); mConversations = LinphoneActivity.instance().getChatList(); hideAndDisplayMessageIfNoChat(); return true; } - + @Override public void onClick(View v) { int id = v.getId(); @@ -314,7 +314,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte enabledDeleteButton(false); } else if (id == R.id.new_discussion) { - LinphoneActivity.instance().displayChat(null); + LinphoneActivity.instance().displayChat(null, null); /*String sipUri = fastNewChat.getText().toString(); if (sipUri.equals("")) { LinphoneActivity.instance().displayContacts(true); @@ -338,7 +338,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte String sipUri = chatList.getAdapter().getItem(position).toString(); if (LinphoneActivity.isInstanciated() && !isEditMode) { - LinphoneActivity.instance().displayChat(sipUri); + LinphoneActivity.instance().displayChat(sipUri, null); } } @@ -350,7 +350,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte public TextView unreadMessages; public CheckBox select; public ImageView contactPicture; - + public ViewHolder(View view) { lastMessageView = (TextView) view.findViewById(R.id.lastMessage); date = (TextView) view.findViewById(R.id.date); @@ -360,9 +360,9 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte contactPicture = (ImageView) view.findViewById(R.id.contact_picture); } } - + ChatListAdapter() {} - + public int getCount() { return mConversations.size(); } @@ -379,7 +379,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte View view = null; ViewHolder holder = null; String sipUri = mConversations.get(position); - + if (convertView != null) { view = convertView; holder = (ViewHolder) view.getTag(); @@ -388,7 +388,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte holder = new ViewHolder(view); view.setTag(holder); } - + LinphoneAddress address; try { address = LinphoneCoreFactory.instance().createLinphoneAddress(sipUri); diff --git a/src/android/org/linphone/ContactDetailsFragment.java b/src/android/org/linphone/ContactDetailsFragment.java index fb71c90bd..50a412cdb 100644 --- a/src/android/org/linphone/ContactDetailsFragment.java +++ b/src/android/org/linphone/ContactDetailsFragment.java @@ -51,32 +51,32 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener } } }; - + private OnClickListener chatListener = new OnClickListener() { @Override public void onClick(View v) { if (LinphoneActivity.isInstanciated()) { - LinphoneActivity.instance().displayChat(v.getTag().toString()); + LinphoneActivity.instance().displayChat(v.getTag().toString(), null); } } }; - + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { contact = (LinphoneContact) getArguments().getSerializable("Contact"); - + this.inflater = inflater; view = inflater.inflate(R.layout.contact, container, false); - + if (getArguments() != null) { displayChatAddressOnly = getArguments().getBoolean("ChatAddressOnly"); } - + editContact = (ImageView) view.findViewById(R.id.editContact); editContact.setOnClickListener(this); - + deleteContact = (ImageView) view.findViewById(R.id.deleteContact); deleteContact.setOnClickListener(this); - + organization = (TextView) view.findViewById(R.id.contactOrganization); boolean isOrgVisible = getResources().getBoolean(R.bool.display_contact_organization); String org = contact.getOrganization(); @@ -95,12 +95,12 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener return view; } - + public void changeDisplayedContact(LinphoneContact newContact) { contact = newContact; displayContact(inflater, view); } - + @SuppressLint("InflateParams") private void displayContact(LayoutInflater inflater, View view) { ImageView contactPicture = (ImageView) view.findViewById(R.id.contact_picture); @@ -109,10 +109,10 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener } else { contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } - + TextView contactName = (TextView) view.findViewById(R.id.contact_name); contactName.setText(contact.getFullName()); - + TableLayout controls = (TableLayout) view.findViewById(R.id.controls); controls.removeAllViews(); for (LinphoneNumberOrAddress noa : contact.getNumbersOrAddresses()) { @@ -130,11 +130,11 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener label.setText(R.string.phone_number); skip |= getResources().getBoolean(R.bool.hide_contact_phone_numbers); } - + TextView tv = (TextView) v.findViewById(R.id.numeroOrAddress); tv.setText(displayednumberOrAddress); tv.setSelected(true); - + LinphoneProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig(); if (lpc != null) { @@ -146,7 +146,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener if (contactAddress != null) { v.findViewById(R.id.friendLinphone).setVisibility(View.VISIBLE); } - + if (!displayChatAddressOnly) { v.findViewById(R.id.contact_call).setOnClickListener(dialListener); if (contactAddress != null) { @@ -164,17 +164,17 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener } else { v.findViewById(R.id.contact_chat).setTag(value); } - + if (getResources().getBoolean(R.bool.disable_chat)) { v.findViewById(R.id.contact_chat).setVisibility(View.GONE); } - + if (!skip) { controls.addView(v); } } } - + @Override public void onResume() { super.onResume(); @@ -190,7 +190,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener @Override public void onClick(View v) { int id = v.getId(); - + if (id == R.id.editContact) { LinphoneActivity.instance().editContact(contact); } diff --git a/src/android/org/linphone/HistoryDetailFragment.java b/src/android/org/linphone/HistoryDetailFragment.java index fa3f30564..3b9f5c834 100644 --- a/src/android/org/linphone/HistoryDetailFragment.java +++ b/src/android/org/linphone/HistoryDetailFragment.java @@ -42,7 +42,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { private TextView contactName, contactAddress, time, date; private String sipUri, displayName, pictureUri; private LinphoneContact contact; - + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -54,7 +54,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { String callDate = getArguments().getString("CallDate"); view = inflater.inflate(R.layout.history_detail, container, false); - + dialBack = (ImageView) view.findViewById(R.id.call); dialBack.setOnClickListener(this); @@ -64,33 +64,33 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { } else { back.setOnClickListener(this); } - + chat = (ImageView) view.findViewById(R.id.chat); chat.setOnClickListener(this); if (getResources().getBoolean(R.bool.disable_chat)) view.findViewById(R.id.chat).setVisibility(View.GONE); - + addToContacts = (ImageView) view.findViewById(R.id.add_contact); addToContacts.setOnClickListener(this); - + goToContact = (ImageView) view.findViewById(R.id.goto_contact); goToContact.setOnClickListener(this); - + contactPicture = (ImageView) view.findViewById(R.id.contact_picture); - + contactName = (TextView) view.findViewById(R.id.contact_name); contactAddress = (TextView) view.findViewById(R.id.contact_address); - + callDirection = (ImageView) view.findViewById(R.id.direction); - + time = (TextView) view.findViewById(R.id.time); date = (TextView) view.findViewById(R.id.date); - + displayHistory(status, callTime, callDate); - + return view; } - + private void displayHistory(String status, String callTime, String callDate) { if (status.equals(getResources().getString(R.string.missed))) { callDirection.setImageResource(R.drawable.call_missed); @@ -99,7 +99,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { } else if (status.equals(getResources().getString(R.string.outgoing))) { callDirection.setImageResource(R.drawable.call_outgoing); } - + time.setText(callTime == null ? "" : callTime); Long longDate = Long.parseLong(callDate); date.setText(LinphoneUtils.timestampToHumanDate(getActivity(),longDate,getString(R.string.history_detail_date_format))); @@ -130,8 +130,8 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { contactName.setText(displayName == null ? LinphoneUtils.getAddressDisplayName(sipUri) : displayName); } } - - public void changeDisplayedHistory(String sipUri, String displayName, String pictureUri, String status, String callTime, String callDate) { + + public void changeDisplayedHistory(String sipUri, String displayName, String pictureUri, String status, String callTime, String callDate) { if (displayName == null ) { displayName = LinphoneUtils.getUsernameFromAddress(sipUri); } @@ -141,11 +141,11 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { this.pictureUri = pictureUri; displayHistory(status, callTime, callDate); } - + @Override public void onResume() { super.onResume(); - + if (LinphoneActivity.isInstanciated()) { LinphoneActivity.instance().selectMenu(FragmentsAvailable.HISTORY_DETAIL); LinphoneActivity.instance().hideTabBar(false); @@ -161,7 +161,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { } if (id == R.id.call) { LinphoneActivity.instance().setAddresGoToDialerAndCall(sipUri, displayName, pictureUri == null ? null : Uri.parse(pictureUri)); } else if (id == R.id.chat) { - LinphoneActivity.instance().displayChat(sipUri); + LinphoneActivity.instance().displayChat(sipUri, null); } else if (id == R.id.add_contact) { String uri = sipUri; try { diff --git a/src/android/org/linphone/LinphoneActivity.java b/src/android/org/linphone/LinphoneActivity.java index bc0ce5475..fab6760fa 100644 --- a/src/android/org/linphone/LinphoneActivity.java +++ b/src/android/org/linphone/LinphoneActivity.java @@ -639,7 +639,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick return count; } - public void displayChat(String sipUri) { + public void displayChat(String sipUri, String message) { if (getResources().getBoolean(R.bool.disable_chat)) { return; } @@ -670,10 +670,11 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick Fragment fragment2 = getFragmentManager().findFragmentById(R.id.fragmentContainer2); if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.CHAT && !emptyFragment) { ChatFragment chatFragment = (ChatFragment) fragment2; - chatFragment.changeDisplayedChat(sipUri, displayName, pictureUri); + chatFragment.changeDisplayedChat(sipUri, displayName, pictureUri, message); } else { Bundle extras = new Bundle(); extras.putString("SipUri", sipUri); + extras.putString("messageDraft", message); if (sipUri != null && lAddress.getDisplayName() != null) { extras.putString("DisplayName", displayName); extras.putString("PictureUri", pictureUri); @@ -684,10 +685,11 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } else { if(isTablet()){ changeCurrentFragment(FragmentsAvailable.CHAT_LIST, null); - displayChat(sipUri); + displayChat(sipUri, message); } else { Bundle extras = new Bundle(); extras.putString("SipUri", sipUri); + extras.putString("messageDraft", message); if (sipUri != null && lAddress.getDisplayName() != null) { extras.putString("DisplayName", displayName); extras.putString("PictureUri", pictureUri); @@ -1419,7 +1421,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick LinphoneService.instance().removeMessageNotification(); String sipUri = extras.getString("ChatContactSipUri"); doNotGoToCallActivity = true; - displayChat(sipUri); + displayChat(sipUri, null); } else if (extras != null && extras.getBoolean("GoToHistory", false)) { doNotGoToCallActivity = true; changeCurrentFragment(FragmentsAvailable.HISTORY_LIST, null); diff --git a/src/android/org/linphone/LinphoneLauncherActivity.java b/src/android/org/linphone/LinphoneLauncherActivity.java index 584057a68..8d7672dd7 100644 --- a/src/android/org/linphone/LinphoneLauncherActivity.java +++ b/src/android/org/linphone/LinphoneLauncherActivity.java @@ -54,8 +54,10 @@ public class LinphoneLauncherActivity extends Activity { mHandler = new Handler(); + Intent intent = getIntent(); + if (LinphoneService.isReady()) { - onServiceReady(); + onServiceReady(intent); } else { // start linphone as background startService(new Intent(ACTION_MAIN).setClass(this, LinphoneService.class)); @@ -64,7 +66,7 @@ public class LinphoneLauncherActivity extends Activity { } } - protected void onServiceReady() { + protected void onServiceReady(Intent intent) { final Class classToStart; if (getResources().getBoolean(R.bool.show_tutorials_instead_of_app)) { classToStart = TutorialLauncherActivity.class; @@ -74,15 +76,31 @@ public class LinphoneLauncherActivity extends Activity { classToStart = LinphoneActivity.class; } + String sharedText = null; + if (intent != null) { + String action = intent.getAction(); + String type = intent.getType(); + + if (Intent.ACTION_SEND.equals(action) && type != null) { + if ("text/plain".equals(type)) { + sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); + } + } + } + // We need LinphoneService to start bluetoothManager if (Version.sdkAboveOrEqual(Version.API11_HONEYCOMB_30)) { BluetoothManager.getInstance().initBluetooth(); } + final String finalSharedText = sharedText; mHandler.postDelayed(new Runnable() { @Override public void run() { startActivity(new Intent().setClass(LinphoneLauncherActivity.this, classToStart).setData(getIntent().getData())); + if (finalSharedText != null) { + LinphoneActivity.instance().displayChat(null, finalSharedText); + } finish(); } }, 1000); @@ -100,7 +118,7 @@ public class LinphoneLauncherActivity extends Activity { mHandler.post(new Runnable() { @Override public void run() { - onServiceReady(); + onServiceReady(null); } }); mThread = null;