DummyActivity: Do not request for notification permission multiple times in one process

This commit is contained in:
Peter Cai 2022-08-28 21:57:19 -04:00
parent df70a6b57c
commit 684e5a0350

View file

@ -18,6 +18,7 @@ import android.os.RemoteException;
import android.os.StrictMode; import android.os.StrictMode;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.Toast; import android.widget.Toast;
@ -91,6 +92,8 @@ public class DummyActivity extends Activity {
private static final int REQUEST_PERMISSION_EXTERNAL_STORAGE= 2; private static final int REQUEST_PERMISSION_EXTERNAL_STORAGE= 2;
private static final int REQUEST_PERMISSION_POST_NOTIFICATIONS = 3; 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 // A state variable to record the last time DummyActivity was informed that someone
// in the same process needs to call an action without signature // 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 // Since they must be in the same process as DummyActivity, it will be totally fine
@ -133,16 +136,22 @@ public class DummyActivity extends Activity {
Utility.enforceUserRestrictions(this); Utility.enforceUserRestrictions(this);
SettingsManager.getInstance().applyAll(); SettingsManager.getInstance().applyAll();
// Do not show permission dialog during finalization -- it will conflict with the provisioning UI synchronized (DummyActivity.class) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !FINALIZE_PROVISION.equals(getIntent().getAction())) { // Do not show permission dialog during finalization -- it will conflict with the provisioning UI
// We pretty much only send notifications to keep the process inside work profile alive if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !sHasRequestedPermission
// as such, only request the notification permission from inside the profile && !FINALIZE_PROVISION.equals(getIntent().getAction())) {
// This will ideally be shown and done when the user sees the app list UI for the first time // Avoid requesting permission multiple times in one session
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) // This also prevents multiple instances of DummyActivity from being blocked on each other
!= PackageManager.PERMISSION_GRANTED) { sHasRequestedPermission = true;
requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, REQUEST_PERMISSION_POST_NOTIFICATIONS); // We pretty much only send notifications to keep the process inside work profile alive
// Continue once the request has been completed (see onRequestPermissionResult) // as such, only request the notification permission from inside the profile
return; // 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;
}
} }
} }
} }