From 7742bac3b37066ad6fa2c44582c90f12119fd8b3 Mon Sep 17 00:00:00 2001 From: roldenburg Date: Thu, 22 Feb 2018 15:34:14 -0800 Subject: Use SystemProperties to access ro.carrier as System.getProperty cannot get it Bug: 71707082 Test: MotorolaHiddenMenuKeySequenceTest PiperOrigin-RevId: 186685319 Change-Id: If23ec797a174736e68b6100b3d33c7dccb9a88f8 --- .../dialer/oem/MotorolaHiddenMenuKeySequence.java | 7 ++- .../dialer/oem/SystemPropertiesAccessor.java | 64 ++++++++++++++++++++++ 2 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 java/com/android/dialer/oem/SystemPropertiesAccessor.java (limited to 'java') 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; + } + } +} -- cgit v1.2.3