Automation/app/src/main/java/com/jens/automation2/ActivityManageTriggerWifi.java

197 lines
6.8 KiB
Java
Raw Normal View History

2021-05-16 02:32:31 +02:00
package com.jens.automation2;
2021-05-16 14:27:54 +02:00
import android.Manifest;
2021-05-16 02:32:31 +02:00
import android.app.Activity;
2021-05-16 14:27:54 +02:00
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
2021-05-16 02:32:31 +02:00
import android.content.Intent;
2021-05-16 14:27:54 +02:00
import android.content.pm.PackageManager;
2021-08-14 14:11:19 +02:00
import android.net.wifi.ScanResult;
2021-05-16 14:27:54 +02:00
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
2021-08-14 14:11:19 +02:00
import android.os.Build;
2021-05-16 02:32:31 +02:00
import android.os.Bundle;
2021-08-14 14:11:19 +02:00
import android.util.Log;
2021-05-16 02:32:31 +02:00
import android.view.View;
2021-05-16 14:27:54 +02:00
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
2021-05-16 02:32:31 +02:00
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
2021-05-16 14:27:54 +02:00
import android.widget.Toast;
2021-05-16 02:32:31 +02:00
2021-05-16 14:27:54 +02:00
import androidx.annotation.NonNull;
2021-05-16 02:32:31 +02:00
import androidx.annotation.Nullable;
2021-05-16 14:27:54 +02:00
import androidx.core.app.ActivityCompat;
import com.jens.automation2.receivers.BluetoothReceiver;
2021-05-16 19:57:05 +02:00
import java.lang.reflect.Array;
2021-05-16 14:27:54 +02:00
import java.util.ArrayList;
2021-05-16 19:57:05 +02:00
import java.util.Collections;
2021-05-16 14:27:54 +02:00
import java.util.List;
2021-05-16 02:32:31 +02:00
public class ActivityManageTriggerWifi extends Activity
{
2022-01-09 21:43:49 +01:00
public final static String intentNameWifiState = "wifiState";
public final static String intentNameWifiName = "wifiName";
2021-05-16 02:32:31 +02:00
RadioButton rbTriggerWifiConnected, rbTriggerWifiDisconnected;
EditText etTriggerWifiName;
Spinner spinnerWifiList;
2021-05-16 14:27:54 +02:00
Button btriggerWifiSave, bLoadWifiList;
List<String> wifiList = new ArrayList<>();
ArrayAdapter<String> wifiSpinnerAdapter;
private final static int requestCodeLocationPermission = 124;
2021-05-16 02:32:31 +02:00
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage_trigger_wifi);
2021-05-16 14:27:54 +02:00
rbTriggerWifiConnected = (RadioButton) findViewById(R.id.rbTriggerWifiConnected);
rbTriggerWifiDisconnected = (RadioButton) findViewById(R.id.rbTriggerWifiDisconnected);
2021-05-16 02:32:31 +02:00
etTriggerWifiName = (EditText) findViewById(R.id.etTriggerWifiName);
2021-05-16 14:27:54 +02:00
spinnerWifiList = (Spinner) findViewById(R.id.spinnerWifiList);
btriggerWifiSave = (Button) findViewById(R.id.btriggerWifiSave);
bLoadWifiList = (Button) findViewById(R.id.bLoadWifiList);
wifiSpinnerAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, wifiList);
spinnerWifiList.setAdapter(wifiSpinnerAdapter);
2021-08-14 14:11:19 +02:00
spinnerWifiList.setEnabled(false); // bug in Android; this only works when done in code, not in xml
2021-05-16 02:32:31 +02:00
2021-05-16 14:27:54 +02:00
if (getIntent().hasExtra("edit"))
2021-05-16 02:32:31 +02:00
{
boolean connected = getIntent().getBooleanExtra("wifiState", false);
String wifiName = getIntent().getStringExtra("wifiName");
rbTriggerWifiConnected.setChecked(connected);
rbTriggerWifiDisconnected.setChecked(!connected);
etTriggerWifiName.setText(wifiName);
}
btriggerWifiSave.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent response = new Intent();
response.putExtra("wifiState", rbTriggerWifiConnected.isChecked());
response.putExtra("wifiName", etTriggerWifiName.getText().toString());
2021-05-16 14:27:54 +02:00
setResult(RESULT_OK, response);
finish();
}
});
spinnerWifiList.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
etTriggerWifiName.setText(wifiList.get(position));
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
2021-05-16 02:32:31 +02:00
}
});
2021-05-16 14:27:54 +02:00
bLoadWifiList.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
loadWifis();
}
});
}
public void loadWifis()
{
if(!ActivityPermissions.havePermission(Manifest.permission.ACCESS_FINE_LOCATION, ActivityManageTriggerWifi.this))
{
AlertDialog dialog = Miscellaneous.messageBox(getResources().getString(R.string.permissionsTitle), getResources().getString(R.string.needLocationPermForWifiList), ActivityManageTriggerWifi.this);
dialog.setOnDismissListener(new DialogInterface.OnDismissListener()
{
@Override
public void onDismiss(DialogInterface dialog)
{
ActivityCompat.requestPermissions(ActivityManageTriggerWifi.this, new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, requestCodeLocationPermission);
}
});
dialog.show();
}
else
{
reallyLoadWifiList();
}
}
void reallyLoadWifiList()
{
2021-08-14 14:11:19 +02:00
if(Build.VERSION.SDK_INT >= 30)
{
Miscellaneous.messageBox(getResources().getString(R.string.hint), getResources().getString(R.string.wifiApi30), ActivityManageTriggerWifi.this).show();
loadListOfVisibleWifis();
}
else
{
WifiManager myWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
2021-05-16 14:27:54 +02:00
2021-08-14 14:11:19 +02:00
for (WifiConfiguration wifi : myWifiManager.getConfiguredNetworks())
wifiList.add(wifi.SSID.replaceAll("\"+$", "").replaceAll("^\"+", ""));
}
2021-05-16 14:27:54 +02:00
2021-08-31 18:53:26 +02:00
if (wifiList.size() > 0)
2021-05-16 19:57:05 +02:00
{
2021-05-16 14:27:54 +02:00
spinnerWifiList.setEnabled(true);
2021-05-16 19:57:05 +02:00
Collections.sort(wifiList);
}
2021-05-16 14:27:54 +02:00
else
{
spinnerWifiList.setEnabled(false);
Toast.makeText(ActivityManageTriggerWifi.this, getResources().getString(R.string.noKnownWifis), Toast.LENGTH_SHORT).show();
}
wifiSpinnerAdapter.notifyDataSetChanged();
}
2021-08-14 14:11:19 +02:00
void loadListOfVisibleWifis()
{
List<ScanResult> results = null;
try
{
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
results = wifiManager.getScanResults();
for (ScanResult wifi : results)
wifiList.add(wifi.SSID.replaceAll("\"+$", "").replaceAll("^\"+", ""));
}
catch(Exception e)
{
Miscellaneous.logEvent("e", "loadListOfVisibleWifis()", Log.getStackTraceString(e), 1);
}
}
2021-05-16 14:27:54 +02:00
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case requestCodeLocationPermission:
if(grantResults[0] == PackageManager.PERMISSION_GRANTED)
reallyLoadWifiList();
break;
}
2021-05-16 02:32:31 +02:00
}
}