1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.chrome.browser.settings;
6 
7 import android.app.Activity;
8 import android.content.Context;
9 import android.content.Intent;
10 import android.os.Bundle;
11 
12 import androidx.annotation.Nullable;
13 import androidx.fragment.app.Fragment;
14 
15 import org.chromium.base.IntentUtils;
16 
17 /**
18  * Implementation class for launching a {@link SettingsActivity}.
19  */
20 public class SettingsLauncherImpl implements SettingsLauncher {
SettingsLauncherImpl()21     public SettingsLauncherImpl() {}
22 
23     @Override
launchSettingsActivity(Context context)24     public void launchSettingsActivity(Context context) {
25         launchSettingsActivity(context, null);
26     }
27 
28     @Override
launchSettingsActivity( Context context, @Nullable Class<? extends Fragment> fragment)29     public void launchSettingsActivity(
30             Context context, @Nullable Class<? extends Fragment> fragment) {
31         launchSettingsActivity(context, fragment, null);
32     }
33 
34     @Override
launchSettingsActivity(Context context, @Nullable Class<? extends Fragment> fragment, @Nullable Bundle fragmentArgs)35     public void launchSettingsActivity(Context context,
36             @Nullable Class<? extends Fragment> fragment, @Nullable Bundle fragmentArgs) {
37         String fragmentName = fragment != null ? fragment.getName() : null;
38         Intent intent = createSettingsActivityIntent(context, fragmentName, fragmentArgs);
39         IntentUtils.safeStartActivity(context, intent);
40     }
41 
42     @Override
createSettingsActivityIntent(Context context, @Nullable String fragmentName)43     public Intent createSettingsActivityIntent(Context context, @Nullable String fragmentName) {
44         return createSettingsActivityIntent(context, fragmentName, null);
45     }
46 
47     @Override
createSettingsActivityIntent( Context context, @Nullable String fragmentName, @Nullable Bundle fragmentArgs)48     public Intent createSettingsActivityIntent(
49             Context context, @Nullable String fragmentName, @Nullable Bundle fragmentArgs) {
50         Intent intent = new Intent();
51         intent.setClass(context, SettingsActivity.class);
52         if (!(context instanceof Activity)) {
53             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
54             intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
55         }
56         if (fragmentName != null) {
57             intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, fragmentName);
58         }
59         if (fragmentArgs != null) {
60             intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs);
61         }
62         return intent;
63     }
64 }
65