diff options
-rw-r--r-- | src/com/android/dialer/DialtactsActivity.java | 11 | ||||
-rw-r--r-- | src/com/android/dialer/SpecialCharSequenceMgr.java | 81 | ||||
-rw-r--r-- | src/com/android/dialer/dialpad/DialpadFragment.java | 20 |
3 files changed, 92 insertions, 20 deletions
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java index 32339d2cf..cace854f0 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -1,5 +1,7 @@ /* * Copyright (C) 2008 The Android Open Source Project + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * Not a Contribution. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,6 +41,7 @@ import android.provider.ContactsContract.Intents.UI; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; +import android.telephony.MSimTelephonyManager; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; @@ -89,6 +92,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O private static final String PHONE_PACKAGE = "com.android.phone"; private static final String CALL_SETTINGS_CLASS_NAME = "com.android.phone.CallFeaturesSetting"; + private static final String MSIM_CALL_SETTINGS_CLASS_NAME = + "com.android.phone.MSimCallFeaturesSetting"; /** @see #getCallOrigin() */ private static final String CALL_ORIGIN_DIALTACTS = @@ -1260,7 +1265,11 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O /** Returns an Intent to launch Call Settings screen */ public static Intent getCallSettingsIntent() { final Intent intent = new Intent(Intent.ACTION_MAIN); - intent.setClassName(PHONE_PACKAGE, CALL_SETTINGS_CLASS_NAME); + if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) { + intent.setClassName(PHONE_PACKAGE, MSIM_CALL_SETTINGS_CLASS_NAME); + } else { + intent.setClassName(PHONE_PACKAGE, CALL_SETTINGS_CLASS_NAME); + } intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); return intent; } diff --git a/src/com/android/dialer/SpecialCharSequenceMgr.java b/src/com/android/dialer/SpecialCharSequenceMgr.java index fdef263fb..78c3e52d6 100644 --- a/src/com/android/dialer/SpecialCharSequenceMgr.java +++ b/src/com/android/dialer/SpecialCharSequenceMgr.java @@ -1,5 +1,7 @@ /* * Copyright (C) 2006 The Android Open Source Project + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * Not a Contribution. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +32,9 @@ import android.net.Uri; import android.os.Looper; import android.os.RemoteException; import android.os.ServiceManager; +import android.provider.Settings; +import android.provider.Settings.SettingNotFoundException; +import android.telephony.MSimTelephonyManager; import android.telephony.PhoneNumberUtils; import android.telephony.TelephonyManager; import android.util.Log; @@ -39,6 +44,7 @@ import android.widget.Toast; import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler; import com.android.internal.telephony.ITelephony; +import com.android.internal.telephony.msim.ITelephonyMSim; import com.android.internal.telephony.TelephonyCapabilities; import com.android.internal.telephony.TelephonyIntents; @@ -173,6 +179,9 @@ public class SpecialCharSequenceMgr { } int len = input.length(); + int subscription = 0; + Uri uri = null; + if ((len > 1) && (len < 5) && (input.endsWith("#"))) { try { // get the ordinal number of the sim contact @@ -208,9 +217,18 @@ public class SpecialCharSequenceMgr { // display the progress dialog sc.progressDialog.show(); + subscription = MSimTelephonyManager.getDefault().getPreferredVoiceSubscription(); + + if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) { + String[] adn = {"adn", "adn_sub2", "adn_sub3"}; + + uri = Uri.parse("content://iccmsim/" + adn[subscription]); + } else { + uri = Uri.parse("content://icc/adn"); + } // run the query. - handler.startQuery(ADN_QUERY_TOKEN, sc, Uri.parse("content://icc/adn"), + handler.startQuery(ADN_QUERY_TOKEN, sc, uri, new String[]{ADN_PHONE_NUMBER_COLUMN_NAME}, null, null, null); if (sPreviousAdnQueryHandler != null) { @@ -229,8 +247,19 @@ public class SpecialCharSequenceMgr { static boolean handlePinEntry(Context context, String input) { if ((input.startsWith("**04") || input.startsWith("**05")) && input.endsWith("#")) { try { - return ITelephony.Stub.asInterface(ServiceManager.getService("phone")) - .handlePinMmi(input); + if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) { + int subscription = 0; + + // On multisim targets handle PIN/PUK related MMI commands on + // Voice preferred subscription. + subscription = MSimTelephonyManager.getDefault() + .getPreferredVoiceSubscription(); + return ITelephonyMSim.Stub.asInterface(ServiceManager.getService("phone_msim")) + .handlePinMmi(input, subscription); + } else { + return ITelephony.Stub.asInterface(ServiceManager.getService("phone")) + .handlePinMmi(input); + } } catch (RemoteException e) { Log.e(TAG, "Failed to handlePinMmi due to remote exception"); return false; @@ -240,15 +269,22 @@ public class SpecialCharSequenceMgr { } static boolean handleIMEIDisplay(Context context, String input, boolean useSystemWindow) { - TelephonyManager telephonyManager = - (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - if (telephonyManager != null && input.equals(MMI_IMEI_DISPLAY)) { - int phoneType = telephonyManager.getCurrentPhoneType(); + if (input.equals(MMI_IMEI_DISPLAY)) { + int subscription = MSimTelephonyManager.getDefault().getPreferredVoiceSubscription(); + int phoneType; + if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) { + phoneType = ((MSimTelephonyManager)context.getSystemService( + Context.MSIM_TELEPHONY_SERVICE)).getCurrentPhoneType(subscription); + } else { + phoneType = ((TelephonyManager)context.getSystemService( + Context.TELEPHONY_SERVICE)).getCurrentPhoneType(); + } + if (phoneType == TelephonyManager.PHONE_TYPE_GSM) { - showIMEIPanel(context, useSystemWindow, telephonyManager); + showIMEIPanel(context, useSystemWindow); return true; } else if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) { - showMEIDPanel(context, useSystemWindow, telephonyManager); + showMEIDPanel(context, useSystemWindow); return true; } } @@ -278,10 +314,16 @@ public class SpecialCharSequenceMgr { // version of SpecialCharSequenceMgr.java. (This will require moving // the phone app's TelephonyCapabilities.getDeviceIdLabel() method // into the telephony framework, though.) - - private static void showIMEIPanel(Context context, boolean useSystemWindow, - TelephonyManager telephonyManager) { - String imeiStr = telephonyManager.getDeviceId(); + private static void showIMEIPanel(Context context, boolean useSystemWindow) { + int subscription = MSimTelephonyManager.getDefault().getPreferredVoiceSubscription(); + String imeiStr; + if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) { + imeiStr = ((MSimTelephonyManager)context. + getSystemService(Context.MSIM_TELEPHONY_SERVICE)).getDeviceId(subscription); + } else { + imeiStr = ((TelephonyManager)context. + getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); + } AlertDialog alert = new AlertDialog.Builder(context) .setTitle(R.string.imei) @@ -291,9 +333,16 @@ public class SpecialCharSequenceMgr { .show(); } - private static void showMEIDPanel(Context context, boolean useSystemWindow, - TelephonyManager telephonyManager) { - String meidStr = telephonyManager.getDeviceId(); + private static void showMEIDPanel(Context context, boolean useSystemWindow) { + int subscription = MSimTelephonyManager.getDefault().getPreferredVoiceSubscription(); + String meidStr; + if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) { + meidStr = ((MSimTelephonyManager)context. + getSystemService(Context.MSIM_TELEPHONY_SERVICE)).getDeviceId(subscription); + } else { + meidStr = ((TelephonyManager)context. + getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); + } AlertDialog alert = new AlertDialog.Builder(context) .setTitle(R.string.meid) diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java index b54084e4c..5494991cb 100644 --- a/src/com/android/dialer/dialpad/DialpadFragment.java +++ b/src/com/android/dialer/dialpad/DialpadFragment.java @@ -1,5 +1,7 @@ /* * Copyright (C) 2011 The Android Open Source Project + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * Not a Contribution. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,6 +46,7 @@ import android.provider.Contacts.People; import android.provider.Contacts.Phones; import android.provider.Contacts.PhonesColumns; import android.provider.Settings; +import android.telephony.MSimTelephonyManager; import android.telephony.PhoneNumberUtils; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; @@ -107,6 +110,7 @@ public class DialpadFragment extends Fragment private static final boolean DEBUG = DialtactsActivity.DEBUG; + private static final String SUBSCRIPTION_KEY = "subscription"; private static final String EMPTY_NUMBER = ""; private static final char PAUSE = ','; private static final char WAIT = ';'; @@ -174,6 +178,7 @@ public class DialpadFragment extends Fragment */ private String mProhibitedPhoneNumberRegexp; + private int mSubscription = 0; // Last number dialed, retrieved asynchronously from the call DB // in onCreate. This number is displayed when the user hits the @@ -1700,14 +1705,22 @@ public class DialpadFragment extends Fragment * * @return true if voicemail is enabled and accessibly. Note that this can be false * "temporarily" after the app boot. - * @see TelephonyManager#getVoiceMailNumber() + * @see MSimTelephonyManager#getVoiceMailNumber() */ private boolean isVoicemailAvailable() { try { - return (TelephonyManager.getDefault().getVoiceMailNumber() != null); + if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) { + mSubscription = MSimTelephonyManager.getDefault().getPreferredVoiceSubscription(); + Log.d(TAG, "Voicemail preferred sub id = "+ mSubscription); + + return (MSimTelephonyManager.getDefault(). + getVoiceMailNumber(mSubscription) != null); + } else { + return (TelephonyManager.getDefault().getVoiceMailNumber() != null); + } } catch (SecurityException se) { // Possibly no READ_PHONE_STATE privilege. - Log.w(TAG, "SecurityException is thrown. Maybe privilege isn't sufficient."); + Log.e(TAG, "SecurityException is thrown. Maybe privilege isn't sufficient."); } return false; } @@ -1782,6 +1795,7 @@ public class DialpadFragment extends Fragment private Intent newFlashIntent() { final Intent intent = CallUtil.getCallIntent(EMPTY_NUMBER); intent.putExtra(EXTRA_SEND_EMPTY_FLASH, true); + intent.putExtra(SUBSCRIPTION_KEY, mSubscription); return intent; } |