150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff/*
250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff * Copyright (C) 2013 The Android Open Source Project
350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff *
450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff * Licensed under the Apache License, Version 2.0 (the "License");
550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff * you may not use this file except in compliance with the License.
650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff * You may obtain a copy of the License at
750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff *
850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff *      http://www.apache.org/licenses/LICENSE-2.0
950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff *
1050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff * Unless required by applicable law or agreed to in writing, software
1150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff * distributed under the License is distributed on an "AS IS" BASIS,
1250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff * See the License for the specific language governing permissions and
1450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff * limitations under the License.
1550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff */
1650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
1750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffpackage com.android.settings.wifi;
1850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
1950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport com.android.settings.R;
2050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
2150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport android.app.Activity;
2250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport android.app.AlertDialog;
2350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport android.app.Dialog;
2450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport android.app.DialogFragment;
2550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport android.content.DialogInterface;
2650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport android.content.Intent;
27994807b1d2f33698a3e309b956a2fb467444e4d2Robert Greenwaltimport android.content.pm.ApplicationInfo;
28994807b1d2f33698a3e309b956a2fb467444e4d2Robert Greenwaltimport android.content.pm.PackageManager;
2950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport android.net.wifi.WifiManager;
3050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport android.os.Bundle;
3150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport android.provider.Settings;
3250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffimport android.util.Log;
3350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
3450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff/**
3550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff * This activity requests users permission to allow scanning even when Wi-Fi is turned off
3650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff */
3750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriffpublic class WifiScanModeActivity extends Activity {
3850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    private DialogFragment mDialog;
3950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    private String mApp;
4050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
4150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    @Override
4250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    protected void onCreate(Bundle savedInstanceState) {
4350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        super.onCreate(savedInstanceState);
4450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        Intent intent = getIntent();
4550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        if (savedInstanceState == null) {
4650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            if (intent != null && intent.getAction()
4750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                    .equals(WifiManager.ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE)) {
48994807b1d2f33698a3e309b956a2fb467444e4d2Robert Greenwalt                ApplicationInfo ai;
4950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                mApp = getCallingPackage();
50994807b1d2f33698a3e309b956a2fb467444e4d2Robert Greenwalt                try {
51994807b1d2f33698a3e309b956a2fb467444e4d2Robert Greenwalt                    PackageManager pm = getPackageManager();
52994807b1d2f33698a3e309b956a2fb467444e4d2Robert Greenwalt                    ai = pm.getApplicationInfo(mApp, 0);
53994807b1d2f33698a3e309b956a2fb467444e4d2Robert Greenwalt                    mApp = (String)pm.getApplicationLabel(ai);
54994807b1d2f33698a3e309b956a2fb467444e4d2Robert Greenwalt                } catch (PackageManager.NameNotFoundException e) { }
5550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            } else {
5650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                finish();
5750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                return;
5850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            }
5950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        } else {
6050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            mApp = savedInstanceState.getString("app");
6150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        }
6250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        createDialog();
6350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    }
6450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
6550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    private void createDialog() {
6650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        if (mDialog == null) {
6750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            mDialog = AlertDialogFragment.newInstance(mApp);
6850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            mDialog.show(getFragmentManager(), "dialog");
6950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        }
7050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    }
7150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
7250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    private void dismissDialog() {
7350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        if (mDialog != null) {
7450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            mDialog.dismiss();
7550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            mDialog = null;
7650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        }
7750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    }
7850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
7950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    private void doPositiveClick() {
8050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        Settings.Global.putInt(getContentResolver(),
8150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 1);
8250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        setResult(RESULT_OK);
8350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        finish();
8450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    }
8550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
8650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    private void doNegativeClick() {
8750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        setResult(RESULT_CANCELED);
8850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        finish();
8950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    }
9050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
9150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    @Override
9250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    public void onSaveInstanceState(Bundle outState) {
9350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        super.onSaveInstanceState(outState);
9450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        outState.putString("app", mApp);
9550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    }
9650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
9750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    @Override
9850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    public void onPause() {
9950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        super.onPause();
10050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        dismissDialog();
10150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    }
10250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
10350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    public void onResume() {
10450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        super.onResume();
10550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        createDialog();
10650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    }
10750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
10850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    public static class AlertDialogFragment extends DialogFragment {
10950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        static AlertDialogFragment newInstance(String app) {
11050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            AlertDialogFragment frag = new AlertDialogFragment(app);
11150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            return frag;
11250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        }
11350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
11450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        private final String mApp;
11550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        public AlertDialogFragment(String app) {
11650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            super();
11750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            mApp = app;
11850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        }
11950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
12050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        public AlertDialogFragment() {
12150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            super();
12250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            mApp = null;
12350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        }
12450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff
12550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        @Override
12650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        public Dialog onCreateDialog(Bundle savedInstanceState) {
12750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            return new AlertDialog.Builder(getActivity())
12850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                    .setMessage(getString(R.string.wifi_scan_always_turnon_message, mApp))
12950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                    .setPositiveButton(R.string.wifi_scan_always_confirm_allow,
13050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                            new DialogInterface.OnClickListener() {
13150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                                public void onClick(DialogInterface dialog, int whichButton) {
13250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                                    ((WifiScanModeActivity) getActivity()).doPositiveClick();
13350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                                }
13450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                            }
13550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                    )
13650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                    .setNegativeButton(R.string.wifi_scan_always_confirm_deny,
13750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                            new DialogInterface.OnClickListener() {
13850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                                public void onClick(DialogInterface dialog, int whichButton) {
13950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                                    ((WifiScanModeActivity) getActivity()).doNegativeClick();
14050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                                }
14150f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                            }
14250f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                    )
14350f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff                    .create();
14450f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        }
14550f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        @Override
14650f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        public void onCancel(DialogInterface dialog) {
14750f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff            ((WifiScanModeActivity) getActivity()).doNegativeClick();
14850f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff        }
14950f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff    }
15050f341dcd95620ebb067acd16c34c1cb48a6f718Irfan Sheriff}
151