Compare commits

..

No commits in common. "684e5a035078c0abb8b6fb7f147f7dbcc67f28ac" and "6b18f2c355c06663479e13bf8adc8061588bf20f" have entirely different histories.

View file

@ -18,7 +18,6 @@ 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;
@ -92,8 +91,6 @@ 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
@ -136,22 +133,16 @@ public class DummyActivity extends Activity {
Utility.enforceUserRestrictions(this); Utility.enforceUserRestrictions(this);
SettingsManager.getInstance().applyAll(); SettingsManager.getInstance().applyAll();
synchronized (DummyActivity.class) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// 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 finalizing the profile (since it will go
// Avoid requesting permission multiple times in one session // through this activity)
// This also prevents multiple instances of DummyActivity from being blocked on each other if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)
sHasRequestedPermission = true; != PackageManager.PERMISSION_GRANTED) {
// We pretty much only send notifications to keep the process inside work profile alive requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, REQUEST_PERMISSION_POST_NOTIFICATIONS);
// as such, only request the notification permission from inside the profile // Continue once the request has been completed (see onRequestPermissionResult)
// This will ideally be shown and done when the user sees the app list UI for the first time return;
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() { private void actionFinalizeProvision() {
if (mIsProfileOwner) { if (mIsProfileOwner) {
// Only notify the main profile on pre-Oreo // This is the action used by DeviceAdminReceiver to finalize the setup
// After Oreo, since we use the activity-based finalization flow, // The work has been finished in onCreate(), now we just have to
// the setup wizard will wait until we finish finalization before returning // inform the main profile about this
// (Note: the actual finalization is done by common code in onCreate) Intent intent = new Intent(FINALIZE_PROVISION);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { // We don't need signature for this intent
// This is the action used by DeviceAdminReceiver to finalize the setup Utility.transferIntentToProfileUnsigned(this, intent);
// The work has been finished in onCreate(), now we just have to startActivity(intent);
// 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(); finish();
} else { } else {
// Set the flag telling MainActivity that we have now finished provisioning // Set the flag telling MainActivity that we have now finished provisioning