diff --git a/app/src/apkFlavor/AndroidManifest.xml b/app/src/apkFlavor/AndroidManifest.xml index 078e31c..1cc2eee 100644 --- a/app/src/apkFlavor/AndroidManifest.xml +++ b/app/src/apkFlavor/AndroidManifest.xml @@ -70,6 +70,7 @@ + + + diff --git a/app/src/main/java/com/jens/automation2/ActivityManageRule.java b/app/src/main/java/com/jens/automation2/ActivityManageRule.java index 34166a9..c3e434b 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java @@ -147,6 +147,8 @@ public class ActivityManageRule extends Activity final static int requestCodeTriggerCalendarEventEdit = 834; final static int requestCodeTriggerChargingAdd = 835; final static int requestCodeTriggerChargingEdit = 836; + final static int requestCodeTriggerProximityAdd = 837; + final static int requestCodeTriggerProximityEdit = 838; public static ActivityManageRule getInstance() { @@ -365,6 +367,12 @@ public class ActivityManageRule extends Activity chargingStateEditor.putExtra(intentNameTriggerParameter2, selectedTrigger.getTriggerParameter2()); startActivityForResult(chargingStateEditor, requestCodeTriggerChargingEdit); break; + case proximity: + Intent proximityEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerProximity.class); + proximityEditor.putExtra(intentNameTriggerParameter1, selectedTrigger.getTriggerParameter()); + proximityEditor.putExtra(intentNameTriggerParameter2, selectedTrigger.getTriggerParameter2()); + startActivityForResult(proximityEditor, requestCodeTriggerProximityEdit); + break; default: break; } @@ -727,6 +735,13 @@ public class ActivityManageRule extends Activity startActivityForResult(triggerChargingIntent, requestCodeTriggerChargingAdd); return; } + else if(triggerType == Trigger_Enum.proximity) + { + newTrigger.setTriggerType(Trigger_Enum.proximity); + Intent triggerProximityIntent = new Intent(myContext, ActivityManageTriggerProximity.class); + startActivityForResult(triggerProximityIntent, requestCodeTriggerProximityAdd); + return; + } else if(triggerType == Trigger_Enum.musicPlaying) booleanChoices = new String[]{getResources().getString(R.string.started), getResources().getString(R.string.stopped)}; else if(triggerType == Trigger_Enum.usb_host_connection) @@ -1488,19 +1503,43 @@ public class ActivityManageRule extends Activity this.refreshTriggerList(); } } + else if(requestCode == requestCodeTriggerProximityAdd) + { + if(resultCode == RESULT_OK) + { + newTrigger.setTriggerParameter(data.getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, false)); + newTrigger.setTriggerParameter2(data.getStringExtra(ActivityManageRule.intentNameTriggerParameter2)); + newTrigger.setParentRule(ruleToEdit); + ruleToEdit.getTriggerSet().add(newTrigger); + this.refreshTriggerList(); + } + } else if(requestCode == requestCodeTriggerChargingEdit) { if(resultCode == RESULT_OK) { - Trigger responseTimeFrame = new Trigger(); - responseTimeFrame.setTriggerType(Trigger_Enum.charging); - responseTimeFrame.setTriggerParameter(data.getBooleanExtra(intentNameTriggerParameter1, true)); - responseTimeFrame.setTriggerParameter2(data.getStringExtra(intentNameTriggerParameter2)); - responseTimeFrame.setParentRule(ruleToEdit); - ruleToEdit.getTriggerSet().set(editIndex, responseTimeFrame); + Trigger chargingStateTrigger = new Trigger(); + chargingStateTrigger.setTriggerType(Trigger_Enum.charging); + chargingStateTrigger.setTriggerParameter(data.getBooleanExtra(intentNameTriggerParameter1, true)); + chargingStateTrigger.setTriggerParameter2(data.getStringExtra(intentNameTriggerParameter2)); + chargingStateTrigger.setParentRule(ruleToEdit); + ruleToEdit.getTriggerSet().set(editIndex, chargingStateTrigger); this.refreshTriggerList(); } } + else if(requestCode == requestCodeTriggerProximityEdit) + { + if(resultCode == RESULT_OK) + { + Trigger proximityTrigger = new Trigger(); + proximityTrigger.setTriggerType(Trigger_Enum.proximity); + proximityTrigger.setTriggerParameter(data.getBooleanExtra(intentNameTriggerParameter1, true)); + proximityTrigger.setTriggerParameter2(data.getStringExtra(intentNameTriggerParameter2)); + proximityTrigger.setParentRule(ruleToEdit); + ruleToEdit.getTriggerSet().set(editIndex, proximityTrigger); + this.refreshTriggerList(); + } + } else if(requestCode == requestCodeActionStartActivityAdd) { // manage start of other activity diff --git a/app/src/main/java/com/jens/automation2/ActivityManageTriggerProximity.java b/app/src/main/java/com/jens/automation2/ActivityManageTriggerProximity.java index 32f81a0..628e90d 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageTriggerProximity.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageTriggerProximity.java @@ -7,6 +7,10 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; @@ -31,6 +35,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.app.ActivityCompat; +import com.google.android.material.slider.RangeSlider; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -39,7 +45,11 @@ public class ActivityManageTriggerProximity extends Activity { TextView tvTriggerProximityHint; Button bTriggerProximitySave; - SeekBar sbProximity, sbProximityTest; + RangeSlider rsProximity; + SeekBar sbProximityTest; + + SensorManager sensorManager; + Sensor proximitySensor; @Override protected void onCreate(@Nullable Bundle savedInstanceState) @@ -49,7 +59,7 @@ public class ActivityManageTriggerProximity extends Activity Miscellaneous.setUiTheme(this); setContentView(R.layout.activity_manage_trigger_proximity); - sbProximity = (SeekBar) findViewById(R.id.sbProximity); + rsProximity = (RangeSlider) findViewById(R.id.rsProximity); sbProximityTest = (SeekBar) findViewById(R.id.sbProximityTest); tvTriggerProximityHint = (TextView) findViewById(R.id.tvTriggerProximityHint); bTriggerProximitySave = (Button) findViewById(R.id.bTriggerProximitySave); @@ -63,157 +73,64 @@ public class ActivityManageTriggerProximity extends Activity public void onClick(View v) { Intent response = new Intent(); - response.putExtra("wifiState", rbTriggerWifiConnected.isChecked()); - response.putExtra("wifiName", etTriggerWifiName.getText().toString()); +// response.putExtra("wifiState", rbTriggerWifiConnected.isChecked()); +// response.putExtra("wifiName", etTriggerWifiName.getText().toString()); 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)); - - 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() + void startPreview() { - if(!ActivityPermissions.havePermission(Manifest.permission.ACCESS_FINE_LOCATION, ActivityManageTriggerProximity.this)) + sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); + + // from sensor service we are + // calling proximity sensor + proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); + + // handling the case if the proximity + // sensor is not present in users device. + if (proximitySensor == null) { - AlertDialog dialog = Miscellaneous.messageBox(getResources().getString(R.string.permissionsTitle), getResources().getString(R.string.needLocationPermForWifiList), ActivityManageTriggerProximity.this); - dialog.setOnDismissListener(new DialogInterface.OnDismissListener() + tvTriggerProximityHint.setVisibility(View.VISIBLE); + finish(); + } + else + { + // registering our sensor with sensor manager. + sensorManager.registerListener(proximitySensorEventListener, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL); + } + } + + SensorEventListener proximitySensorEventListener = new SensorEventListener() + { + @Override + public void onSensorChanged(SensorEvent sensorEvent) + { + // check if the sensor type is proximity sensor. + if (sensorEvent.sensor.getType() == Sensor.TYPE_PROXIMITY) { - @Override - public void onDismiss(DialogInterface dialog) + sbProximityTest.setProgress((int)sensorEvent.values[0] * 100); + + if (sensorEvent.values[0] == 0) { - ActivityCompat.requestPermissions(ActivityManageTriggerProximity.this, new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, requestCodeLocationPermission); + // here we are setting our status to our textview.. + // if sensor event return 0 then object is closed + // to sensor else object is away from sensor. +// sensorStatusTV.setText("Near"); } - }); - dialog.show(); + else + { +// sensorStatusTV.setText("Away"); + } + } } - else + + @Override + public void onAccuracyChanged(Sensor sensor, int i) { - 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; - } - } -} + };;; +} \ No newline at end of file diff --git a/app/src/main/java/com/jens/automation2/Trigger.java b/app/src/main/java/com/jens/automation2/Trigger.java index 43e074c..6dd1fb5 100644 --- a/app/src/main/java/com/jens/automation2/Trigger.java +++ b/app/src/main/java/com/jens/automation2/Trigger.java @@ -67,6 +67,7 @@ public class Trigger tethering, subSystemState, checkVariable, + proximity, calendarEvent, phoneCall; //phoneCall always needs to be at the very end because of Google's shitty so called privacy @@ -128,6 +129,8 @@ public class Trigger return context.getResources().getString(R.string.subSystemState); case checkVariable: return context.getResources().getString(R.string.checkVariable); + case proximity: + return context.getResources().getString(R.string.proximity); case calendarEvent: return context.getResources().getString(R.string.calendarEventCapital); default: diff --git a/app/src/main/res/layout/activity_manage_trigger_proximity.xml b/app/src/main/res/layout/activity_manage_trigger_proximity.xml index 199ea25..5ac113d 100644 --- a/app/src/main/res/layout/activity_manage_trigger_proximity.xml +++ b/app/src/main/res/layout/activity_manage_trigger_proximity.xml @@ -26,31 +26,12 @@ android:paddingRight="@dimen/default_margin" android:text="@string/state"/> - - - - - - - - - -