diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/AppSettingsDialog.java b/easypermissions/src/main/java/pub/devrel/easypermissions/AppSettingsDialog.java index eb22384..3749145 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/AppSettingsDialog.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/AppSettingsDialog.java @@ -47,6 +47,7 @@ public AppSettingsDialog[] newArray(int size) { private final String mPositiveButtonText; private final String mNegativeButtonText; private final int mRequestCode; + private final int mIntentFlags; private Object mActivityOrFragment; private Context mContext; @@ -58,6 +59,7 @@ private AppSettingsDialog(Parcel in) { mPositiveButtonText = in.readString(); mNegativeButtonText = in.readString(); mRequestCode = in.readInt(); + mIntentFlags = in.readInt(); } private AppSettingsDialog(@NonNull final Object activityOrFragment, @@ -66,7 +68,8 @@ private AppSettingsDialog(@NonNull final Object activityOrFragment, @Nullable String title, @Nullable String positiveButtonText, @Nullable String negativeButtonText, - int requestCode) { + int requestCode, + int intentFlags) { setActivityOrFragment(activityOrFragment); mThemeResId = themeResId; mRationale = rationale; @@ -74,6 +77,7 @@ private AppSettingsDialog(@NonNull final Object activityOrFragment, mPositiveButtonText = positiveButtonText; mNegativeButtonText = negativeButtonText; mRequestCode = requestCode; + mIntentFlags = intentFlags; } static AppSettingsDialog fromIntent(Intent intent, Activity activity) { @@ -147,6 +151,11 @@ public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeString(mPositiveButtonText); dest.writeString(mNegativeButtonText); dest.writeInt(mRequestCode); + dest.writeInt(mIntentFlags); + } + + int getIntentFlags() { + return mIntentFlags; } /** @@ -163,6 +172,7 @@ public static class Builder { private String mPositiveButtonText; private String mNegativeButtonText; private int mRequestCode = -1; + private boolean mOpenInNewTask = false; /** * Create a new Builder for an {@link AppSettingsDialog}. @@ -295,6 +305,17 @@ public Builder setRequestCode(int requestCode) { return this; } + /** + * Set whether the settings screen should be opened in a separate task. This is achieved by + * setting {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK#FLAG_ACTIVITY_NEW_TASK} on + * the Intent used to open the settings screen. + */ + @NonNull + public Builder setOpenInNewTask(boolean openInNewTask) { + mOpenInNewTask = openInNewTask; + return this; + } + /** * Build the {@link AppSettingsDialog} from the specified options. Generally followed by a * call to {@link AppSettingsDialog#show()}. @@ -311,6 +332,11 @@ public AppSettingsDialog build() { mContext.getString(android.R.string.cancel) : mNegativeButtonText; mRequestCode = mRequestCode > 0 ? mRequestCode : DEFAULT_SETTINGS_REQ_CODE; + int intentFlags = 0; + if (mOpenInNewTask) { + intentFlags |= Intent.FLAG_ACTIVITY_NEW_TASK; + } + return new AppSettingsDialog( mActivityOrFragment, mThemeResId, @@ -318,7 +344,8 @@ public AppSettingsDialog build() { mTitle, mPositiveButtonText, mNegativeButtonText, - mRequestCode); + mRequestCode, + intentFlags); } } diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/AppSettingsDialogHolderActivity.java b/easypermissions/src/main/java/pub/devrel/easypermissions/AppSettingsDialogHolderActivity.java index 0b1ff08..eec4ea0 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/AppSettingsDialogHolderActivity.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/AppSettingsDialogHolderActivity.java @@ -17,16 +17,20 @@ public class AppSettingsDialogHolderActivity extends AppCompatActivity implement private static final int APP_SETTINGS_RC = 7534; private AlertDialog mDialog; + private int mIntentFlags; public static Intent createShowDialogIntent(Context context, AppSettingsDialog dialog) { - return new Intent(context, AppSettingsDialogHolderActivity.class) - .putExtra(AppSettingsDialog.EXTRA_APP_SETTINGS, dialog); + Intent intent = new Intent(context, AppSettingsDialogHolderActivity.class); + intent.putExtra(AppSettingsDialog.EXTRA_APP_SETTINGS, dialog); + return intent; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mDialog = AppSettingsDialog.fromIntent(getIntent(), this).showDialog(this, this); + AppSettingsDialog appSettingsDialog = AppSettingsDialog.fromIntent(getIntent(), this); + mIntentFlags = appSettingsDialog.getIntentFlags(); + mDialog = appSettingsDialog.showDialog(this, this); } @Override @@ -40,10 +44,10 @@ protected void onDestroy() { @Override public void onClick(DialogInterface dialog, int which) { if (which == Dialog.BUTTON_POSITIVE) { - startActivityForResult( - new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - .setData(Uri.fromParts("package", getPackageName(), null)), - APP_SETTINGS_RC); + Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + .setData(Uri.fromParts("package", getPackageName(), null)); + intent.addFlags(mIntentFlags); + startActivityForResult(intent, APP_SETTINGS_RC); } else if (which == Dialog.BUTTON_NEGATIVE) { setResult(Activity.RESULT_CANCELED); finish();