aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/io/trygvis/soilmoisture/SensorActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/io/trygvis/soilmoisture/SensorActivity.java')
-rw-r--r--app/src/main/java/io/trygvis/soilmoisture/SensorActivity.java115
1 files changed, 107 insertions, 8 deletions
diff --git a/app/src/main/java/io/trygvis/soilmoisture/SensorActivity.java b/app/src/main/java/io/trygvis/soilmoisture/SensorActivity.java
index a5b68d8..f818054 100644
--- a/app/src/main/java/io/trygvis/soilmoisture/SensorActivity.java
+++ b/app/src/main/java/io/trygvis/soilmoisture/SensorActivity.java
@@ -5,6 +5,7 @@ import android.app.Activity;
import android.app.Fragment;
import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
@@ -14,6 +15,8 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.TextView;
import android.widget.Toast;
import io.trygvis.android.LocalBinder;
@@ -38,18 +41,19 @@ public class SensorActivity extends Activity {
private SmSensor sensor;
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor);
+
+ address = getIntent().getStringExtra(EXTRA_ADDRESS);
+ number = getIntent().getIntExtra(EXTRA_NUMBER, -1);
+
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
- .add(R.id.container, new PlaceholderFragment())
+ .add(R.id.container, new SensorFragment())
.commit();
}
- address = getIntent().getStringExtra(EXTRA_ADDRESS);
- number = getIntent().getIntExtra(EXTRA_NUMBER, -1);
-
ActionBar actionBar = getActionBar();
if (actionBar != null) {
@@ -74,6 +78,9 @@ public class SensorActivity extends Activity {
}
sensor = o.get();
+ // Schedule an updated reading of the relevant values.
+ refreshSensorValues();
+
runOnUiThread(SensorActivity.this::initializeView);
}
@@ -83,6 +90,46 @@ public class SensorActivity extends Activity {
soilMoistureService = null;
}
};
+
+ bindService(new Intent(this, DefaultSoilMoistureService.class), serviceConnection, BIND_AUTO_CREATE);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+
+ if (serviceConnection != null) {
+ sensor = null;
+ device = null;
+ unbindService(serviceConnection);
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ Log.i(TAG, "onResume");
+
+ super.onResume();
+
+ registerReceiver(serviceListener, SoilMoistureListener.INTENT_FILTER);
+ }
+
+ @Override
+ protected void onPause() {
+ Log.i(TAG, "onPause");
+
+ super.onPause();
+ unregisterReceiver(serviceListener);
+ }
+
+ private void refreshSensorValues() {
+ if (sensor == null) {
+ Log.d(TAG, "refreshSensorValues: not connected to service");
+ return;
+ }
+
+ sensor.readCurrentValue();
+ sensor.readWarningValue();
}
public void initializeView() {
@@ -114,20 +161,72 @@ public class SensorActivity extends Activity {
/**
* A placeholder fragment containing a simple view.
*/
- public static class PlaceholderFragment extends Fragment {
+ public static class SensorFragment extends Fragment {
+ private SensorActivity sensorActivity;
+ private TextView currentValue;
+ private TextView warningValue;
+
+ @Override
+ public void onAttach(Activity activity) {
+ Log.i(TAG, "onAttach");
+ super.onAttach(activity);
- public PlaceholderFragment() {
+ sensorActivity = (SensorActivity) activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_sensor, container, false);
+
+ currentValue = (TextView) rootView.findViewById(R.id.current_value);
+ warningValue = (TextView) rootView.findViewById(R.id.warning_value);
+
+ Button button = (Button) rootView.findViewById(R.id.button_refresh);
+
+ button.setOnClickListener(v -> sensorActivity.refreshSensorValues());
+
+ update();
+
return rootView;
}
- }
+ public void update() {
+ SmSensor sensor = sensorActivity.sensor;
+
+ if (sensor == null) {
+ return;
+ }
+
+ Integer v = sensor.getLastValue();
+ currentValue.setText(v != null ? v.toString() : "");
+
+ Integer w = sensor.getWarningValue();
+ warningValue.setText(w != null ? w.toString() : "");
+ }
+ }
private class SensorSoilMoistureListener extends SoilMoistureListener {
+ @Override
+ public void onNewSample(String address, int sensor) {
+ if(!address.equals(SensorActivity.this.address) || sensor != SensorActivity.this.number) {
+ return;
+ }
+
+ SensorFragment sensorFragment = (SensorFragment) getFragmentManager().findFragmentById(R.id.container);
+ sensorFragment.update();
+ }
+
+ @Override
+ public void onDevicePropertyUpdated(String address) {
+ Log.i(TAG, "onDevicePropertyUpdated");
+
+ if (!address.equals(SensorActivity.this.address)) {
+ return;
+ }
+
+ SensorFragment sensorFragment = (SensorFragment) getFragmentManager().findFragmentById(R.id.container);
+ sensorFragment.update();
+ }
}
}