• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2013 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 
17 package com.android.settings.wifi;
18 
19 import android.app.Activity;
20 import android.app.AlertDialog;
21 import android.app.Dialog;
22 import android.app.DialogFragment;
23 import android.content.DialogInterface;
24 import android.content.Intent;
25 import android.content.pm.ApplicationInfo;
26 import android.content.pm.PackageManager;
27 import android.net.wifi.WifiManager;
28 import android.os.Bundle;
29 import android.provider.Settings;
30 
31 import com.android.settings.R;
32 
33 /**
34  * This activity requests users permission to allow scanning even when Wi-Fi is turned off
35  */
36 public class WifiScanModeActivity extends Activity {
37     private DialogFragment mDialog;
38     private String mApp;
39 
40     @Override
onCreate(Bundle savedInstanceState)41     protected void onCreate(Bundle savedInstanceState) {
42         super.onCreate(savedInstanceState);
43         Intent intent = getIntent();
44         if (savedInstanceState == null) {
45             if (intent != null && intent.getAction()
46                     .equals(WifiManager.ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE)) {
47                 ApplicationInfo ai;
48                 mApp = getCallingPackage();
49                 try {
50                     PackageManager pm = getPackageManager();
51                     ai = pm.getApplicationInfo(mApp, 0);
52                     mApp = (String)pm.getApplicationLabel(ai);
53                 } catch (PackageManager.NameNotFoundException e) { }
54             } else {
55                 finish();
56                 return;
57             }
58         } else {
59             mApp = savedInstanceState.getString("app");
60         }
61         createDialog();
62     }
63 
createDialog()64     private void createDialog() {
65         if (mDialog == null) {
66             mDialog = AlertDialogFragment.newInstance(mApp);
67             mDialog.show(getFragmentManager(), "dialog");
68         }
69     }
70 
dismissDialog()71     private void dismissDialog() {
72         if (mDialog != null) {
73             mDialog.dismiss();
74             mDialog = null;
75         }
76     }
77 
doPositiveClick()78     private void doPositiveClick() {
79         Settings.Global.putInt(getContentResolver(),
80                 Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 1);
81         setResult(RESULT_OK);
82         finish();
83     }
84 
doNegativeClick()85     private void doNegativeClick() {
86         setResult(RESULT_CANCELED);
87         finish();
88     }
89 
90     @Override
onSaveInstanceState(Bundle outState)91     public void onSaveInstanceState(Bundle outState) {
92         super.onSaveInstanceState(outState);
93         outState.putString("app", mApp);
94     }
95 
96     @Override
onPause()97     public void onPause() {
98         super.onPause();
99         dismissDialog();
100     }
101 
onResume()102     public void onResume() {
103         super.onResume();
104         createDialog();
105     }
106 
107     public static class AlertDialogFragment extends DialogFragment {
newInstance(String app)108         static AlertDialogFragment newInstance(String app) {
109             AlertDialogFragment frag = new AlertDialogFragment(app);
110             return frag;
111         }
112 
113         private final String mApp;
AlertDialogFragment(String app)114         public AlertDialogFragment(String app) {
115             super();
116             mApp = app;
117         }
118 
AlertDialogFragment()119         public AlertDialogFragment() {
120             super();
121             mApp = null;
122         }
123 
124         @Override
onCreateDialog(Bundle savedInstanceState)125         public Dialog onCreateDialog(Bundle savedInstanceState) {
126             return new AlertDialog.Builder(getActivity())
127                     .setMessage(getString(R.string.wifi_scan_always_turnon_message, mApp))
128                     .setPositiveButton(R.string.wifi_scan_always_confirm_allow,
129                             new DialogInterface.OnClickListener() {
130                                 public void onClick(DialogInterface dialog, int whichButton) {
131                                     ((WifiScanModeActivity) getActivity()).doPositiveClick();
132                                 }
133                             }
134                     )
135                     .setNegativeButton(R.string.wifi_scan_always_confirm_deny,
136                             new DialogInterface.OnClickListener() {
137                                 public void onClick(DialogInterface dialog, int whichButton) {
138                                     ((WifiScanModeActivity) getActivity()).doNegativeClick();
139                                 }
140                             }
141                     )
142                     .create();
143         }
144         @Override
onCancel(DialogInterface dialog)145         public void onCancel(DialogInterface dialog) {
146             ((WifiScanModeActivity) getActivity()).doNegativeClick();
147         }
148     }
149 }
150