From 9be05afc887ea39ca74889596915e8bf05e7a272 Mon Sep 17 00:00:00 2001 From: Pawan Wagh Date: Wed, 27 Sep 2023 22:07:30 +0000 Subject: [PATCH] Show progress bar till the applyPayload returns Displaying a progress bar till the applyPayload from update_engine returns. Test: m Settings && adb install -r $ANDROID_PRODUCT_OUT/system_ext/priv-app/Settings/Settings.apk Bug: 295035851 Bug: 298214075 Change-Id: Ic8cf4df700505e7f10185ee0f08225411c6621e5 --- res/values/strings.xml | 3 +- .../Enable16kPagesPreferenceController.java | 38 ++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 4c0de24eb3f..def5890603a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -11339,8 +11339,9 @@ Device will reboot after confirmation. Failed to update kernel to 16KB pages compatible kernel. - + Applying change + DSU Loader Load a Dynamic System Update Image diff --git a/src/com/android/settings/development/Enable16kPagesPreferenceController.java b/src/com/android/settings/development/Enable16kPagesPreferenceController.java index 9752ecf0b02..5e32d37c51c 100644 --- a/src/com/android/settings/development/Enable16kPagesPreferenceController.java +++ b/src/com/android/settings/development/Enable16kPagesPreferenceController.java @@ -26,11 +26,14 @@ import android.os.UpdateEngineStable; 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 @@ public class Enable16kPagesPreferenceController extends DeveloperOptionsPreferen 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 @@ public class Enable16kPagesPreferenceController extends DeveloperOptionsPreferen @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 @@ public class Enable16kPagesPreferenceController extends DeveloperOptionsPreferen /** 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 @@ public class Enable16kPagesPreferenceController extends DeveloperOptionsPreferen @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 @@ public class Enable16kPagesPreferenceController extends DeveloperOptionsPreferen 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 @@ public class Enable16kPagesPreferenceController extends DeveloperOptionsPreferen @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 @@ public class Enable16kPagesPreferenceController extends DeveloperOptionsPreferen } } } + + 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(); + } }