From 61bdbbdc3f81b89ce1679075664fe50012ccd78d Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Fri, 30 Jan 2015 23:51:53 +0100 Subject: o Activating the sensor view. --- .../io/trygvis/soilmoisture/SensorActivity.java | 115 +++++++++++++++++++-- 1 file changed, 107 insertions(+), 8 deletions(-) (limited to 'app/src/main/java/io/trygvis/soilmoisture/SensorActivity.java') 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(); + } } } -- cgit v1.2.3