diff options
-rw-r--r-- | res/menu/call_details_options.xml | 10 | ||||
-rw-r--r-- | res/menu/dialpad_options.xml | 6 | ||||
-rw-r--r-- | src/com/android/dialer/CallDetailActivity.java | 64 | ||||
-rw-r--r-- | src/com/android/dialer/dialpad/DialpadFragment.java | 60 |
4 files changed, 140 insertions, 0 deletions
diff --git a/res/menu/call_details_options.xml b/res/menu/call_details_options.xml index a48687e67..497d18968 100644 --- a/res/menu/call_details_options.xml +++ b/res/menu/call_details_options.xml @@ -15,6 +15,16 @@ --> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item + android:id="@+id/menu_ip_call_by_slot1" + android:showAsAction="withText" + android:onClick="onMenuIpCallBySlot1" + /> + <item + android:id="@+id/menu_ip_call_by_slot2" + android:showAsAction="withText" + android:onClick="onMenuIpCallBySlot2" + /> + <item android:id="@+id/menu_trash" android:icon="@drawable/ic_calllog_delete" android:showAsAction="ifRoom" diff --git a/res/menu/dialpad_options.xml b/res/menu/dialpad_options.xml index 49ee37d8f..f8618c0b6 100644 --- a/res/menu/dialpad_options.xml +++ b/res/menu/dialpad_options.xml @@ -15,6 +15,12 @@ --> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item + android:id="@+id/menu_ip_call_by_slot1" + android:showAsAction="withText" /> + <item + android:id="@+id/menu_ip_call_by_slot2" + android:showAsAction="withText" /> + <item android:id="@+id/menu_add_contact" android:title="@string/add_contact" android:showAsAction="withText" /> diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java index f7c0d6695..9491bb8be 100644 --- a/src/com/android/dialer/CallDetailActivity.java +++ b/src/com/android/dialer/CallDetailActivity.java @@ -31,6 +31,7 @@ import android.provider.CallLog.Calls; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.VoicemailContract.Voicemails; import android.telecom.PhoneAccount; +import android.telecom.PhoneAccountHandle; import android.telephony.TelephonyManager; import android.text.BidiFormatter; import android.text.TextDirectionHeuristics; @@ -51,6 +52,7 @@ import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.CallUtil; import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest; import com.android.contacts.common.GeoUtil; +import com.android.contacts.common.MoreContactUtils; import com.android.dialer.calllog.CallDetailHistoryAdapter; import com.android.dialer.calllog.CallTypeHelper; import com.android.dialer.calllog.ContactInfo; @@ -66,6 +68,7 @@ import com.android.dialer.voicemail.VoicemailStatusHelper; import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage; import com.android.dialer.voicemail.VoicemailStatusHelperImpl; import com.android.dialerbind.analytics.AnalyticsActivity; +import com.android.internal.telephony.PhoneConstants; import java.util.List; @@ -144,6 +147,10 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe private boolean mHasTrashOption; /** Whether we should show "remove from call log" in the options menu. */ private boolean mHasRemoveFromCallLogOption; + /** Whether we should show "Ip Call by SIM1" in the options menu. */ + private boolean mHasSub1IpCallOption; + /** Whether we should show "Ip Call by SIM2" in the options menu. */ + private boolean mHasSub2IpCallOption; private ProximitySensorManager mProximitySensorManager; private final ProximitySensorListener mProximitySensorListener = new ProximitySensorListener(); @@ -460,6 +467,16 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe canPlaceCallsTo && !isSipNumber && !isVoicemailNumber; mHasTrashOption = hasVoicemail(); mHasRemoveFromCallLogOption = !hasVoicemail(); + mHasSub1IpCallOption = canPlaceCallsTo + && !isSipNumber + && !isVoicemailNumber + && MoreContactUtils + .isMultiSimEnable(CallDetailActivity.this, PhoneConstants.SUB1); + mHasSub2IpCallOption = canPlaceCallsTo + && !isSipNumber + && !isVoicemailNumber + && MoreContactUtils + .isMultiSimEnable(CallDetailActivity.this, PhoneConstants.SUB2); invalidateOptionsMenu(); ListView historyList = (ListView) findViewById(R.id.history); @@ -693,9 +710,56 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe menu.findItem(R.id.menu_remove_from_call_log).setVisible(mHasRemoveFromCallLogOption); menu.findItem(R.id.menu_edit_number_before_call).setVisible(mHasEditNumberBeforeCallOption); menu.findItem(R.id.menu_trash).setVisible(mHasTrashOption); + + menu.findItem(R.id.menu_ip_call_by_slot1).setVisible(mHasSub1IpCallOption); + menu.findItem(R.id.menu_ip_call_by_slot2).setVisible(mHasSub2IpCallOption); + + if (mHasSub1IpCallOption) { + String sub1Name = MoreContactUtils.getMultiSimAliasesName(this, PhoneConstants.SUB1); + menu.findItem(R.id.menu_ip_call_by_slot1).setTitle(getString( + com.android.contacts.common.R.string.ip_call_by_slot, sub1Name)); + } + if (mHasSub2IpCallOption) { + String sub2Name = MoreContactUtils.getMultiSimAliasesName(this, PhoneConstants.SUB2); + menu.findItem(R.id.menu_ip_call_by_slot2).setTitle(getString( + com.android.contacts.common.R.string.ip_call_by_slot, sub2Name)); + } + return super.onPrepareOptionsMenu(menu); } + public void onMenuIpCallBySlot1(MenuItem menuItem) { + String prefix = MoreContactUtils.getIPCallPrefix(this, PhoneConstants.SUB1); + if (!TextUtils.isEmpty(prefix)) { + ComponentName serviceName = + new ComponentName("com.android.phone", + "com.android.services.telephony.TelephonyConnectionService"); + PhoneAccountHandle account = new PhoneAccountHandle(serviceName, + String.valueOf(PhoneConstants.SUB1)); + Intent callIntent = new Intent(CallUtil.getCallIntent( + prefix + "" + mNumber, account)); + startActivity(callIntent); + } else { + MoreContactUtils.showNoIPNumberDialog(this, PhoneConstants.SUB1); + } + } + + public void onMenuIpCallBySlot2(MenuItem menuItem) { + String prefix = MoreContactUtils.getIPCallPrefix(this, PhoneConstants.SUB2); + if (!TextUtils.isEmpty(prefix)) { + ComponentName serviceName = + new ComponentName("com.android.phone", + "com.android.services.telephony.TelephonyConnectionService"); + PhoneAccountHandle account = new PhoneAccountHandle(serviceName, + String.valueOf(PhoneConstants.SUB2)); + Intent callIntent = new Intent(CallUtil.getCallIntent( + prefix + "" + mNumber, account)); + startActivity(callIntent); + } else { + MoreContactUtils.showNoIPNumberDialog(this, PhoneConstants.SUB2); + } + } + public void onMenuRemoveFromCallLog(MenuItem menuItem) { final StringBuilder callIds = new StringBuilder(); for (Uri callUri : getCallLogEntryUris()) { diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java index cdc1c9f79..d3ffad4a1 100644 --- a/src/com/android/dialer/dialpad/DialpadFragment.java +++ b/src/com/android/dialer/dialpad/DialpadFragment.java @@ -70,6 +70,7 @@ import android.widget.TextView; import com.android.contacts.common.CallUtil; import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.GeoUtil; +import com.android.contacts.common.MoreContactUtils; import com.android.contacts.common.util.PhoneNumberFormatter; import com.android.contacts.common.util.StopWatch; import com.android.contacts.common.widget.FloatingActionButtonController; @@ -81,6 +82,7 @@ import com.android.dialer.SpeedDialListActivity; import com.android.dialer.SpeedDialUtils; import com.android.dialer.util.DialerUtils; import com.android.dialerbind.analytics.AnalyticsFragment; +import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.TelephonyProperties; import com.android.phone.common.CallLogAsync; import com.android.phone.common.HapticFeedback; @@ -103,6 +105,8 @@ public class DialpadFragment extends AnalyticsFragment DialpadKeyButton.OnPressedListener { private static final String TAG = DialpadFragment.class.getSimpleName(); + private Context mContext; + /** * This interface allows the DialpadFragment to tell its hosting Activity when and when not * to display the "dial" button. While this is logically part of the DialpadFragment, the @@ -903,6 +907,27 @@ public class DialpadFragment extends AnalyticsFragment final MenuItem sendMessage = menu.findItem(R.id.menu_send_message); sendMessage.setVisible(mSmsPackageComponentName != null); + final MenuItem ipCallBySlot1 = menu.findItem(R.id.menu_ip_call_by_slot1); + final MenuItem ipCallBySlot2 = menu.findItem(R.id.menu_ip_call_by_slot2); + if (MoreContactUtils.isMultiSimEnable(mContext, PhoneConstants.SUB1)) { + String sub1Name = MoreContactUtils.getMultiSimAliasesName( + mContext, PhoneConstants.SUB1); + ipCallBySlot1.setTitle(mContext.getString( + com.android.contacts.common.R.string.ip_call_by_slot, sub1Name)); + ipCallBySlot1.setVisible(true); + } else { + ipCallBySlot1.setVisible(false); + } + if (MoreContactUtils.isMultiSimEnable(mContext, PhoneConstants.SUB2)) { + String sub2Name = MoreContactUtils.getMultiSimAliasesName( + mContext, PhoneConstants.SUB2); + ipCallBySlot2.setTitle(mContext.getString( + com.android.contacts.common.R.string.ip_call_by_slot, sub2Name)); + ipCallBySlot2.setVisible(true); + } else { + ipCallBySlot2.setVisible(false); + } + boolean enable = !isDigitsEmpty(); for (int i = 0; i < menu.size(); i++) { menu.getItem(i).setEnabled(enable); @@ -1103,6 +1128,35 @@ public class DialpadFragment extends AnalyticsFragment return false; } + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + mContext = activity; + } + + private void ipCallBySlot(int subscription) { + String prefix = MoreContactUtils.getIPCallPrefix(mContext, subscription); + if (!TextUtils.isEmpty(prefix)) { + ComponentName serviceName = + new ComponentName("com.android.phone", + "com.android.services.telephony.TelephonyConnectionService"); + PhoneAccountHandle account = new PhoneAccountHandle(serviceName, + String.valueOf(subscription)); + Intent callIntent = new Intent(CallUtil.getCallIntent( + prefix + "" + getValidDialNumber(), account)); + startActivity(callIntent); + } else { + MoreContactUtils.showNoIPNumberDialog(mContext, subscription); + } + } + + private String getValidDialNumber() { + if (mDigits != null) + return mDigits.getText().toString(); + else + return ""; + } + /** * Remove the digit just before the current position. This can be used if we want to replace * the previous digit or cancel previously entered character. @@ -1597,6 +1651,12 @@ public class DialpadFragment extends AnalyticsFragment DialerUtils.startActivityWithErrorToast(getActivity(), smsIntent); return true; } + case R.id.menu_ip_call_by_slot1: + ipCallBySlot(PhoneConstants.SUB1); + return true; + case R.id.menu_ip_call_by_slot2: + ipCallBySlot(PhoneConstants.SUB2); + return true; default: return false; } |