From 3497d7b8ea24748cf4cdd994587857b54b232374 Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 2 Nov 2025 19:10:05 +0100 Subject: [PATCH] Proximity sensor trigger --- app/src/apkFlavor/AndroidManifest.xml | 1 + app/src/fdroidFlavor/AndroidManifest.xml | 1 + app/src/googlePlayFlavor/AndroidManifest.xml | 1 + .../ActivityManageTriggerProximity.java | 219 ++++++++++++++++++ .../activity_manage_trigger_proximity.xml | 90 +++++++ app/src/main/res/values/strings.xml | 4 + 6 files changed, 316 insertions(+) create mode 100644 app/src/main/java/com/jens/automation2/ActivityManageTriggerProximity.java create mode 100644 app/src/main/res/layout/activity_manage_trigger_proximity.xml diff --git a/app/src/apkFlavor/AndroidManifest.xml b/app/src/apkFlavor/AndroidManifest.xml index 9f1a95f..078e31c 100644 --- a/app/src/apkFlavor/AndroidManifest.xml +++ b/app/src/apkFlavor/AndroidManifest.xml @@ -245,6 +245,7 @@ + + + parent, View view, int position, long id) + { + etTriggerWifiName.setText(wifiList.get(position)); + + if(etTriggerWifiName.getText().toString().length() > 0 && rbTriggerWifiDisconnected.isChecked()) + tvWifiTriggerDisconnectionHint.setVisibility(View.VISIBLE); + else + tvWifiTriggerDisconnectionHint.setVisibility(View.GONE); + } + + @Override + public void onNothingSelected(AdapterView parent) + { + + } + }); + + bLoadWifiList.setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + loadWifis(); + } + }); + + rbTriggerWifiDisconnected.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() + { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) + { + if(etTriggerWifiName.getText().toString().length() > 0 && b) + tvWifiTriggerDisconnectionHint.setVisibility(View.VISIBLE); + else + tvWifiTriggerDisconnectionHint.setVisibility(View.GONE); + } + }); + etTriggerWifiName.addTextChangedListener(new TextWatcher() + { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) + { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) + { + if(etTriggerWifiName.getText().toString().length() > 0 && rbTriggerWifiDisconnected.isChecked()) + tvWifiTriggerDisconnectionHint.setVisibility(View.VISIBLE); + else + tvWifiTriggerDisconnectionHint.setVisibility(View.GONE); + } + + @Override + public void afterTextChanged(Editable editable) + { + + } + }); + } + + public void loadWifis() + { + if(!ActivityPermissions.havePermission(Manifest.permission.ACCESS_FINE_LOCATION, ActivityManageTriggerProximity.this)) + { + AlertDialog dialog = Miscellaneous.messageBox(getResources().getString(R.string.permissionsTitle), getResources().getString(R.string.needLocationPermForWifiList), ActivityManageTriggerProximity.this); + dialog.setOnDismissListener(new DialogInterface.OnDismissListener() + { + @Override + public void onDismiss(DialogInterface dialog) + { + ActivityCompat.requestPermissions(ActivityManageTriggerProximity.this, new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, requestCodeLocationPermission); + } + }); + dialog.show(); + } + else + { + reallyLoadWifiList(); + } + } + + void reallyLoadWifiList() + { + if(Build.VERSION.SDK_INT >= 30) + { + Miscellaneous.messageBox(getResources().getString(R.string.hint), getResources().getString(R.string.wifiApi30), ActivityManageTriggerProximity.this).show(); + loadListOfVisibleWifis(); + } + else + { + WifiManager myWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); + + for (WifiConfiguration wifi : myWifiManager.getConfiguredNetworks()) + wifiList.add(wifi.SSID.replaceAll("\"+$", "").replaceAll("^\"+", "")); + } + + if (wifiList.size() > 0) + { + spinnerWifiList.setEnabled(true); + Collections.sort(wifiList); + } + else + { + spinnerWifiList.setEnabled(false); + Toast.makeText(ActivityManageTriggerProximity.this, getResources().getString(R.string.noKnownWifis), Toast.LENGTH_SHORT).show(); + } + + wifiSpinnerAdapter.notifyDataSetChanged(); + } + + void loadListOfVisibleWifis() + { + List 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); + } + } + + @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; + } + } +} diff --git a/app/src/main/res/layout/activity_manage_trigger_proximity.xml b/app/src/main/res/layout/activity_manage_trigger_proximity.xml new file mode 100644 index 0000000..199ea25 --- /dev/null +++ b/app/src/main/res/layout/activity_manage_trigger_proximity.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +