Modified mainactivity to use generic utilities. Added more rows to startup screen.

This commit is contained in:
Graham Jones
2015-11-20 22:58:26 +00:00
parent 63604bc25b
commit 856b3c5d3d
6 changed files with 263 additions and 208 deletions

View File

@@ -74,9 +74,8 @@ public class MainActivity extends Activity {
private int okColour = Color.BLUE;
private int warnColour = Color.MAGENTA;
private int alarmColour = Color.RED;
OsdUtil mUtil;
SdServer mSdServer;
boolean mBound = false;
private OsdUtil mUtil;
private SdServiceConnection mConnection;
private Menu mOptionsMenu;
private Intent sdServerIntent;
@@ -92,6 +91,7 @@ public class MainActivity extends Activity {
super.onCreate(savedInstanceState);
mUtil = new OsdUtil(this);
mConnection = new SdServiceConnection(this);
// Initialise the User Interface
setContentView(R.layout.main);
@@ -119,8 +119,8 @@ public class MainActivity extends Activity {
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.v(TAG, "acceptAlarmButton.onClick()");
if (mBound) {
mSdServer.acceptAlarm();
if (mConnection.mBound) {
mConnection.mSdServer.acceptAlarm();
}
}
});
@@ -163,46 +163,46 @@ public class MainActivity extends Activity {
case R.id.action_accept_alarm:
Log.v(TAG, "action_accept_alarm");
if (mBound) {
mSdServer.acceptAlarm();
if (mConnection.mBound) {
mConnection.mSdServer.acceptAlarm();
}
return true;
case R.id.action_start_stop:
// Respond to the start/stop server menu item.
Log.v(TAG, "action_sart_stop");
if (mBound) {
if (mConnection.mBound) {
Log.v(TAG, "Stopping Server");
unbindFromServer();
mUtil.unbindFromServer(this, mConnection);
stopServer();
} else {
Log.v(TAG, "Starting Server");
startServer();
// and bind to it so we can see its data
bindToServer();
mUtil.bindToServer(this, mConnection);
}
return true;
case R.id.action_test_fault_beep:
Log.v(TAG, "action_test_fault_beep");
if (mBound) {
mSdServer.faultWarningBeep();
if (mConnection.mBound) {
mConnection.mSdServer.faultWarningBeep();
}
return true;
case R.id.action_test_alarm_beep:
Log.v(TAG, "action_test_alarm_beep");
if (mBound) {
mSdServer.alarmBeep();
if (mConnection.mBound) {
mConnection.mSdServer.alarmBeep();
}
return true;
case R.id.action_test_warning_beep:
Log.v(TAG, "action_test_warning_beep");
if (mBound) {
mSdServer.warningBeep();
if (mConnection.mBound) {
mConnection.mSdServer.warningBeep();
}
return true;
case R.id.action_test_sms_alarm:
Log.v(TAG, "action_test_sms_alarm");
if (mBound) {
mSdServer.sendSMSAlarm();
if (mConnection.mBound) {
mConnection.mSdServer.sendSMSAlarm();
}
return true;
case R.id.action_settings:
@@ -236,93 +236,19 @@ public class MainActivity extends Activity {
TextView tv;
tv = (TextView) findViewById(R.id.versionTv);
String versionName = "unknown";
// From http://stackoverflow.com/questions/4471025/
// how-can-you-get-the-manifest-version-number-
// from-the-apps-layout-xml-variable
final PackageManager packageManager = getPackageManager();
if (packageManager != null) {
try {
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
versionName = packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
Log.v(TAG, "failed to find versionName");
versionName = null;
}
}
String versionName = mUtil.getAppVersionName();
tv.setText("OpenSeizureDetector Server Version " + versionName);
if (!mUtil.isServerRunning()) {
Log.v(TAG, "Server not Running - Starting Server");
startServer();
} else {
Log.v(TAG, "Server Already Running OK");
}
// and bind to it so we can see its data
bindToServer();
mUtil.bindToServer(this, mConnection);
}
@Override
protected void onStop() {
super.onStop();
unbindFromServer();
mUtil.unbindFromServer(this,mConnection);
}
/**
* Defines callbacks for service binding, passed to bindService()
*/
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
SdServer.SdBinder binder = (SdServer.SdBinder) service;
mSdServer = binder.getService();
mBound = true;
if (mSdServer != null) {
Log.v(TAG, "onServiceConnected() - Asking server to update its settings");
mSdServer.updatePrefs();
} else {
Log.v(TAG, "onServiceConnected() - mSdServer is null - this is wrong!");
}
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
Log.v(TAG, "onServiceDisonnected()");
mBound = false;
}
};
/**
* bind to an already running server.
*/
private void bindToServer() {
Log.v(TAG, "bindToServer() - binding to SdServer");
Intent intent = new Intent(this, SdServer.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
/**
* unbind from server
*/
private void unbindFromServer() {
// unbind this activity from the service if it is bound.
if (mBound) {
Log.v(TAG, "unbindFromServer() - unbinding");
try {
unbindService(mConnection);
mBound = false;
} catch (Exception ex) {
Log.e(TAG, "unbindFromServer() - error unbinding service - " + ex.toString());
}
} else {
Log.v(TAG, "unbindFromServer() - not bound to server - ignoring");
}
}
private void startServer() {
mUtil.startServer();
@@ -351,38 +277,6 @@ public class MainActivity extends Activity {
}
/**
* get the ip address of the phone.
* Based on http://stackoverflow.com/questions/11015912/how-do-i-get-ip-address-in-ipv4-format
*/
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
//Log.v(TAG,"ip1--:" + inetAddress);
//Log.v(TAG,"ip2--:" + inetAddress.getHostAddress());
// for getting IPV4 format
if (!inetAddress.isLoopbackAddress()
&& InetAddressUtils.isIPv4Address(
inetAddress.getHostAddress())) {
String ip = inetAddress.getHostAddress().toString();
//Log.v(TAG,"ip---::" + ip);
return ip;
}
}
}
} catch (Exception ex) {
Log.e("IP Address", ex.toString());
}
return null;
}
/*
* updateServerStatus - called by the uiTimer timer periodically.
@@ -405,7 +299,7 @@ public class MainActivity extends Activity {
tv.setBackgroundColor(okColour);
tv = (TextView) findViewById(R.id.textView2);
tv.setText("Access Server at http://"
+ getLocalIpAddress()
+ mUtil.getLocalIpAddress()
+ ":8080");
tv.setBackgroundColor(okColour);
} else {
@@ -415,33 +309,33 @@ public class MainActivity extends Activity {
try {
if (mBound) {
if (mConnection.mBound) {
tv = (TextView) findViewById(R.id.alarmTv);
if ((mSdServer.mSdData.alarmState == 0)
&& !mSdServer.mSdData.alarmStanding
&& !mSdServer.mSdData.fallAlarmStanding) {
if ((mConnection.mSdServer.mSdData.alarmState == 0)
&& !mConnection.mSdServer.mSdData.alarmStanding
&& !mConnection.mSdServer.mSdData.fallAlarmStanding) {
tv.setText("OK");
tv.setBackgroundColor(okColour);
}
if ((mSdServer.mSdData.alarmState == 1)
&& !mSdServer.mSdData.alarmStanding
&& !mSdServer.mSdData.fallAlarmStanding) {
if ((mConnection.mSdServer.mSdData.alarmState == 1)
&& !mConnection.mSdServer.mSdData.alarmStanding
&& !mConnection.mSdServer.mSdData.fallAlarmStanding) {
tv.setText("WARNING");
tv.setBackgroundColor(warnColour);
}
if (mSdServer.mSdData.alarmStanding) {
if (mConnection.mSdServer.mSdData.alarmStanding) {
tv.setText("**ALARM**");
tv.setBackgroundColor(alarmColour);
}
if (mSdServer.mSdData.fallAlarmStanding) {
if (mConnection.mSdServer.mSdData.fallAlarmStanding) {
tv.setText("**FALL**");
tv.setBackgroundColor(alarmColour);
}
tv = (TextView) findViewById(R.id.pebTimeTv);
tv.setText(mSdServer.mSdData.dataTime.format("%H:%M:%S"));
tv.setText(mConnection.mSdServer.mSdData.dataTime.format("%H:%M:%S"));
// Pebble Connected Phrase
tv = (TextView) findViewById(R.id.pebbleTv);
if (mSdServer.mSdData.pebbleConnected) {
if (mConnection.mSdServer.mSdData.pebbleConnected) {
tv.setText("Pebble Watch Connected OK");
tv.setBackgroundColor(okColour);
} else {
@@ -449,7 +343,7 @@ public class MainActivity extends Activity {
tv.setBackgroundColor(alarmColour);
}
tv = (TextView) findViewById(R.id.appTv);
if (mSdServer.mSdData.pebbleAppRunning) {
if (mConnection.mSdServer.mSdData.pebbleAppRunning) {
tv.setText("Pebble App OK");
tv.setBackgroundColor(okColour);
} else {
@@ -457,19 +351,19 @@ public class MainActivity extends Activity {
tv.setBackgroundColor(alarmColour);
}
tv = (TextView) findViewById(R.id.battTv);
tv.setText("Pebble Battery = " + String.valueOf(mSdServer.mSdData.batteryPc) + "%");
if (mSdServer.mSdData.batteryPc <= 20)
tv.setText("Pebble Battery = " + String.valueOf(mConnection.mSdServer.mSdData.batteryPc) + "%");
if (mConnection.mSdServer.mSdData.batteryPc <= 20)
tv.setBackgroundColor(alarmColour);
if (mSdServer.mSdData.batteryPc > 20)
if (mConnection.mSdServer.mSdData.batteryPc > 20)
tv.setBackgroundColor(warnColour);
if (mSdServer.mSdData.batteryPc >= 40)
if (mConnection.mSdServer.mSdData.batteryPc >= 40)
tv.setBackgroundColor(okColour);
tv = (TextView) findViewById(R.id.debugTv);
String specStr = "";
for (int i = 0; i < 10; i++)
specStr = specStr
+ mSdServer.mSdData.simpleSpec[i]
+ mConnection.mSdServer.mSdData.simpleSpec[i]
+ ", ";
tv.setText("Spec = " + specStr);
} else {
@@ -493,8 +387,8 @@ public class MainActivity extends Activity {
// Y Values
ArrayList<Entry> yVals = new ArrayList<Entry>();
for (int i = 0; i < 10; i++) {
if (mSdServer != null)
yVals.add(new Entry(mSdServer.mSdData.simpleSpec[i], i));
if (mConnection.mSdServer != null)
yVals.add(new Entry(mConnection.mSdServer.mSdData.simpleSpec[i], i));
else
yVals.add(new Entry(i, i));
}
@@ -524,33 +418,11 @@ public class MainActivity extends Activity {
super.onResume();
}
//public void updateUi() {
// String statusPhrase;
// String alarmPhrase;
// String viewText = "Unknown";
//}
private String getAppVersionName() {
String versionName = "unknown";
// From http://stackoverflow.com/questions/4471025/
// how-can-you-get-the-manifest-version-number-
// from-the-apps-layout-xml-variable
final PackageManager packageManager = getPackageManager();
if (packageManager != null) {
try {
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
versionName = packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
Log.v(TAG, "failed to find versionName");
versionName = null;
}
}
return versionName;
}
private void showAbout() {
View aboutView = getLayoutInflater().inflate(R.layout.about_layout, null, false);
String versionName = getAppVersionName();
String versionName = mUtil.getAppVersionName();
Log.v(TAG, "showAbout() - version name = " + versionName);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.icon_24x24);

View File

@@ -30,11 +30,19 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.IBinder;
import android.util.Log;
import android.view.MenuItem;
import org.apache.http.conn.util.InetAddressUtils;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
/**
* OsdUtil - OpenSeizureDetector Utilities
* Deals with starting and stopping the background service and binding to it to receive data.
@@ -119,6 +127,55 @@ public class OsdUtil {
}
}
public String getAppVersionName() {
String versionName = "unknown";
// From http://stackoverflow.com/questions/4471025/
// how-can-you-get-the-manifest-version-number-
// from-the-apps-layout-xml-variable
final PackageManager packageManager = mContext.getPackageManager();
if (packageManager != null) {
try {
PackageInfo packageInfo = packageManager.getPackageInfo(mContext.getPackageName(), 0);
versionName = packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
Log.v(TAG, "failed to find versionName");
versionName = null;
}
}
return versionName;
}
/**
* get the ip address of the phone.
* Based on http://stackoverflow.com/questions/11015912/how-do-i-get-ip-address-in-ipv4-format
*/
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
//Log.v(TAG,"ip1--:" + inetAddress);
//Log.v(TAG,"ip2--:" + inetAddress.getHostAddress());
// for getting IPV4 format
if (!inetAddress.isLoopbackAddress()
&& InetAddressUtils.isIPv4Address(
inetAddress.getHostAddress())) {
String ip = inetAddress.getHostAddress().toString();
//Log.v(TAG,"ip---::" + ip);
return ip;
}
}
}
} catch (Exception ex) {
Log.e("IP Address", ex.toString());
}
return null;
}

View File

@@ -94,4 +94,35 @@ public class SdServiceConnection implements ServiceConnection {
return false;
}
/**
* Check if the pebble watch is connected to the server device via bluetooth.
* @return true if watch connected.
*/
public boolean pebbleConnected() {
if (mSdServer!=null) {
if (mSdServer.mSdData!=null) {
if (mSdServer.mSdData.pebbleConnected) {
return true;
}
}
}
return false;
}
/**
* Check if the openseizuredetector pebble watch app is running..
* @return true if watch app running.
*/
public boolean pebbleAppRunning() {
if (mSdServer!=null) {
if (mSdServer.mSdData!=null) {
if (mSdServer.mSdData.pebbleAppRunning) {
return true;
}
}
}
return false;
}
}

