Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ff9e4fc authored by qqzhou's avatar qqzhou Committed by Steve Kondik
Browse files

Dialer: support IP call for msim.

- add IP call in options menu in call detail activity.
- add IP call in overflow popup menu in dialpad fragment.

Change-Id: I47e4fc6eea031fcdfffa34f61da3e90f489e55a2
parent 88663a6d
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -14,6 +14,16 @@
     limitations under the License.
-->
<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"
+6 −0
Original line number Diff line number Diff line
@@ -14,6 +14,12 @@
     limitations under the License.
-->
<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"
+64 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.VoicemailContract.Voicemails;
import android.telecom.PhoneAccount;
import android.telephony.SubscriptionManager;
import android.telecom.PhoneAccountHandle;
import android.telephony.TelephonyManager;
import android.text.BidiFormatter;
import android.text.TextDirectionHeuristics;
@@ -52,6 +53,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;
@@ -67,6 +69,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;

@@ -145,6 +148,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();
@@ -463,6 +470,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);
@@ -703,9 +720,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()) {
+60 −0
Original line number Diff line number Diff line
@@ -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
@@ -914,6 +918,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);
@@ -1114,6 +1139,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.
@@ -1609,6 +1663,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;
        }