diff --git a/src/com/android/settings/ManualDisplayActivity.java b/src/com/android/settings/ManualDisplayActivity.java
index 8be4fee..8effc7b 100644
--- a/src/com/android/settings/ManualDisplayActivity.java
+++ b/src/com/android/settings/ManualDisplayActivity.java
@@ -22,7 +22,6 @@
 import android.content.res.Resources;
 import android.net.Uri;
 import android.os.Bundle;
-import android.os.SystemProperties;
 import android.text.TextUtils;
 import android.util.Log;
 import android.widget.Toast;
@@ -35,8 +34,7 @@
 public class ManualDisplayActivity extends Activity {
     private static final String TAG = "SettingsManualActivity";
 
-    private static final String DEFAULT_MANUAL_PATH = "/system/etc/MANUAL.html.gz";
-    private static final String PROPERTY_MANUAL_PATH = "ro.config.manual_path";
+    private static final String MANUAL_PATH = "/system/etc/MANUAL.html.gz";
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -47,16 +45,9 @@
             finish();   // No manual to display for this device
         }
 
-        final String path = SystemProperties.get(PROPERTY_MANUAL_PATH, DEFAULT_MANUAL_PATH);
-        if (TextUtils.isEmpty(path)) {
-            Log.e(TAG, "The system property for the manual is empty");
-            showErrorAndFinish();
-            return;
-        }
-
-        final File file = new File(path);
+        final File file = new File(MANUAL_PATH);
         if (!file.exists() || file.length() == 0) {
-            Log.e(TAG, "Manual file " + path + " does not exist");
+            Log.e(TAG, "Manual file " + MANUAL_PATH + " does not exist");
             showErrorAndFinish();
             return;
         }
diff --git a/src/com/android/settings/SettingsLicenseActivity.java b/src/com/android/settings/SettingsLicenseActivity.java
index c1489b0..300644c 100644
--- a/src/com/android/settings/SettingsLicenseActivity.java
+++ b/src/com/android/settings/SettingsLicenseActivity.java
@@ -24,7 +24,6 @@
 import android.content.Loader;
 import android.net.Uri;
 import android.os.Bundle;
-import android.os.SystemProperties;
 import androidx.annotation.VisibleForTesting;
 import androidx.core.content.FileProvider;
 import android.text.TextUtils;
@@ -43,8 +42,7 @@
             LoaderManager.LoaderCallbacks<File> {
     private static final String TAG = "SettingsLicenseActivity";
 
-    private static final String DEFAULT_LICENSE_PATH = "/system/etc/NOTICE.html.gz";
-    private static final String PROPERTY_LICENSE_PATH = "ro.config.license_path";
+    private static final String LICENSE_PATH = "/system/etc/NOTICE.html.gz";
 
     private static final int LOADER_ID_LICENSE_HTML_LOADER = 0;
 
@@ -52,10 +50,9 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        final String licenseHtmlPath =
-                SystemProperties.get(PROPERTY_LICENSE_PATH, DEFAULT_LICENSE_PATH);
-        if (isFilePathValid(licenseHtmlPath)) {
-            showSelectedFile(licenseHtmlPath);
+        File file = new File(LICENSE_PATH);
+        if (isFileValid(file)) {
+            showHtmlFromUri(Uri.fromFile(file));
         } else {
             showHtmlFromDefaultXmlFiles();
         }
@@ -94,22 +91,6 @@
         }
     }
 
-    private void showSelectedFile(final String path) {
-        if (TextUtils.isEmpty(path)) {
-            Log.e(TAG, "The system property for the license file is empty");
-            showErrorAndFinish();
-            return;
-        }
-
-        final File file = new File(path);
-        if (!isFileValid(file)) {
-            Log.e(TAG, "License file " + path + " does not exist");
-            showErrorAndFinish();
-            return;
-        }
-        showHtmlFromUri(Uri.fromFile(file));
-    }
-
     private void showHtmlFromUri(Uri uri) {
         // Kick off external viewer due to WebView security restrictions; we
         // carefully point it at HTMLViewer, since it offers to decompress
@@ -138,10 +119,6 @@
         finish();
     }
 
-    private boolean isFilePathValid(final String path) {
-        return !TextUtils.isEmpty(path) && isFileValid(new File(path));
-    }
-
     @VisibleForTesting
     boolean isFileValid(final File file) {
         return file.exists() && file.length() != 0;
diff --git a/tests/robotests/src/com/android/settings/SettingsLicenseActivityTest.java b/tests/robotests/src/com/android/settings/SettingsLicenseActivityTest.java
index 0e1384d..7ba5787 100644
--- a/tests/robotests/src/com/android/settings/SettingsLicenseActivityTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsLicenseActivityTest.java
@@ -26,7 +26,6 @@
 import android.app.Application;
 import android.content.Intent;
 import android.net.Uri;
-import android.os.SystemProperties;
 
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
@@ -67,8 +66,6 @@
 
     @Test
     public void testOnCreateWithValidHtmlFile() {
-        SystemProperties.set("ro.config.license_path", "/system/etc/NOTICE.html.gz");
-
         doReturn(true).when(mActivity).isFileValid(any());
         mActivity.onCreate(null);
 
