From 8fb598e60affcb970472ed8e37f27546d1abe243 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 22 Mar 2022 11:23:14 -0400 Subject: [PATCH] Restart app after refreshing remote config via internal settings. --- .../app/internal/InternalSettingsFragment.kt | 16 +++++++++++-- .../java/org/signal/core/util/AppUtil.java | 24 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 core-util/src/main/java/org/signal/core/util/AppUtil.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt index 14616d46b..9ce35e6a7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt @@ -7,6 +7,7 @@ import android.content.DialogInterface import android.widget.Toast import androidx.lifecycle.ViewModelProvider import com.google.android.material.dialog.MaterialAlertDialogBuilder +import org.signal.core.util.AppUtil import org.signal.core.util.concurrent.SignalExecutors import org.signal.ringrtc.CallManager import org.thoughtcrime.securesms.BuildConfig @@ -19,6 +20,7 @@ import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.database.LocalMetricsDatabase import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies +import org.thoughtcrime.securesms.jobmanager.JobTracker import org.thoughtcrime.securesms.jobs.DownloadLatestEmojiDataJob import org.thoughtcrime.securesms.jobs.EmojiSearchIndexDownloadJob import org.thoughtcrime.securesms.jobs.RefreshAttributesJob @@ -33,6 +35,8 @@ import org.thoughtcrime.securesms.payments.DataExportUtil import org.thoughtcrime.securesms.util.ConversationUtil import org.thoughtcrime.securesms.util.FeatureFlags import org.thoughtcrime.securesms.util.concurrent.SimpleTask +import java.util.Optional +import java.util.concurrent.TimeUnit import kotlin.math.max class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__internal_preferences) { @@ -446,8 +450,16 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter } private fun refreshRemoteValues() { - ApplicationDependencies.getJobManager().add(RemoteConfigRefreshJob()) - Toast.makeText(context, "Scheduled remote config refresh", Toast.LENGTH_SHORT).show() + Toast.makeText(context, "Running remote config refresh, app will restart after completion.", Toast.LENGTH_LONG).show() + SignalExecutors.BOUNDED.execute { + val result: Optional = ApplicationDependencies.getJobManager().runSynchronously(RemoteConfigRefreshJob(), TimeUnit.SECONDS.toMillis(10)) + + if (result.isPresent && result.get() == JobTracker.JobState.SUCCESS) { + AppUtil.restart(requireContext()) + } else { + Toast.makeText(context, "Failed to refresh config remote config.", Toast.LENGTH_SHORT).show() + } + } } private fun forceStorageServiceSync() { diff --git a/core-util/src/main/java/org/signal/core/util/AppUtil.java b/core-util/src/main/java/org/signal/core/util/AppUtil.java new file mode 100644 index 000000000..6a3cd667b --- /dev/null +++ b/core-util/src/main/java/org/signal/core/util/AppUtil.java @@ -0,0 +1,24 @@ +package org.signal.core.util; + +import android.content.Context; +import android.content.Intent; + +import androidx.annotation.NonNull; + +public final class AppUtil { + + private AppUtil() {} + + /** + * Restarts the application. Should generally only be used for internal tools. + */ + public static void restart(@NonNull Context context) { + String packageName = context.getPackageName(); + Intent defaultIntent = context.getPackageManager().getLaunchIntentForPackage(packageName); + + defaultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + context.startActivity(defaultIntent); + Runtime.getRuntime().exit(0); + } +}