aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/fil/libre/repwifiapp/activities/SelectNetworkActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/fil/libre/repwifiapp/activities/SelectNetworkActivity.java')
-rw-r--r--app/src/fil/libre/repwifiapp/activities/SelectNetworkActivity.java222
1 files changed, 222 insertions, 0 deletions
diff --git a/app/src/fil/libre/repwifiapp/activities/SelectNetworkActivity.java b/app/src/fil/libre/repwifiapp/activities/SelectNetworkActivity.java
new file mode 100644
index 0000000..275ce08
--- /dev/null
+++ b/app/src/fil/libre/repwifiapp/activities/SelectNetworkActivity.java
@@ -0,0 +1,222 @@
+//
+// Copyright 2017 Filippo "Fil" Bergamo <fil.bergamo@riseup.net>
+//
+// This file is part of RepWifiApp.
+//
+// RepWifiApp 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.
+//
+// RepWifiApp 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 RepWifiApp. If not, see <http://www.gnu.org/licenses/>.
+//
+// ********************************************************************
+
+package fil.libre.repwifiapp.activities;
+
+
+
+
+import fil.libre.repwifiapp.Commons;
+import fil.libre.repwifiapp.R;
+import fil.libre.repwifiapp.helpers.AccessPointInfo;
+import fil.libre.repwifiapp.helpers.NetworkButton;
+import fil.libre.repwifiapp.helpers.Utils;
+
+import android.os.Bundle;
+import android.app.Activity;
+import android.content.Intent;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.Button;
+import android.widget.TableLayout;
+import android.widget.TableRow;
+import android.widget.TextView;
+
+public class SelectNetworkActivity extends Activity implements OnClickListener {
+
+ private AccessPointInfo[] aps;
+
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_select_network);
+
+ setTitle("Select network");
+
+ getNetworks();
+
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ //getMenuInflater().inflate(R.menu.activity_select_network, menu);
+ return true;
+ }
+
+ private void writeOut(String msg) {
+
+ TextView v = (TextView)findViewById(R.id.txt_selnets);
+ v.setText(msg);
+
+ }
+
+ private void getNetworks(){
+
+ Intent intent = getIntent();
+ if(! intent.hasExtra(Commons.EXTRA_APINFO_ARR)){
+ this.setResult(RESULT_CANCELED);
+ finish();
+ return;
+ }
+ AccessPointInfo[] nets = (AccessPointInfo[])intent.getExtras().getSerializable(Commons.EXTRA_APINFO_ARR);
+ if (nets == null){
+ this.setResult(RESULT_CANCELED);
+ finish();
+ return;
+ }
+
+ int reqCode = intent.getExtras().getInt(Commons.EXTRA_REQCODE);
+
+ this.aps = nets;
+
+ if (reqCode == Commons.RequestCode.SELECT_CONN){
+ showNetworksForConnection(nets);
+ }
+ else{
+ showNetworksForManagement(nets);
+ }
+
+ }
+
+ public void btnScanClick(View v){
+ returnResults(null, true);
+ }
+
+ @Override
+ public void onClick(View v) {
+
+ if (v instanceof NetworkButton){
+ networkNameClick((NetworkButton)v);
+ }
+
+ }
+
+ public void networkNameClick(NetworkButton b){
+
+ for(AccessPointInfo i : this.aps){
+
+ if (i.getBSSID().equals(b.getNetworkBSSID())){
+
+ returnResults(i,false);
+
+ }
+
+ }
+ }
+
+ private void returnResults(AccessPointInfo i, boolean rescan){
+
+ Intent intent = new Intent();
+ intent.putExtra(Commons.EXTRA_APINFO, i);
+ intent.putExtra(Commons.EXTRA_RESCAN, rescan);
+ setResult(RESULT_OK, intent);
+ finish();
+
+ }
+
+ private void showNetworksForConnection(AccessPointInfo[] info) {
+
+ if (info == null){
+ Utils.logError("Unable to retrieve network list!");
+ writeOut("Unable to retrieve network list!");
+ return;
+ }
+
+ if (info.length == 0){
+ writeOut("No network found.");
+ toggleBtnRescan(true);
+ return;
+ }
+
+ writeOut("Select the network you want to connect to:");
+ toggleBtnRescan(false);
+
+ for (AccessPointInfo i : info){
+
+ addButtonForNetwork(i);
+
+ }
+
+ }
+
+ private void showNetworksForManagement(AccessPointInfo[] info){
+
+ if (info == null || info.length == 0){
+ return;
+ }
+
+ writeOut("Select network info to manage:");
+ toggleBtnRescan(false);
+
+ for (AccessPointInfo i : info){
+
+ addButtonForNetwork(i);
+
+ }
+
+ }
+
+ private void toggleBtnRescan(boolean enable) {
+
+ Button b = (Button)findViewById(R.id.btn_rescan);
+ if (enable){
+ b.setVisibility(View.VISIBLE);
+ }
+ else{
+ b.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ private void addButtonForNetwork(AccessPointInfo info){
+
+ TableLayout s = (TableLayout)findViewById(R.id.table_networks);
+ TableLayout.LayoutParams tableParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);
+ TableRow row = new TableRow(this);
+ TableRow.LayoutParams rowParams = new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
+ rowParams.gravity = Gravity.FILL_HORIZONTAL;
+ row.setPadding(10, 10, 10, 10);
+ row.setLayoutParams(rowParams);
+ row.setGravity(Gravity.FILL_HORIZONTAL);
+ row.setLayoutParams(rowParams);
+
+ NetworkButton button = new NetworkButton(this, info.getBSSID());
+
+ TableRow.LayoutParams params = new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
+ button.setLayoutParams(params);
+ button.setBackgroundColor(Commons.colorThemeDark);
+ button.setTextColor(Commons.colorThemeLight);
+ button.setTextSize(20);
+ button.setPadding(10, 10, 10, 10);
+ button.setGravity(Gravity.CENTER_HORIZONTAL);
+ button.setText(info.getSSID());
+ button.setOnClickListener(this);
+
+ row.addView(button,params);
+ s.addView(row,tableParams);
+ s.setGravity(Gravity.FILL_HORIZONTAL);
+
+ }
+
+}