Home | History | Annotate | Download | only in managedprovisioning
      1 /*
      2  * Copyright (C) 2015 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.cts.verifier.managedprovisioning;
     18 
     19 import android.app.AlertDialog;
     20 import android.content.Intent;
     21 import android.database.DataSetObserver;
     22 import android.os.Bundle;
     23 import android.provider.Settings;
     24 import android.view.View;
     25 import android.view.View.OnClickListener;
     26 import android.widget.EditText;
     27 import android.widget.RadioGroup;
     28 
     29 import com.android.cts.verifier.ArrayTestListAdapter;
     30 import com.android.cts.verifier.PassFailButtons;
     31 import com.android.cts.verifier.R;
     32 import com.android.cts.verifier.IntentDrivenTestActivity.ButtonInfo;
     33 
     34 import com.android.compatibility.common.util.WifiConfigCreator;
     35 import static com.android.compatibility.common.util.WifiConfigCreator.SECURITY_TYPE_NONE;
     36 import static com.android.compatibility.common.util.WifiConfigCreator.SECURITY_TYPE_WPA;
     37 import static com.android.compatibility.common.util.WifiConfigCreator.SECURITY_TYPE_WEP;
     38 
     39 /**
     40  * Activity to test WiFi configuration lockdown functionality. A locked down WiFi config
     41  * must not be editable/forgettable in Settings.
     42  */
     43 public class WifiLockdownTestActivity extends PassFailButtons.TestListActivity {
     44     private static final String TAG = "WifiLockdownTestActivity";
     45 
     46     private static final int NONE = R.id.device_owner_keymgmnt_none;
     47     private static final int WPA = R.id.device_owner_keymgmnt_wpa;
     48     private static final int WEP = R.id.device_owner_keymgmnt_wep;
     49 
     50     private static final String CONFIG_MODIFIABLE_WHEN_UNLOCKED_TEST_ID = "UNLOCKED_MODIFICATION";
     51     private static final String CONFIG_NOT_MODIFIABLE_WHEN_LOCKED_TEST_ID = "LOCKED_MODIFICATION";
     52     private static final String CONFIG_CONNECTABLE_WHEN_LOCKED_TEST_ID = "LOCKED_CONNECT";
     53     private static final String CONFIG_REMOVABLE_WHEN_UNLOCKED_TEST_ID = "UNLOCKED_REMOVE";
     54 
     55     private WifiConfigCreator mConfigCreator;
     56     private ButtonInfo[] mSwitchLockdownOffButtonInfos;
     57     private ButtonInfo[] mSwitchLockdownOnButtonInfos;
     58 
     59     @Override
     60     protected void onCreate(Bundle savedInstanceState) {
     61         super.onCreate(savedInstanceState);
     62         mConfigCreator = new WifiConfigCreator(this);
     63         setContentView(R.layout.wifi_lockdown);
     64         setInfoResources(R.string.device_owner_wifi_lockdown_test,
     65                 R.string.device_owner_wifi_lockdown_info, 0);
     66         setPassFailButtonClickListeners();
     67 
     68         final ArrayTestListAdapter adapter = new ArrayTestListAdapter(this);
     69 
     70         final ButtonInfo goToWifiSettings = new ButtonInfo(
     71                 R.string.wifi_lockdown_go_settings_wifi_button,
     72                 new Intent(Settings.ACTION_WIFI_SETTINGS));
     73         mSwitchLockdownOffButtonInfos = new ButtonInfo[] { new ButtonInfo(
     74                 R.string.switch_wifi_lockdown_off_button,
     75                 new Intent(this, DeviceOwnerPositiveTestActivity.CommandReceiver.class)
     76                         .putExtra(DeviceOwnerPositiveTestActivity.EXTRA_COMMAND,
     77                                 DeviceOwnerPositiveTestActivity.COMMAND_SET_GLOBAL_SETTING)
     78                         .putExtra(DeviceOwnerPositiveTestActivity.EXTRA_SETTING,
     79                                 Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN)
     80                         .putExtra(DeviceOwnerPositiveTestActivity.EXTRA_PARAMETER_1, "0"
     81                 )), goToWifiSettings };
     82         mSwitchLockdownOnButtonInfos = new ButtonInfo[] { new ButtonInfo(
     83                 R.string.switch_wifi_lockdown_on_button,
     84                 new Intent(this, DeviceOwnerPositiveTestActivity.CommandReceiver.class)
     85                         .putExtra(DeviceOwnerPositiveTestActivity.EXTRA_COMMAND,
     86                                 DeviceOwnerPositiveTestActivity.COMMAND_SET_GLOBAL_SETTING)
     87                         .putExtra(DeviceOwnerPositiveTestActivity.EXTRA_SETTING,
     88                                 Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN)
     89                         .putExtra(DeviceOwnerPositiveTestActivity.EXTRA_PARAMETER_1, "1"
     90                 )), goToWifiSettings };
     91 
     92         addTestsToAdapter(adapter);
     93 
     94         adapter.registerDataSetObserver(new DataSetObserver() {
     95             @Override
     96             public void onChanged() {
     97                 updatePassButton();
     98             }
     99         });
    100 
    101         setTestListAdapter(adapter);
    102 
    103         View createConfigButton = findViewById(R.id.create_wifi_config_button);
    104         createConfigButton .setOnClickListener(new OnClickListener() {
    105             @Override
    106             public void onClick(View v) {
    107                 EditText ssidEditor = (EditText) findViewById(R.id.device_owner_wifi_ssid);
    108                 RadioGroup authMethods = (RadioGroup) findViewById(
    109                         R.id.device_owner_keyManagementMethods);
    110                 int checkedRadioId = authMethods.getCheckedRadioButtonId();
    111                 if (checkedRadioId == -1) {
    112                     checkedRadioId = NONE;
    113                 }
    114                 int netId = mConfigCreator.addNetwork(ssidEditor.getText().toString(), false,
    115                         convertKeyManagement(checkedRadioId), "defaultpassword");
    116                 if (netId == -1) {
    117                     new AlertDialog.Builder(
    118                             WifiLockdownTestActivity.this)
    119                             .setIcon(android.R.drawable.ic_dialog_info)
    120                             .setTitle(R.string.wifi_lockdown_add_network_failed_dialog_title)
    121                             .setMessage(R.string.wifi_lockdown_add_network_failed_dialog_text)
    122                             .setPositiveButton(android.R.string.ok, null)
    123                             .show();
    124                 }
    125             }
    126         });
    127     }
    128 
    129     /**
    130      * Enable Pass Button when all tests passed.
    131      */
    132     private void updatePassButton() {
    133         getPassButton().setEnabled(mAdapter.allTestsPassed());
    134     }
    135 
    136     private void addTestsToAdapter(final ArrayTestListAdapter adapter) {
    137         adapter.add(DeviceOwnerPositiveTestActivity.createInteractiveTestItem(this,
    138                 CONFIG_MODIFIABLE_WHEN_UNLOCKED_TEST_ID,
    139                 R.string.device_owner_wifi_config_unlocked_modification_test,
    140                 R.string.device_owner_wifi_config_unlocked_modification_test_info,
    141                 mSwitchLockdownOffButtonInfos));
    142         adapter.add(DeviceOwnerPositiveTestActivity.createInteractiveTestItem(this,
    143                 CONFIG_NOT_MODIFIABLE_WHEN_LOCKED_TEST_ID,
    144                 R.string.device_owner_wifi_config_locked_modification_test,
    145                 R.string.device_owner_wifi_config_locked_modification_test_info,
    146                 mSwitchLockdownOnButtonInfos));
    147         adapter.add(DeviceOwnerPositiveTestActivity.createInteractiveTestItem(this,
    148                 CONFIG_CONNECTABLE_WHEN_LOCKED_TEST_ID,
    149                 R.string.device_owner_wifi_config_locked_connection_test,
    150                 R.string.device_owner_wifi_config_locked_connection_test_info,
    151                 mSwitchLockdownOnButtonInfos));
    152         adapter.add(DeviceOwnerPositiveTestActivity.createInteractiveTestItem(this,
    153                 CONFIG_REMOVABLE_WHEN_UNLOCKED_TEST_ID,
    154                 R.string.device_owner_wifi_config_unlocked_removal_test,
    155                 R.string.device_owner_wifi_config_unlocked_removal_test_info,
    156                 mSwitchLockdownOffButtonInfos));
    157     }
    158 
    159     private int convertKeyManagement(int radioButtonId) {
    160         switch (radioButtonId) {
    161             case NONE: {
    162                 return SECURITY_TYPE_NONE;
    163             }
    164             case WPA: {
    165                 return SECURITY_TYPE_WPA;
    166             }
    167             case WEP: {
    168                 return SECURITY_TYPE_WEP;
    169             }
    170         }
    171         return SECURITY_TYPE_NONE;
    172     }
    173 }
    174