1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.settings.vpn2;
17 
18 import android.app.Dialog;
19 import android.app.settings.SettingsEnums;
20 import android.content.DialogInterface;
21 import android.os.Bundle;
22 
23 import androidx.appcompat.app.AlertDialog;
24 import androidx.fragment.app.Fragment;
25 
26 import com.android.settings.R;
27 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
28 
29 public class ConfirmLockdownFragment extends InstrumentedDialogFragment
30         implements DialogInterface.OnClickListener {
31     public interface ConfirmLockdownListener {
onConfirmLockdown(Bundle options, boolean isEnabled, boolean isLockdown)32         public void onConfirmLockdown(Bundle options, boolean isEnabled, boolean isLockdown);
33     }
34 
35     private static final String TAG = "ConfirmLockdown";
36 
37     @Override
getMetricsCategory()38     public int getMetricsCategory() {
39         return SettingsEnums.DIALOG_VPN_REPLACE_EXISTING;
40     }
41 
42     private static final String ARG_REPLACING = "replacing";
43     private static final String ARG_ALWAYS_ON = "always_on";
44     private static final String ARG_LOCKDOWN_SRC = "lockdown_old";
45     private static final String ARG_LOCKDOWN_DST = "lockdown_new";
46     private static final String ARG_OPTIONS = "options";
47 
shouldShow(boolean replacing, boolean fromLockdown, boolean toLockdown)48     public static boolean shouldShow(boolean replacing, boolean fromLockdown, boolean toLockdown) {
49         // We only need to show this if we are:
50         //  - replacing an existing connection
51         //  - switching on always-on mode with lockdown enabled where it was not enabled before.
52         return replacing || (toLockdown && !fromLockdown);
53     }
54 
show(Fragment parent, boolean replacing, boolean alwaysOn, boolean fromLockdown, boolean toLockdown, Bundle options)55     public static void show(Fragment parent, boolean replacing, boolean alwaysOn,
56             boolean fromLockdown, boolean toLockdown, Bundle options) {
57         if (parent.getFragmentManager().findFragmentByTag(TAG) != null) {
58             // Already exists. Don't show it twice.
59             return;
60         }
61         final Bundle args = new Bundle();
62         args.putBoolean(ARG_REPLACING, replacing);
63         args.putBoolean(ARG_ALWAYS_ON, alwaysOn);
64         args.putBoolean(ARG_LOCKDOWN_SRC, fromLockdown);
65         args.putBoolean(ARG_LOCKDOWN_DST, toLockdown);
66         args.putParcelable(ARG_OPTIONS, options);
67 
68         final ConfirmLockdownFragment frag = new ConfirmLockdownFragment();
69         frag.setArguments(args);
70         frag.setTargetFragment(parent, 0);
71         frag.show(parent.getFragmentManager(), TAG);
72     }
73 
74     @Override
onCreateDialog(Bundle savedInstanceState)75     public Dialog onCreateDialog(Bundle savedInstanceState) {
76         final boolean replacing = getArguments().getBoolean(ARG_REPLACING);
77         final boolean alwaysOn = getArguments().getBoolean(ARG_ALWAYS_ON);
78         final boolean wasLockdown = getArguments().getBoolean(ARG_LOCKDOWN_SRC);
79         final boolean nowLockdown = getArguments().getBoolean(ARG_LOCKDOWN_DST);
80 
81         final int titleId = (nowLockdown ? R.string.vpn_require_connection_title :
82                 (replacing ? R.string.vpn_replace_vpn_title : R.string.vpn_set_vpn_title));
83         final int actionId =
84                 (replacing ? R.string.vpn_replace :
85                 (nowLockdown ? R.string.vpn_turn_on : R.string.okay));
86         final int messageId;
87         if (nowLockdown) {
88             messageId = replacing
89                     ? R.string.vpn_replace_always_on_vpn_enable_message
90                     : R.string.vpn_first_always_on_vpn_message;
91         } else {
92             messageId = wasLockdown
93                     ? R.string.vpn_replace_always_on_vpn_disable_message
94                     : R.string.vpn_replace_vpn_message;
95         }
96 
97         return new AlertDialog.Builder(getActivity())
98                 .setTitle(titleId)
99                 .setMessage(messageId)
100                 .setNegativeButton(R.string.cancel, null)
101                 .setPositiveButton(actionId, this)
102                 .create();
103     }
104 
105     @Override
onClick(DialogInterface dialog, int which)106     public void onClick(DialogInterface dialog, int which) {
107         if (getTargetFragment() instanceof ConfirmLockdownListener) {
108             ((ConfirmLockdownListener) getTargetFragment()).onConfirmLockdown(
109                     getArguments().getParcelable(ARG_OPTIONS),
110                     getArguments().getBoolean(ARG_ALWAYS_ON),
111                     getArguments().getBoolean(ARG_LOCKDOWN_DST));
112         }
113     }
114 }
115 
116