Show progress bar till the applyPayload returns am: 9be05afc88 am: 0aebae8d79

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2766345

Change-Id: Ibaf92a15e52ad5e7f1834210196c94d521ad90d4
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4c0de24..def5890 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11339,8 +11339,9 @@
     <string name="confirm_enable_4k_pages_text">Device will reboot after confirmation.</string>
     <!-- Toast message when 16k OTA update fails -->
     <string name="toast_16k_update_failed_text">Failed to update kernel to 16KB pages compatible kernel.</string>
-
+    <string name="progress_16k_ota_title">Applying change</string>
     <!-- DSU Loader. Do not translate. -->
+
     <string name="dsu_loader_title" translatable="false">DSU Loader</string>
     <!-- DSU Loader Description. Do not translate. -->
     <string name="dsu_loader_description" translatable="false">Load a Dynamic System Update Image</string>
diff --git a/src/com/android/settings/development/Enable16kPagesPreferenceController.java b/src/com/android/settings/development/Enable16kPagesPreferenceController.java
index 9752ecf..5e32d37 100644
--- a/src/com/android/settings/development/Enable16kPagesPreferenceController.java
+++ b/src/com/android/settings/development/Enable16kPagesPreferenceController.java
@@ -26,11 +26,14 @@
 import android.os.UpdateEngineStableCallback;
 import android.provider.Settings;
 import android.util.Log;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
 import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
 import androidx.core.content.ContextCompat;
 import androidx.preference.Preference;
 import androidx.preference.SwitchPreference;
@@ -86,6 +89,8 @@
     private final ListeningExecutorService mExecutorService =
             MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
 
+    private AlertDialog mProgressDialog;
+
     public Enable16kPagesPreferenceController(
             @NonNull Context context, @Nullable DevelopmentSettingsDashboardFragment fragment) {
         super(context);
@@ -122,7 +127,7 @@
 
     @Override
     protected void onDeveloperOptionsSwitchDisabled() {
-        // TODO(b/295573133):Directly reboot into 4k
+        // TODO(295035851) : Revert kernel when dev option turned off
         super.onDeveloperOptionsSwitchDisabled();
         Settings.Global.putInt(
                 mContext.getContentResolver(),
@@ -134,6 +139,10 @@
     /** Called when user confirms reboot dialog */
     @Override
     public void on16kPagesDialogConfirmed() {
+        // Show progress bar
+        mProgressDialog = makeProgressDialog();
+        mProgressDialog.show();
+
         // Apply update in background
         ListenableFuture future = mExecutorService.submit(() -> installUpdate());
         Futures.addCallback(
@@ -150,6 +159,7 @@
 
                     @Override
                     public void onFailure(Throwable t) {
+                        hideProgressDialog();
                         Log.e(TAG, "Failed to call applyPayload of UpdateEngineStable!");
                         displayToast(mContext.getString(R.string.toast_16k_update_failed_text));
                     }
@@ -232,6 +242,13 @@
         applyPayload(updateFile, payloadOffset, payloadSize, properties);
     }
 
+    private void hideProgressDialog() {
+        // Hide progress bar
+        if (mProgressDialog != null && mProgressDialog.isShowing()) {
+            mProgressDialog.hide();
+        }
+    }
+
     @VisibleForTesting
     void applyPayload(
             @NonNull File updateFile,
@@ -269,9 +286,13 @@
 
         @Override
         public void onPayloadApplicationComplete(int errorCode) {
+            Log.i(TAG, "Callback from update engine stable received. unbinding..");
             // unbind the callback from update engine
             mUpdateEngineStable.unbind();
 
+            // Hide progress bar
+            hideProgressDialog();
+
             if (errorCode == UpdateEngine.ErrorCodeConstants.SUCCESS) {
                 Log.i(TAG, "applyPayload successful");
                 Settings.Global.putInt(
@@ -287,4 +308,19 @@
             }
         }
     }
+
+    private AlertDialog makeProgressDialog() {
+        AlertDialog.Builder builder = new AlertDialog.Builder(mFragment.getActivity());
+        builder.setTitle(R.string.progress_16k_ota_title);
+
+        final ProgressBar progressBar = new ProgressBar(mFragment.getActivity());
+        LinearLayout.LayoutParams params =
+                new LinearLayout.LayoutParams(
+                        LinearLayout.LayoutParams.WRAP_CONTENT,
+                        LinearLayout.LayoutParams.WRAP_CONTENT);
+        progressBar.setLayoutParams(params);
+        builder.setView(progressBar);
+        builder.setCancelable(false);
+        return builder.create();
+    }
 }