Loading java/com/android/dialer/dialpadview/SpecialCharSequenceMgr.java +8 −31 Original line number Diff line number Diff line Loading @@ -59,11 +59,10 @@ import com.android.contacts.common.widget.SelectPhoneAccountDialogFragment.Selec import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.compat.telephony.TelephonyManagerCompat; import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.oem.MotorolaUtils; import com.android.dialer.oem.TranssionUtils; import com.android.dialer.telecom.TelecomUtil; import com.android.dialer.util.PermissionsUtil; import com.google.common.collect.ImmutableSet; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; Loading @@ -73,15 +72,7 @@ import java.util.List; import java.util.Locale; /** * Helper class to listen for some magic character sequences that are handled specially by the * dialer. * * <p>Note the Phone app also handles these sequences too (in a couple of relatively obscure places * in the UI), so there's a separate version of this class under apps/Phone. * * <p>TODO: there's lots of duplicated code between this class and the corresponding class under * apps/Phone. Let's figure out a way to unify these two classes (in the framework? in a common * shared library?) * Helper class to listen for some magic character sequences that are handled specially by Dialer. */ public class SpecialCharSequenceMgr { private static final String TAG_SELECT_ACCT_FRAGMENT = "tag_select_acct_fragment"; Loading @@ -94,9 +85,6 @@ public class SpecialCharSequenceMgr { private static final String ADN_NAME_COLUMN_NAME = "name"; private static final int ADN_QUERY_TOKEN = -1; /** Comma separated MMI codes specific to OEM/device. */ @VisibleForTesting static final String CONFIG_OEM_MMI_CODES_CSV = "oem_mmi_codes_csv"; /** * Remembers the previous {@link QueryHandler} and cancel the operation when needed, to prevent * possible crash. Loading Loading @@ -158,6 +146,12 @@ public class SpecialCharSequenceMgr { * @return true if a secret code was encountered and handled */ static boolean handleSecretCode(Context context, String input) { // Secret code specific to OEMs should be handled first. if (TranssionUtils.isTranssionSecretCode(input)) { TranssionUtils.handleTranssionSecretCode(context, input); return true; } // Secret codes are accessed by dialing *#*#<code>#*#* or "*#<code_starting_with_number>#" if (input.length() > 8 && input.startsWith("*#*#") && input.endsWith("#*#*")) { String secretCode = input.substring(4, input.length() - 4); Loading @@ -165,26 +159,9 @@ public class SpecialCharSequenceMgr { return true; } if (getOemSecretCodes(context).contains(input)) { String secretCode = input.substring(2, input.length() - 1); TelephonyManagerCompat.handleSecretCode(context, secretCode); return true; } return false; } /** * Get the OEM codes from the config provider. The config provider should be aware of the device * and manufacturer. */ private static ImmutableSet<String> getOemSecretCodes(Context context) { String csv = ConfigProviderBindings.get(context).getString(CONFIG_OEM_MMI_CODES_CSV, null); if (TextUtils.isEmpty(csv)) { return ImmutableSet.of(); } return ImmutableSet.copyOf(csv.split(",")); } /** * Handle ADN requests by filling in the SIM contact number into the requested EditText. * Loading java/com/android/dialer/oem/TranssionUtils.java 0 → 100644 +73 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.dialer.oem; import android.content.Context; import android.os.Build; import android.support.annotation.VisibleForTesting; import com.android.dialer.common.Assert; import com.android.dialer.compat.telephony.TelephonyManagerCompat; import com.google.common.collect.ImmutableSet; /** Utilities for Transsion devices. */ public final class TranssionUtils { @VisibleForTesting public static final ImmutableSet<String> TRANSSION_DEVICE_MANUFACTURERS = ImmutableSet.of("INFINIX MOBILITY LIMITED", "itel", "TECNO"); @VisibleForTesting public static final ImmutableSet<String> TRANSSION_SECRET_CODES = ImmutableSet.of("*#07#", "*#87#", "*#43#", "*#2727#", "*#88#"); private TranssionUtils() {} /** * Returns true if * * <ul> * <li>the device is a Transsion device, AND * <li>the input is a secret code for Transsion devices. * </ul> */ public static boolean isTranssionSecretCode(String input) { return TRANSSION_DEVICE_MANUFACTURERS.contains(Build.MANUFACTURER) && TRANSSION_SECRET_CODES.contains(input); } /** * Handle a Transsion secret code by passing it to {@link * TelephonyManagerCompat#handleSecretCode(Context, String)}. * * <p>Before calling this method, we must use {@link #isTranssionSecretCode(String)} to ensure the * device is a Transsion device and the input is a valid Transsion secret code. * * <p>An exception will be thrown if either of the conditions above is not met. */ public static void handleTranssionSecretCode(Context context, String input) { Assert.checkState(isTranssionSecretCode(input)); TelephonyManagerCompat.handleSecretCode(context, getDigitsFromSecretCode(input)); } private static String getDigitsFromSecretCode(String input) { // We assume a valid secret code is of format "*#{[0-9]+}#". Assert.checkArgument(input.length() > 3 && input.startsWith("*#") && input.endsWith("#")); return input.substring(2, input.length() - 1); } } Loading
java/com/android/dialer/dialpadview/SpecialCharSequenceMgr.java +8 −31 Original line number Diff line number Diff line Loading @@ -59,11 +59,10 @@ import com.android.contacts.common.widget.SelectPhoneAccountDialogFragment.Selec import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.compat.telephony.TelephonyManagerCompat; import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.oem.MotorolaUtils; import com.android.dialer.oem.TranssionUtils; import com.android.dialer.telecom.TelecomUtil; import com.android.dialer.util.PermissionsUtil; import com.google.common.collect.ImmutableSet; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; Loading @@ -73,15 +72,7 @@ import java.util.List; import java.util.Locale; /** * Helper class to listen for some magic character sequences that are handled specially by the * dialer. * * <p>Note the Phone app also handles these sequences too (in a couple of relatively obscure places * in the UI), so there's a separate version of this class under apps/Phone. * * <p>TODO: there's lots of duplicated code between this class and the corresponding class under * apps/Phone. Let's figure out a way to unify these two classes (in the framework? in a common * shared library?) * Helper class to listen for some magic character sequences that are handled specially by Dialer. */ public class SpecialCharSequenceMgr { private static final String TAG_SELECT_ACCT_FRAGMENT = "tag_select_acct_fragment"; Loading @@ -94,9 +85,6 @@ public class SpecialCharSequenceMgr { private static final String ADN_NAME_COLUMN_NAME = "name"; private static final int ADN_QUERY_TOKEN = -1; /** Comma separated MMI codes specific to OEM/device. */ @VisibleForTesting static final String CONFIG_OEM_MMI_CODES_CSV = "oem_mmi_codes_csv"; /** * Remembers the previous {@link QueryHandler} and cancel the operation when needed, to prevent * possible crash. Loading Loading @@ -158,6 +146,12 @@ public class SpecialCharSequenceMgr { * @return true if a secret code was encountered and handled */ static boolean handleSecretCode(Context context, String input) { // Secret code specific to OEMs should be handled first. if (TranssionUtils.isTranssionSecretCode(input)) { TranssionUtils.handleTranssionSecretCode(context, input); return true; } // Secret codes are accessed by dialing *#*#<code>#*#* or "*#<code_starting_with_number>#" if (input.length() > 8 && input.startsWith("*#*#") && input.endsWith("#*#*")) { String secretCode = input.substring(4, input.length() - 4); Loading @@ -165,26 +159,9 @@ public class SpecialCharSequenceMgr { return true; } if (getOemSecretCodes(context).contains(input)) { String secretCode = input.substring(2, input.length() - 1); TelephonyManagerCompat.handleSecretCode(context, secretCode); return true; } return false; } /** * Get the OEM codes from the config provider. The config provider should be aware of the device * and manufacturer. */ private static ImmutableSet<String> getOemSecretCodes(Context context) { String csv = ConfigProviderBindings.get(context).getString(CONFIG_OEM_MMI_CODES_CSV, null); if (TextUtils.isEmpty(csv)) { return ImmutableSet.of(); } return ImmutableSet.copyOf(csv.split(",")); } /** * Handle ADN requests by filling in the SIM contact number into the requested EditText. * Loading
java/com/android/dialer/oem/TranssionUtils.java 0 → 100644 +73 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.dialer.oem; import android.content.Context; import android.os.Build; import android.support.annotation.VisibleForTesting; import com.android.dialer.common.Assert; import com.android.dialer.compat.telephony.TelephonyManagerCompat; import com.google.common.collect.ImmutableSet; /** Utilities for Transsion devices. */ public final class TranssionUtils { @VisibleForTesting public static final ImmutableSet<String> TRANSSION_DEVICE_MANUFACTURERS = ImmutableSet.of("INFINIX MOBILITY LIMITED", "itel", "TECNO"); @VisibleForTesting public static final ImmutableSet<String> TRANSSION_SECRET_CODES = ImmutableSet.of("*#07#", "*#87#", "*#43#", "*#2727#", "*#88#"); private TranssionUtils() {} /** * Returns true if * * <ul> * <li>the device is a Transsion device, AND * <li>the input is a secret code for Transsion devices. * </ul> */ public static boolean isTranssionSecretCode(String input) { return TRANSSION_DEVICE_MANUFACTURERS.contains(Build.MANUFACTURER) && TRANSSION_SECRET_CODES.contains(input); } /** * Handle a Transsion secret code by passing it to {@link * TelephonyManagerCompat#handleSecretCode(Context, String)}. * * <p>Before calling this method, we must use {@link #isTranssionSecretCode(String)} to ensure the * device is a Transsion device and the input is a valid Transsion secret code. * * <p>An exception will be thrown if either of the conditions above is not met. */ public static void handleTranssionSecretCode(Context context, String input) { Assert.checkState(isTranssionSecretCode(input)); TelephonyManagerCompat.handleSecretCode(context, getDigitsFromSecretCode(input)); } private static String getDigitsFromSecretCode(String input) { // We assume a valid secret code is of format "*#{[0-9]+}#". Assert.checkArgument(input.length() > 3 && input.startsWith("*#") && input.endsWith("#")); return input.substring(2, input.length() - 1); } }