diff options
author | Fil <fil.bergamo@riseup.net> | 2017-03-07 23:07:50 +0100 |
---|---|---|
committer | Fil <fil.bergamo@riseup.net> | 2017-03-07 23:07:50 +0100 |
commit | 6cd05512a7bca3becff60ae470f43793744c7f86 (patch) | |
tree | b05dd0d004f10f9c5255d1732893593b286d0b1e /app/src/fil/libre/repwifiapp/activities | |
parent | 8b111e0799432fc5a6ead191e1029cc1446a8c91 (diff) | |
download | packages_apps_repwifi-6cd05512a7bca3becff60ae470f43793744c7f86.zip packages_apps_repwifi-6cd05512a7bca3becff60ae470f43793744c7f86.tar.gz packages_apps_repwifi-6cd05512a7bca3becff60ae470f43793744c7f86.tar.bz2 |
Removed bin directory, renamed root directory
Diffstat (limited to 'app/src/fil/libre/repwifiapp/activities')
7 files changed, 1218 insertions, 0 deletions
diff --git a/app/src/fil/libre/repwifiapp/activities/CreditsActivity.java b/app/src/fil/libre/repwifiapp/activities/CreditsActivity.java new file mode 100644 index 0000000..4a0cb4c --- /dev/null +++ b/app/src/fil/libre/repwifiapp/activities/CreditsActivity.java @@ -0,0 +1,56 @@ +// +// 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.R; + +import android.os.Bundle; +import android.app.Activity; +import android.text.Html; +import android.text.method.LinkMovementMethod; +import android.text.method.ScrollingMovementMethod; +import android.view.Menu; +import android.widget.TextView; + +public class CreditsActivity extends Activity { + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_credits); + + String content = getResources().getString(R.string.credit_text); + TextView tv = (TextView)findViewById(R.id.txt_credits); + tv.setMovementMethod(new ScrollingMovementMethod()); + tv.setText(Html.fromHtml(content)); + tv.setMovementMethod(LinkMovementMethod.getInstance()); + + } + + @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_credits, menu); + return true; + } + +} diff --git a/app/src/fil/libre/repwifiapp/activities/InputPasswordActivity.java b/app/src/fil/libre/repwifiapp/activities/InputPasswordActivity.java new file mode 100644 index 0000000..e46d7d9 --- /dev/null +++ b/app/src/fil/libre/repwifiapp/activities/InputPasswordActivity.java @@ -0,0 +1,112 @@ +// +// 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 android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.text.InputType; +import android.view.Menu; +import android.view.View; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.TextView; + + +public class InputPasswordActivity extends Activity implements OnCheckedChangeListener{ + + AccessPointInfo apinfo = null; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + setContentView(R.layout.activity_input_password); + + CheckBox c = (CheckBox)findViewById(R.id.chk_show_pass); + c.setOnCheckedChangeListener(this); + + setTitle("Input password"); + + TextView v = (TextView)findViewById(R.id.txt_insert_pass); + + //get the network to set password to: + this.apinfo = (AccessPointInfo)getIntent().getSerializableExtra(Commons.EXTRA_APINFO); + v.append(" " + apinfo.getSSID()); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + //super.onCreateOptionsMenu(menu); + //getMenuInflater().inflate(R.menu.activity_input_password, menu); + return true; + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + + if(buttonView == findViewById(R.id.chk_show_pass)){ + chkShowPassChanged(); + } + } + + public void onBtnNextClick(View v){ + + EditText txpass = (EditText)findViewById(R.id.txt_password); + String pass = txpass.getText().toString(); + if (pass.length()>0){ + + this.apinfo.setPassword(pass); + + Intent intent = new Intent(); + intent.putExtra(Commons.EXTRA_APINFO, this.apinfo); + setResult(RESULT_OK, intent); + finish(); + + } + + + } + + public void chkShowPassChanged(){ + + CheckBox c = (CheckBox)findViewById(R.id.chk_show_pass); + EditText txtPass = (EditText)findViewById(R.id.txt_password); + + if (c.isChecked()){ + txtPass.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); + txtPass.setSelection(txtPass.getText().length()); + }else{ + txtPass.setInputType(129); + txtPass.setSelection(txtPass.getText().length()); + } + + } + +} diff --git a/app/src/fil/libre/repwifiapp/activities/LongTaskActivity.java b/app/src/fil/libre/repwifiapp/activities/LongTaskActivity.java new file mode 100644 index 0000000..a9f010a --- /dev/null +++ b/app/src/fil/libre/repwifiapp/activities/LongTaskActivity.java @@ -0,0 +1,174 @@ +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.ConnectionStatus; +import fil.libre.repwifiapp.helpers.Utils; + +import android.os.AsyncTask; +import android.os.Bundle; +import android.view.Menu; +import android.widget.TextView; +import android.app.Activity; +import android.content.Intent; + +public class LongTaskActivity extends Activity { + + + private class Task extends AsyncTask<Object, Object, Object>{ + + private int REQ_CODE; + + public Task(int reqCode, Object input){ + this.REQ_CODE = reqCode; + } + + @Override + protected Object doInBackground(Object... params) { + + Object ret = null; + + switch (this.REQ_CODE){ + + case Commons.RequestCode.CONNECT: + + ret = Commons.connectionEngine.connect((AccessPointInfo)params[0]); + break; + + case Commons.RequestCode.NETWORKS_GET: + + ret = Commons.connectionEngine.getAvailableNetworks(); + break; + + case Commons.RequestCode.STATUS_GET: + + ret = Commons.connectionEngine.getConnectionStatus(); + break; + + default: + + break; + + } + + return ret; + + } + + protected void onPostExecute(Object result) { + taskCompleted(result, this.REQ_CODE); + } + + } + + private AccessPointInfo currentNetwork = null; + + @Override + public void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_long_task); + + startTask(); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu){ + return true; + } + + private void startTask() { + + //retrieve the request code: + Intent intent = getIntent(); + if (! intent.hasExtra(Commons.EXTRA_REQCODE)){ + this.setResult(RESULT_CANCELED); + finish(); + } + + Object input = null; + int reqCode = intent.getExtras().getInt(Commons.EXTRA_REQCODE); + + switch (reqCode) { + + case Commons.RequestCode.CONNECT: + setTitle("Connecting..."); + setMessage("Connecting..."); + //Extract AccessPointInfo + input = intent.getExtras().getSerializable(Commons.EXTRA_APINFO); + currentNetwork = (AccessPointInfo)input; + break; + + case Commons.RequestCode.NETWORKS_GET: + setTitle("Scanning..."); + setMessage("Scanning for Networks..."); + + case Commons.RequestCode.STATUS_GET: + setTitle("Checking status..."); + setMessage("Checking status..."); + + default: + setTitle("Please wait..."); + setMessage("Please wait..."); + break; + } + + Task task = new Task(reqCode, input); + task.execute(input); + + } + + private void taskCompleted(Object result, int reqCode){ + + Utils.logDebug("Finished long task reqCode: "+ reqCode,1); + + //Return to caller: + Intent intent = this.getIntent(); + + + switch (reqCode){ + + case Commons.RequestCode.CONNECT: + + intent.putExtra(Commons.EXTRA_BOOLEAN, (Boolean)result); + intent.putExtra(Commons.EXTRA_APINFO, this.currentNetwork); + break; + + case Commons.RequestCode.NETWORKS_GET: + + intent.putExtra(Commons.EXTRA_APINFO_ARR, (AccessPointInfo[])result); + break; + + case Commons.RequestCode.STATUS_GET: + + intent.putExtra(Commons.EXTRA_CONSTATUS, (ConnectionStatus)result); + break; + + default: + + Utils.logDebug("Task terminating in null: ",1); + break; + + } + + this.setResult(RESULT_OK, intent); + finish(); + + } + + + private void setMessage(String msg) { + TextView txt = (TextView)findViewById(R.id.txt_msg); + txt.setText(msg); + } + + @Override + public void onBackPressed() { + //suppress + } + + + +} diff --git a/app/src/fil/libre/repwifiapp/activities/MainActivity.java b/app/src/fil/libre/repwifiapp/activities/MainActivity.java new file mode 100644 index 0000000..aa92767 --- /dev/null +++ b/app/src/fil/libre/repwifiapp/activities/MainActivity.java @@ -0,0 +1,378 @@ +// +// 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 java.io.IOException; + +import fil.libre.repwifiapp.Commons; +import fil.libre.repwifiapp.R; +import fil.libre.repwifiapp.Commons.RequestCode; +import fil.libre.repwifiapp.helpers.AccessPointInfo; +import fil.libre.repwifiapp.helpers.ConnectionStatus; +import fil.libre.repwifiapp.helpers.NetworkManager; +import fil.libre.repwifiapp.helpers.RootCommand; +import fil.libre.repwifiapp.helpers.Utils; + +import android.os.Bundle; +import android.app.Activity; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.Toast; + +public class MainActivity extends Activity{ + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + setImage(); + setupSharedResources(); + + RootCommand su = new RootCommand(null); + try { + su.execute(); + } catch (Exception e) { + Utils.logError("Error while trying to get first Super User access. Aborting.",e); + finish(); + } + + try { + Commons.initObjects(); + } catch (Exception e) { + Utils.logError("Error on creating engine. Aborting.",e); + finish(); + } + + + checkConnectionStatus(); + + + } + + @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_main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle item selection + switch (item.getItemId()) { + case R.id.menu_credits: + launchCreditsActivity(); + return true; + + default: + return true; + } + } + + @Override + public void onRestart(){ + super.onRestart(); + + ConnectionStatus status = Commons.connectionEngine.getConnectionStatus(); + if (status != null && status.isConnected()){ + launchStatusActivity(status); + } + + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent intent){ + + Utils.logDebug("Main onActivityResult(): ",1); + + if (intent == null){ + return; + } + + if (resultCode != RESULT_OK){ + return; + } + + AccessPointInfo i = null; + if (intent.hasExtra(Commons.EXTRA_APINFO)){ + i = (AccessPointInfo)intent.getExtras().getSerializable(Commons.EXTRA_APINFO); + } + + switch (requestCode) { + + case RequestCode.PASS_INPUT: + handleResultSetPass(i); + break; + + case RequestCode.SELECT_CONN: + boolean rescan = (boolean)intent.getExtras().getBoolean(Commons.EXTRA_RESCAN); + handleResultSelect(i, rescan); + break; + + case RequestCode.CONNECT: + boolean conres = intent.getExtras().getBoolean(Commons.EXTRA_BOOLEAN); + handleFinishedConnecting(conres, i); + break; + + case RequestCode.STATUS_GET: + ConnectionStatus status = (ConnectionStatus)intent.getExtras().getSerializable(Commons.EXTRA_CONSTATUS); + handleResultGetStatus(status); + break; + + case RequestCode.NETWORKS_GET: + AccessPointInfo[] nets = (AccessPointInfo[])intent.getExtras().getSerializable(Commons.EXTRA_APINFO_ARR); + launchSelectActivity(nets, true); + + case RequestCode.STATUS_SHOW: + //do nothing + break; + + case RequestCode.SELECT_DETAILS: + launchDetailsActivity(i); + break; + + case RequestCode.DETAILS_SHOW: + boolean del = intent.getExtras().getBoolean(Commons.EXTRA_DELETE); + if (del){ deleteNetwork(i); } + break; + + default: + + break; + + } + + + } + + private void setImage(){ + + ImageView img = (ImageView)findViewById(R.id.img_logo); + + try { + Drawable d = Drawable.createFromStream(getAssets().open("repwifi-logo-0.png"),null); + img.setImageDrawable(d); + } catch (IOException e) { + Utils.logError("Error while loading logo image",e); + } + + } + + private void setupSharedResources(){ + Commons.colorThemeDark = getResources().getColor(R.color.ThemeDark); + Commons.colorThemeLight = getResources().getColor(R.color.ThemeLight); + Commons.colorBlack = getResources().getColor(R.color.black); + Commons.setAppDataFolder(getExternalFilesDir(null).getAbsolutePath()); + } + + private void handleResultSelect(AccessPointInfo i, boolean rescan){ + + if (rescan){ + + doScan(); + + }else if (i != null){ + + if (i.needsPassword()){ + + //try to fetch network's password from storage + AccessPointInfo fromStorage = Commons.storage.getSavedNetwork(i); + if (fromStorage == null){ + + launchPasswordActivity(i); + return; + + }else{ + //use fetched network + i = fromStorage; + } + + } + + connectToNetwork(i); + } + + } + + private void handleResultSetPass(AccessPointInfo i){ + connectToNetwork(i); + } + + private void handleResultGetStatus(ConnectionStatus status){ + if (status != null && status.isConnected()){ + launchStatusActivity(status); + } + } + + private void handleFinishedConnecting(boolean connectionResult, AccessPointInfo info){ + + if(connectionResult && info.needsPassword()){ + + //Save network + if (Commons.storage.save(info)){ + Toast toast2 = Toast.makeText(getApplicationContext(), "Network Saved!",Toast.LENGTH_LONG); + toast2.show(); + + }else { + Toast toast2 = Toast.makeText(getApplicationContext(), "FAILED to save network!",Toast.LENGTH_LONG); + toast2.show(); + } + + checkConnectionStatus(); + + }else{ + //alert that connection failed + Toast toast = Toast.makeText(getApplicationContext(), "FAILED to connect!", Toast.LENGTH_LONG); + toast.show(); + } + } + + private void launchPasswordActivity(AccessPointInfo info){ + + Intent intent = new Intent(); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + intent.setClass(getApplicationContext(), InputPasswordActivity.class); + intent.putExtra(Commons.EXTRA_APINFO, info); + + startActivityForResult(intent, RequestCode.PASS_INPUT); + + } + + private void launchStatusActivity(ConnectionStatus status){ + + Intent intent = new Intent(); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + intent.putExtra(Commons.EXTRA_CONSTATUS, status); + intent.setClass(getApplicationContext(), ShowStatusActivity.class); + startActivityForResult(intent, RequestCode.STATUS_SHOW); + + } + + private void launchSelectActivity(AccessPointInfo[] nets,boolean forConnection){ + + Intent intent = new Intent(this, SelectNetworkActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + intent.putExtra(Commons.EXTRA_APINFO_ARR, nets); + + if (forConnection){ + intent.putExtra(Commons.EXTRA_REQCODE, RequestCode.SELECT_CONN); + startActivityForResult(intent, RequestCode.SELECT_CONN); + } + else{ + intent.putExtra(Commons.EXTRA_REQCODE, RequestCode.SELECT_DETAILS); + startActivityForResult(intent, RequestCode.SELECT_DETAILS); + } + + } + + private void launchDetailsActivity(AccessPointInfo info){ + + Intent intent = new Intent(this, NetworkDetailsActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + intent.putExtra(Commons.EXTRA_APINFO, info); + startActivityForResult(intent, RequestCode.DETAILS_SHOW); + + } + + private void launchCreditsActivity(){ + + Intent intent = new Intent(this, CreditsActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + startActivityForResult(intent, RequestCode.NONE); + + } + + private void deleteNetwork(AccessPointInfo info){ + + NetworkManager manager = new NetworkManager(Commons.getNetworkStorageFile()); + String msg = ""; + if (manager.remove(info)){ + msg = "Network info deleted!"; + }else{ + msg = "FAILED to delete network info!"; + } + + Toast toast = Toast.makeText(this, msg, Toast.LENGTH_LONG); + toast.show(); + + } + + private void connectToNetwork(AccessPointInfo info){ + + Intent intent = new Intent(this, LongTaskActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + intent.putExtra(Commons.EXTRA_REQCODE, RequestCode.CONNECT); + intent.putExtra(Commons.EXTRA_APINFO, info); + startActivityForResult(intent, RequestCode.CONNECT); + + } + + private void checkConnectionStatus(){ + + Intent intent = new Intent(this, LongTaskActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + intent.putExtra(Commons.EXTRA_REQCODE, RequestCode.STATUS_GET); + startActivityForResult(intent, RequestCode.STATUS_GET); + + } + + private void doScan(){ + + Intent intent = new Intent(this, LongTaskActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + intent.putExtra(Commons.EXTRA_REQCODE, RequestCode.NETWORKS_GET); + startActivityForResult(intent, RequestCode.NETWORKS_GET); + + } + + public void btnScanClick(View v){ + + doScan(); + + } + + public void btnManageClick(View v){ + + NetworkManager manager = new NetworkManager(Commons.getNetworkStorageFile()); + AccessPointInfo[] infos = manager.getKnownNetworks(); + + if (infos == null || infos.length == 0){ + Toast toast = Toast.makeText(this, "No saved network", Toast.LENGTH_LONG); + toast.show(); + } + else{ + launchSelectActivity(infos, false); + } + + } + +} diff --git a/app/src/fil/libre/repwifiapp/activities/NetworkDetailsActivity.java b/app/src/fil/libre/repwifiapp/activities/NetworkDetailsActivity.java new file mode 100644 index 0000000..e43eee2 --- /dev/null +++ b/app/src/fil/libre/repwifiapp/activities/NetworkDetailsActivity.java @@ -0,0 +1,145 @@ +// +// 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 java.util.Date; + + +import fil.libre.repwifiapp.Commons; +import fil.libre.repwifiapp.R; +import fil.libre.repwifiapp.helpers.AccessPointInfo; + +import android.os.Bundle; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.text.format.DateFormat; +import android.view.Menu; +import android.view.View; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.TextView; +import android.widget.CompoundButton.OnCheckedChangeListener; + +public class NetworkDetailsActivity extends Activity implements OnCheckedChangeListener { + + private AccessPointInfo currentNetwor; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_network_details); + + CheckBox c = (CheckBox)findViewById(R.id.chk_show_pass_details); + c.setOnCheckedChangeListener(this); + + Intent intent = getIntent(); + if (! intent.hasExtra(Commons.EXTRA_APINFO)){ + this.setResult(RESULT_CANCELED); + this.finish(); + return; + } + + this.currentNetwor = (AccessPointInfo)intent.getExtras().getSerializable(Commons.EXTRA_APINFO); + if (this.currentNetwor == null){ + this.setResult(RESULT_CANCELED); + this.finish(); + return; + } + + loadNetwork(false); + + } + + @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_manage_networks, menu); + return true; + } + + private void loadNetwork(boolean showPassword){ + + setTitle(this.currentNetwor.getSSID()); + + TextView v = (TextView)findViewById(R.id.txt_net_details); + v.setText("SSID: " + this.currentNetwor.getSSID()); + v.append("\nBSSID: " + this.currentNetwor.getBSSID()); + + long lastused = this.currentNetwor.getLastTimeUsed(); + if (lastused > 0){ + Date ts = new Date(lastused); + String formstring = "dd-MMM-yyyy kk:mm:ss"; + v.append("\nLast Used: " + DateFormat.format(formstring, ts)); + } + + if (showPassword){ + v.append("\n\nPassword:\n" + this.currentNetwor.getPassword()); + }else{ + v.append("\n\n\n"); + } + + } + + public void btnDeleteClick(View v){ + + + AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); + dlgAlert.setMessage("Are you sure you want to delete this network?"); + dlgAlert.setPositiveButton("Yes",new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + returnResult(true); + } + }); + dlgAlert.setNegativeButton("NO",new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + //nothing + } + }); + + dlgAlert.setCancelable(true); + dlgAlert.create().show(); + + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + + if (buttonView == findViewById(R.id.chk_show_pass_details)){ + loadNetwork(isChecked); + } + + } + + private void returnResult(boolean delete){ + + Intent i = new Intent(); + i.putExtra(Commons.EXTRA_DELETE, delete); + i.putExtra(Commons.EXTRA_APINFO, this.currentNetwor); + this.setResult(RESULT_OK,i); + finish(); + + } + + + +} 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); + + } + +} diff --git a/app/src/fil/libre/repwifiapp/activities/ShowStatusActivity.java b/app/src/fil/libre/repwifiapp/activities/ShowStatusActivity.java new file mode 100644 index 0000000..2674737 --- /dev/null +++ b/app/src/fil/libre/repwifiapp/activities/ShowStatusActivity.java @@ -0,0 +1,131 @@ +// +// 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.ConnectionStatus; +import fil.libre.repwifiapp.helpers.Utils; + +import android.os.Bundle; +import android.app.Activity; +import android.view.Menu; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +public class ShowStatusActivity extends Activity { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_show_status); + showStatus(); + + } + + @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_show_status, menu); + return true; + } + + @Override + public void onRestart(){ + super.onRestart(); + showStatus(); + } + + private void setMessage(String msg){ + TextView view = (TextView)findViewById(R.id.txt_status); + view.setText(msg); + } + + private void showStatus(){ + + ConnectionStatus status = Commons.connectionEngine.getConnectionStatus(); + if (status == null){ + this.finish(); + + }else if (status.isConnected()){ + Utils.logDebug("StatusActivity isConnected,showing buttons"); + setMessage("Connected to " + status.SSID + "\n\n" + "IP Address: " + status.IP + "\n"); + toggleBtnDisconnect(true); + + + }else{ + Utils.logDebug("StatusActivity status Else"); + setMessage("Status:\n" + status.status); + toggleBtnDisconnect(false); + + } + } + + private void toggleBtnDisconnect(boolean enable){ + + Button b = (Button)findViewById(R.id.btn_disconnect); + Button bk = (Button)findViewById(R.id.btn_back); + b.setEnabled(enable); + bk.setEnabled(! enable); + + if (enable){ + b.setVisibility(View.VISIBLE); + bk.setVisibility(View.INVISIBLE); + }else{ + b.setVisibility(View.INVISIBLE); + bk.setVisibility(View.VISIBLE); + } + + } + + public void onBtnDisconnectClick(View v){ + + boolean res = Commons.connectionEngine.disconnect(); + String msg = ""; + if (res){ + msg = "Disconnected."; + } + else{ + msg = "FAILED to disconnect!"; + } + + Toast toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT); + toast.show(); + + showStatus(); + + } + + public void onBtnMainClick(View v){ + finish(); + } + + @Override + public void onBackPressed() { + moveTaskToBack(true); + } + +} |