Set 16K dev option as checked by default for 16KB page size

Page agnostic targets use 16KB pages by default. Set the developer
option for 16KB enabled when booted with 16KB page size.

Bug: 303280163
Bug: 295035851
Test: m Settings && adb install -r $ANDROID_PRODUCT_OUT/system_ext/priv-app/Settings/Settings.apk
Change-Id: I01457ce3003ea884c7d1e47aca6b85aab341aa24
diff --git a/src/com/android/settings/development/Enable16kPagesPreferenceController.java b/src/com/android/settings/development/Enable16kPagesPreferenceController.java
index bed5c04..1ad071f 100644
--- a/src/com/android/settings/development/Enable16kPagesPreferenceController.java
+++ b/src/com/android/settings/development/Enable16kPagesPreferenceController.java
@@ -32,6 +32,8 @@
 import android.os.UserManager;
 import android.provider.Settings;
 import android.service.oemlock.OemLockManager;
+import android.system.Os;
+import android.system.OsConstants;
 import android.util.Log;
 import android.widget.LinearLayout;
 import android.widget.ProgressBar;
@@ -92,6 +94,9 @@
     private static final int OFFSET_TO_FILE_NAME = 30;
     public static final String EXPERIMENTAL_UPDATE_TITLE = "Android 16K Kernel Experimental Update";
 
+    private static final long PAGE_SIZE = Os.sysconf(OsConstants._SC_PAGESIZE);
+    private static final int PAGE_SIZE_16KB = 16 * 1024;
+
     private @NonNull DevelopmentSettingsDashboardFragment mFragment;
     private boolean mEnable16k;
 
@@ -104,6 +109,7 @@
             @NonNull Context context, @NonNull DevelopmentSettingsDashboardFragment fragment) {
         super(context);
         this.mFragment = fragment;
+        mEnable16k = (PAGE_SIZE == PAGE_SIZE_16KB);
     }
 
     @Override
@@ -135,11 +141,13 @@
 
     @Override
     public void updateState(Preference preference) {
+        int defaultOptionValue =
+                PAGE_SIZE == PAGE_SIZE_16KB ? ENABLE_16K_PAGE_SIZE : ENABLE_4K_PAGE_SIZE;
         final int optionValue =
                 Settings.Global.getInt(
                         mContext.getContentResolver(),
                         Settings.Global.ENABLE_16K_PAGES,
-                        ENABLE_4K_PAGE_SIZE /* default */);
+                        defaultOptionValue /* default */);
 
         ((SwitchPreference) mPreference).setChecked(optionValue == ENABLE_16K_PAGE_SIZE);
     }
@@ -155,6 +163,14 @@
         ((SwitchPreference) mPreference).setChecked(false);
     }
 
+    @Override
+    protected void onDeveloperOptionsSwitchEnabled() {
+        int currentStatus =
+                PAGE_SIZE == PAGE_SIZE_16KB ? ENABLE_16K_PAGE_SIZE : ENABLE_4K_PAGE_SIZE;
+        Settings.Global.putInt(
+                mContext.getContentResolver(), Settings.Global.ENABLE_16K_PAGES, currentStatus);
+    }
+
     /** Called when user confirms reboot dialog */
     @Override
     public void on16kPagesDialogConfirmed() {
@@ -179,7 +195,7 @@
                     @Override
                     public void onFailure(@NonNull Throwable t) {
                         hideProgressDialog();
-                        Log.e(TAG, "Failed to call applyPayload of UpdateEngineStable!");
+                        Log.e(TAG, "Failed to call applyPayload of UpdateEngineStable!", t);
                         displayToast(mContext.getString(R.string.toast_16k_update_failed_text));
                     }
                 },
@@ -188,7 +204,12 @@
 
     /** Called when user dismisses to reboot dialog */
     @Override
-    public void on16kPagesDialogDismissed() {}
+    public void on16kPagesDialogDismissed() {
+        if (mPreference == null) {
+            return;
+        }
+        updateState(mPreference);
+    }
 
     private void installUpdate() {
         // Check if there is any pending system update
@@ -412,7 +433,6 @@
         try (BufferedReader br = new BufferedReader(new FileReader("/proc/mounts"))) {
             String line;
             while ((line = br.readLine()) != null) {
-                Log.i(TAG, line);
                 final String[] fields = line.split(" ");
                 final String partition = fields[1];
                 final String fsType = fields[2];