Skip to content
This repository was archived by the owner on Oct 3, 2024. It is now read-only.

Commit 986babb

Browse files
sebkursamtstern
authored andcommitted
Add setOpenInNewTask() to AppSettingsDialog.Builder (#237)
1 parent 05bfcbd commit 986babb

File tree

2 files changed

+40
-9
lines changed

2 files changed

+40
-9
lines changed

easypermissions/src/main/java/pub/devrel/easypermissions/AppSettingsDialog.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public AppSettingsDialog[] newArray(int size) {
4747
private final String mPositiveButtonText;
4848
private final String mNegativeButtonText;
4949
private final int mRequestCode;
50+
private final int mIntentFlags;
5051

5152
private Object mActivityOrFragment;
5253
private Context mContext;
@@ -58,6 +59,7 @@ private AppSettingsDialog(Parcel in) {
5859
mPositiveButtonText = in.readString();
5960
mNegativeButtonText = in.readString();
6061
mRequestCode = in.readInt();
62+
mIntentFlags = in.readInt();
6163
}
6264

6365
private AppSettingsDialog(@NonNull final Object activityOrFragment,
@@ -66,14 +68,16 @@ private AppSettingsDialog(@NonNull final Object activityOrFragment,
6668
@Nullable String title,
6769
@Nullable String positiveButtonText,
6870
@Nullable String negativeButtonText,
69-
int requestCode) {
71+
int requestCode,
72+
int intentFlags) {
7073
setActivityOrFragment(activityOrFragment);
7174
mThemeResId = themeResId;
7275
mRationale = rationale;
7376
mTitle = title;
7477
mPositiveButtonText = positiveButtonText;
7578
mNegativeButtonText = negativeButtonText;
7679
mRequestCode = requestCode;
80+
mIntentFlags = intentFlags;
7781
}
7882

7983
static AppSettingsDialog fromIntent(Intent intent, Activity activity) {
@@ -147,6 +151,11 @@ public void writeToParcel(@NonNull Parcel dest, int flags) {
147151
dest.writeString(mPositiveButtonText);
148152
dest.writeString(mNegativeButtonText);
149153
dest.writeInt(mRequestCode);
154+
dest.writeInt(mIntentFlags);
155+
}
156+
157+
int getIntentFlags() {
158+
return mIntentFlags;
150159
}
151160

152161
/**
@@ -163,6 +172,7 @@ public static class Builder {
163172
private String mPositiveButtonText;
164173
private String mNegativeButtonText;
165174
private int mRequestCode = -1;
175+
private boolean mOpenInNewTask = false;
166176

167177
/**
168178
* Create a new Builder for an {@link AppSettingsDialog}.
@@ -295,6 +305,17 @@ public Builder setRequestCode(int requestCode) {
295305
return this;
296306
}
297307

308+
/**
309+
* Set whether the settings screen should be opened in a separate task. This is achieved by
310+
* setting {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK#FLAG_ACTIVITY_NEW_TASK} on
311+
* the Intent used to open the settings screen.
312+
*/
313+
@NonNull
314+
public Builder setOpenInNewTask(boolean openInNewTask) {
315+
mOpenInNewTask = openInNewTask;
316+
return this;
317+
}
318+
298319
/**
299320
* Build the {@link AppSettingsDialog} from the specified options. Generally followed by a
300321
* call to {@link AppSettingsDialog#show()}.
@@ -311,14 +332,20 @@ public AppSettingsDialog build() {
311332
mContext.getString(android.R.string.cancel) : mNegativeButtonText;
312333
mRequestCode = mRequestCode > 0 ? mRequestCode : DEFAULT_SETTINGS_REQ_CODE;
313334

335+
int intentFlags = 0;
336+
if (mOpenInNewTask) {
337+
intentFlags |= Intent.FLAG_ACTIVITY_NEW_TASK;
338+
}
339+
314340
return new AppSettingsDialog(
315341
mActivityOrFragment,
316342
mThemeResId,
317343
mRationale,
318344
mTitle,
319345
mPositiveButtonText,
320346
mNegativeButtonText,
321-
mRequestCode);
347+
mRequestCode,
348+
intentFlags);
322349
}
323350

324351
}

easypermissions/src/main/java/pub/devrel/easypermissions/AppSettingsDialogHolderActivity.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,20 @@ public class AppSettingsDialogHolderActivity extends AppCompatActivity implement
1717
private static final int APP_SETTINGS_RC = 7534;
1818

1919
private AlertDialog mDialog;
20+
private int mIntentFlags;
2021

2122
public static Intent createShowDialogIntent(Context context, AppSettingsDialog dialog) {
22-
return new Intent(context, AppSettingsDialogHolderActivity.class)
23-
.putExtra(AppSettingsDialog.EXTRA_APP_SETTINGS, dialog);
23+
Intent intent = new Intent(context, AppSettingsDialogHolderActivity.class);
24+
intent.putExtra(AppSettingsDialog.EXTRA_APP_SETTINGS, dialog);
25+
return intent;
2426
}
2527

2628
@Override
2729
protected void onCreate(Bundle savedInstanceState) {
2830
super.onCreate(savedInstanceState);
29-
mDialog = AppSettingsDialog.fromIntent(getIntent(), this).showDialog(this, this);
31+
AppSettingsDialog appSettingsDialog = AppSettingsDialog.fromIntent(getIntent(), this);
32+
mIntentFlags = appSettingsDialog.getIntentFlags();
33+
mDialog = appSettingsDialog.showDialog(this, this);
3034
}
3135

3236
@Override
@@ -40,10 +44,10 @@ protected void onDestroy() {
4044
@Override
4145
public void onClick(DialogInterface dialog, int which) {
4246
if (which == Dialog.BUTTON_POSITIVE) {
43-
startActivityForResult(
44-
new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
45-
.setData(Uri.fromParts("package", getPackageName(), null)),
46-
APP_SETTINGS_RC);
47+
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
48+
.setData(Uri.fromParts("package", getPackageName(), null));
49+
intent.addFlags(mIntentFlags);
50+
startActivityForResult(intent, APP_SETTINGS_RC);
4751
} else if (which == Dialog.BUTTON_NEGATIVE) {
4852
setResult(Activity.RESULT_CANCELED);
4953
finish();

0 commit comments

Comments
 (0)