diff --git a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java index 4714fb7..e6733bb 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java @@ -18,7 +18,6 @@ import android.os.RemoteException; import android.os.StrictMode; import android.view.LayoutInflater; import android.view.ViewGroup; -import android.view.WindowManager; import android.widget.ProgressBar; import android.widget.Toast; @@ -92,8 +91,6 @@ public class DummyActivity extends Activity { private static final int REQUEST_PERMISSION_EXTERNAL_STORAGE= 2; private static final int REQUEST_PERMISSION_POST_NOTIFICATIONS = 3; - private static boolean sHasRequestedPermission = false; - // A state variable to record the last time DummyActivity was informed that someone // in the same process needs to call an action without signature // Since they must be in the same process as DummyActivity, it will be totally fine @@ -136,22 +133,16 @@ public class DummyActivity extends Activity { Utility.enforceUserRestrictions(this); SettingsManager.getInstance().applyAll(); - synchronized (DummyActivity.class) { - // Do not show permission dialog during finalization -- it will conflict with the provisioning UI - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !sHasRequestedPermission - && !FINALIZE_PROVISION.equals(getIntent().getAction())) { - // Avoid requesting permission multiple times in one session - // This also prevents multiple instances of DummyActivity from being blocked on each other - sHasRequestedPermission = true; - // We pretty much only send notifications to keep the process inside work profile alive - // as such, only request the notification permission from inside the profile - // This will ideally be shown and done when the user sees the app list UI for the first time - if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) - != PackageManager.PERMISSION_GRANTED) { - requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, REQUEST_PERMISSION_POST_NOTIFICATIONS); - // Continue once the request has been completed (see onRequestPermissionResult) - return; - } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + // We pretty much only send notifications to keep the process inside work profile alive + // as such, only request the notification permission from inside the profile + // This will ideally be shown and done when finalizing the profile (since it will go + // through this activity) + if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) + != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, REQUEST_PERMISSION_POST_NOTIFICATIONS); + // Continue once the request has been completed (see onRequestPermissionResult) + return; } } } @@ -257,19 +248,13 @@ public class DummyActivity extends Activity { private void actionFinalizeProvision() { if (mIsProfileOwner) { - // Only notify the main profile on pre-Oreo - // After Oreo, since we use the activity-based finalization flow, - // the setup wizard will wait until we finish finalization before returning - // (Note: the actual finalization is done by common code in onCreate) - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - // This is the action used by DeviceAdminReceiver to finalize the setup - // The work has been finished in onCreate(), now we just have to - // inform the main profile about this - Intent intent = new Intent(FINALIZE_PROVISION); - // We don't need signature for this intent - Utility.transferIntentToProfileUnsigned(this, intent); - startActivity(intent); - } + // This is the action used by DeviceAdminReceiver to finalize the setup + // The work has been finished in onCreate(), now we just have to + // inform the main profile about this + Intent intent = new Intent(FINALIZE_PROVISION); + // We don't need signature for this intent + Utility.transferIntentToProfileUnsigned(this, intent); + startActivity(intent); finish(); } else { // Set the flag telling MainActivity that we have now finished provisioning