Skip to content
This repository was archived by the owner on Oct 3, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
Expand All @@ -66,14 +68,16 @@ 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;
mTitle = title;
mPositiveButtonText = positiveButtonText;
mNegativeButtonText = negativeButtonText;
mRequestCode = requestCode;
mIntentFlags = intentFlags;
}

static AppSettingsDialog fromIntent(Intent intent, Activity activity) {
Expand Down Expand Up @@ -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;
}

/**
Expand All @@ -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}.
Expand Down Expand Up @@ -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()}.
Expand All @@ -311,14 +332,20 @@ 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,
mRationale,
mTitle,
mPositiveButtonText,
mNegativeButtonText,
mRequestCode);
mRequestCode,
intentFlags);
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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();
Expand Down