diff --git a/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java b/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java
index 81f6b60..079624b 100644
--- a/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java
+++ b/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java
@@ -65,13 +65,14 @@
    */
   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 @@
       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 0000000..122bbfe
--- /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;
+    }
+  }
+}
