/******************************************************************************* * Copyright (c) 2014 CodingBad. * All rights reserved. This file is part of ASA. * * ASA is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ASA is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ASA. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * Ayelén Chavez - ashy.on.line@gmail.com * Joaquín Rinaudo - jmrinaudo@gmail.com ******************************************************************************/ package com.thesis.asa.wifi; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.thesis.asa.R; import com.thesis.asa.Utilities; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.net.wifi.WifiManager; import android.text.InputFilter; import android.util.Log; import android.util.SparseBooleanArray; import android.view.LayoutInflater; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.RadioButton; import android.widget.RadioGroup; public class EditWifiConfiguredNetworksDialog { private Activity activity; private AlertDialog view; private final EditText edit_bssid; private final EditText edit_mac; private final EditText edit_ssid; private final ListView listview; private final int[] editIPTextsIds = { R.id.edit_ip_1, R.id.edit_ip_2, R.id.edit_ip_3, R.id.edit_ip_4 }; private final EditText[] editIPTexts; private final Button applyButton; private final RadioButton scannedRadioButton; private final View layout; private SavedWifiStatesDialog parent; private WifiInfoItem selectedItem; public EditWifiConfiguredNetworksDialog(Activity a, WifiInfoItem info, SavedWifiStatesDialog p) { selectedItem = info; activity = a; parent = p; layout = LayoutInflater.from(activity).inflate( R.layout.edit_wifi_dialog_layout, null); AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(activity.getText(R.string.edit_saved_wifi)); builder.setView(layout); edit_mac = (EditText) layout.findViewById(R.id.edit_mac); edit_mac.setText(info.getMac().replace(":", "")); edit_mac.setFilters(new InputFilter[] { new Utilities.HexFilter(), new InputFilter.LengthFilter(12) }); edit_bssid = (EditText) layout.findViewById(R.id.edit_bssid); edit_bssid.setText(info.getBssid().replace(":", "")); edit_bssid.setFilters(new InputFilter[] { new Utilities.HexFilter(), new InputFilter.LengthFilter(12) }); edit_ssid = (EditText) layout.findViewById(R.id.edit_ssid); edit_ssid.setText(info.getSsid().replace("\"", "")); edit_ssid.setFilters(new InputFilter[] { new Utilities.SSIDFilter() }); listview = (ListView) layout .findViewById(R.id.edit_configured_network_list); String ip = info.getIP(); String[] parts = ip.split("\\."); editIPTexts = new EditText[4]; for (int i = 0; i < editIPTextsIds.length; i++) { editIPTexts[i] = (EditText) layout.findViewById(editIPTextsIds[i]); editIPTexts[i].setText(parts[i]); editIPTexts[i] .setFilters(new InputFilter[] { new Utilities.InputFilterMinMax( 0, 255) }); } editIPTexts[editIPTextsIds.length - 1] .setFilters(new InputFilter[] { new Utilities.InputFilterMinMax( 1, 255) }); applyButton = (Button) layout.findViewById(R.id.edit_save_button); if (info.getScannedNetworks().equals("[]")) scannedRadioButton = (RadioButton) layout .findViewById(R.id.edit_fake_scanned); else scannedRadioButton = (RadioButton) layout .findViewById(R.id.edit_real_scanned); scannedRadioButton.setChecked(true); List<String> items = WifiConfigurationsModel .getConfiguredNetworks(activity); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(activity, android.R.layout.simple_list_item_multiple_choice, items); listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listview.setAdapter(arrayAdapter); for (String network : info.listConfiguredNetworks()) listview.setItemChecked(items.indexOf(network), true); view = builder.create(); EditWifiConfiguredNetworksController controller = new EditWifiConfiguredNetworksController( activity, this); applyButton.setOnClickListener(controller); view.setOnDismissListener(controller); } public WifiInfoItem getSelectedItem() { return selectedItem; } public void show() { view.show(); } public void close() { parent.show(); view.dismiss(); } public String getConfiguredScanned() { RadioGroup group = (RadioGroup) layout .findViewById(R.id.radioGroupEditScanNetworks); if (group.getCheckedRadioButtonId() == R.id.edit_fake_scanned) return "[]"; else if (group.getCheckedRadioButtonId() == R.id.edit_real_scanned) { WifiManager wifiManager = (WifiManager) activity .getSystemService(Context.WIFI_SERVICE); return Arrays.toString(Utilities.getScannedWifis(wifiManager) .toArray(new String[0])); } else { Log.d(Utilities.ERROR, "No networks configuration radio button found"); return ""; } } public String getConfiguredSsid() { return edit_ssid.getText().toString(); } public String getConfiguredBssid() { return edit_bssid.getText().toString(); } public String getConfiguredMac() { return edit_mac.getText().toString(); } public String getConfiguredIp() { String ip = editIPTexts[0].getText().toString(); for (int i = 1; i < editIPTexts.length; i++) ip = ip + "." + editIPTexts[i].getText().toString(); return ip; } public String getConfiguredNetworks() { SparseBooleanArray positions = listview.getCheckedItemPositions(); int count = listview.getCount(); List<String> checked = new ArrayList<String>(); for (int i = 0; i < count; i++) { if (positions.get(i)) { checked.add((String) listview.getAdapter().getItem(i)); } } return Arrays.toString(checked.toArray(new String[0])); } }