diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java | 7 | ||||
-rw-r--r-- | java/com/android/dialer/oem/SystemPropertiesAccessor.java | 64 |
2 files changed, 68 insertions, 3 deletions
diff --git a/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java b/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java index 81f6b607c..079624b64 100644 --- a/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java +++ b/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java @@ -65,13 +65,14 @@ public class MotorolaHiddenMenuKeySequence { */ private static synchronized MotorolaHiddenMenuKeySequence getInstance(Context context) { if (null == instance) { - instance = new MotorolaHiddenMenuKeySequence(context); + instance = new MotorolaHiddenMenuKeySequence(context, new SystemPropertiesAccessor()); } return instance; } @VisibleForTesting - MotorolaHiddenMenuKeySequence(Context context) { + MotorolaHiddenMenuKeySequence( + Context context, SystemPropertiesAccessor systemPropertiesAccessor) { if (MotorolaUtils.isSupportingHiddenMenu(context)) { Collections.addAll( hiddenKeySequences, @@ -88,7 +89,7 @@ public class MotorolaHiddenMenuKeySequence { featureHiddenMenuEnabled = true; } - if ("tracfone".equals(System.getProperty("ro.carrier"))) { + if ("tracfone".equals(systemPropertiesAccessor.get("ro.carrier"))) { addHiddenKeySequence("#83865625#", "com.motorola.extensions.TFUnlock"); addHiddenKeySequence("#83782887#", "com.motorola.extensions.TFStatus"); featureHiddenMenuEnabled = true; diff --git a/java/com/android/dialer/oem/SystemPropertiesAccessor.java b/java/com/android/dialer/oem/SystemPropertiesAccessor.java new file mode 100644 index 000000000..122bbfe6c --- /dev/null +++ b/java/com/android/dialer/oem/SystemPropertiesAccessor.java @@ -0,0 +1,64 @@ +/* + * 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.support.annotation.Nullable; +import com.android.dialer.common.LogUtil; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * Hacky way to call the hidden SystemProperties class API. Needed to get the real value of + * ro.carrier and some other values. + */ +class SystemPropertiesAccessor { + private Method systemPropertiesGetMethod; + + @SuppressWarnings("PrivateApi") + public String get(String name) { + Method systemPropertiesGetMethod = getSystemPropertiesGetMethod(); + if (systemPropertiesGetMethod == null) { + return null; + } + + try { + return (String) systemPropertiesGetMethod.invoke(null, name); + } catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) { + LogUtil.e("SystemPropertiesAccessor.get", "unable to invoke system method", e); + return null; + } + } + + @SuppressWarnings("PrivateApi") + private @Nullable Method getSystemPropertiesGetMethod() { + if (systemPropertiesGetMethod != null) { + return systemPropertiesGetMethod; + } + + try { + Class<?> systemPropertiesClass = Class.forName("android.os.SystemProperties"); + if (systemPropertiesClass == null) { + return null; + } + systemPropertiesGetMethod = systemPropertiesClass.getMethod("get", String.class); + return systemPropertiesGetMethod; + } catch (ClassNotFoundException | NoSuchMethodException e) { + LogUtil.e("SystemPropertiesAccessor.get", "unable to access system class", e); + return null; + } + } +} |