View File

@@ -26,6 +26,9 @@ package uk.org.openseizuredetector;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
@@ -44,6 +47,10 @@ import java.util.TimerTask;
*/
public class StartupActivity extends Activity {
private String TAG = "StartupActivity";
private int okColour = Color.BLUE;
private int warnColour = Color.MAGENTA;
private int alarmColour = Color.RED;
private OsdUtil mUtil;
private Timer mUiTimer;
private SdServiceConnection mConnection;
@@ -73,6 +80,22 @@ public class StartupActivity extends Activity {
}
});
b = (Button)findViewById(R.id.pebbleButton);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.v(TAG, "pebble button clicked");
try {
PackageManager pm = getPackageManager();
Intent pebbleAppIntent = pm.getLaunchIntentForPackage("com.getpebble.android");
startActivity(pebbleAppIntent);
} catch (Exception ex) {
Log.v(TAG, "exception starting pebble App " + ex.toString());
}
}
});
}
@Override
@@ -126,12 +149,12 @@ public class StartupActivity extends Activity {
pb = (ProgressBar) findViewById(R.id.progressBar1);
if (mUtil.isServerRunning()) {
tv.setText("Background Service Running OK");
pb.setIndeterminate(false);
pb.setMax(100);
pb.setProgress(100);
pb.setVisibility(0);
tv.setBackgroundColor(okColour);
pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server));
pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server));
} else {
tv.setText("Waiting for Background Service...");
tv.setBackgroundColor(alarmColour);
pb.setIndeterminate(true);
allOk = false;
}
@@ -141,42 +164,74 @@ public class StartupActivity extends Activity {
pb = (ProgressBar) findViewById(R.id.progressBar2);
if (mConnection.mBound) {
tv.setText("Bound to Service OK");
pb.setIndeterminate(false);
pb.setMax(100);
pb.setProgress(100);
pb.setVisibility(0);
tv.setBackgroundColor(okColour);
pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server));
pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server));
} else {
tv.setText("Binding to Background Service...");
tv.setBackgroundColor(alarmColour);
pb.setIndeterminate(true);
allOk = false;
}
// Do we have seizure detector data?
// Is Pebble Watch Connected?
tv = (TextView) findViewById(R.id.textItem3);
pb = (ProgressBar) findViewById(R.id.progressBar3);
if (mConnection.hasSdData()) {
tv.setText("Seizure Detector Data Received OK");
pb.setIndeterminate(false);
pb.setMax(100);
pb.setProgress(100);
pb.setVisibility(0);
if (mConnection.pebbleConnected()) {
tv.setText("Pebble Watch Connected OK");
tv.setBackgroundColor(okColour);
pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server));
pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server));
} else {
tv.setText("Waiting for Seizure Detector Data...");
tv.setText("Waiting to Connect to Pebble Watch.....");
tv.setBackgroundColor(alarmColour);
pb.setIndeterminate(true);
allOk = false;
}
// Do we have seizure detector settings yet?
// Is Pebble Watch App Running?
tv = (TextView) findViewById(R.id.textItem4);
pb = (ProgressBar) findViewById(R.id.progressBar4);
if (mConnection.pebbleAppRunning()) {
tv.setText("Watch App Running OK");
tv.setBackgroundColor(okColour);
pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server));
pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server));
} else {
tv.setText("Waiting for Watch App to Start.....");
tv.setBackgroundColor(alarmColour);
pb.setIndeterminate(true);
allOk = false;
}
// Do we have seizure detector data?
tv = (TextView) findViewById(R.id.textItem5);
pb = (ProgressBar) findViewById(R.id.progressBar5);
if (mConnection.hasSdData()) {
tv.setText("Seizure Detector Data Received OK");
tv.setBackgroundColor(okColour);
pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server));
pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server));
} else {
tv.setText("Waiting for Seizure Detector Data...");
tv.setBackgroundColor(alarmColour);
pb.setIndeterminate(true);
allOk = false;
}
// Do we have seizure detector settings yet?
tv = (TextView) findViewById(R.id.textItem6);
pb = (ProgressBar) findViewById(R.id.progressBar6);
if (mConnection.hasSdSettings()) {
tv.setText("Seizure Detector Settings Received OK");
pb.setIndeterminate(false);
pb.setMax(100);
pb.setProgress(100);
pb.setVisibility(0);
tv.setBackgroundColor(okColour);
pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server));
pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server));
} else {
tv.setText("Waiting for Seizure Detector Settings...");
tv.setBackgroundColor(alarmColour);
pb.setIndeterminate(true);
allOk = false;
}