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/MainActivity.java | |
parent | 8b111e0799432fc5a6ead191e1029cc1446a8c91 (diff) | |
download | packages_apps_repwifi-6cd05512a7bca3becff60ae470f43793744c7f86.tar.gz packages_apps_repwifi-6cd05512a7bca3becff60ae470f43793744c7f86.tar.bz2 packages_apps_repwifi-6cd05512a7bca3becff60ae470f43793744c7f86.zip |
Removed bin directory, renamed root directory
Diffstat (limited to 'app/src/fil/libre/repwifiapp/activities/MainActivity.java')
-rw-r--r-- | app/src/fil/libre/repwifiapp/activities/MainActivity.java | 378 |
1 files changed, 378 insertions, 0 deletions
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); + } + + } + +} |