diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c23fbde..4bcc293 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="30" + android:versionName="2.0.9"> diff --git a/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java b/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java index 266d8d7..cab7da7 100644 --- a/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java +++ b/app/src/main/java/uk/org/openseizuredetector/OsdUtil.java @@ -29,15 +29,33 @@ import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.SharedPreferences; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.FeatureInfo; +import android.content.pm.InstrumentationInfo; import android.content.pm.PackageInfo; +import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; +import android.content.pm.PermissionGroupInfo; +import android.content.pm.PermissionInfo; +import android.content.pm.ProviderInfo; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.content.res.Resources; +import android.content.res.XmlResourceParser; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Environment; import android.os.Handler; import android.os.IBinder; +import android.os.UserHandle; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.text.format.Time; import android.util.Log; import android.view.MenuItem; @@ -345,5 +363,31 @@ public class OsdUtil { return file; } + public String getPreferredPebbleAppPackageName() { + // returns the package name of the preferred Android Pebble App. + return "com.getpebble.android.basalt"; + } + + public String isPebbleAppInstalled() { + // Returns the package name of the installed pebble App or null if it is not installed + String pkgName; + pkgName = "com.getpebble.android"; + if (isPackageInstalled(pkgName)) return pkgName; + pkgName = "com.getpebble.android.basalt"; + if (isPackageInstalled(pkgName)) return pkgName; + return null; + } + + private boolean isPackageInstalled(String packagename) { + PackageManager pm = mContext.getPackageManager(); + try { + pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES); + //showToast("found "+packagename); + return true; + } catch (PackageManager.NameNotFoundException e) { + //showToast(packagename + " not found"); + return false; + } + } } diff --git a/app/src/main/java/uk/org/openseizuredetector/StartupActivity.java b/app/src/main/java/uk/org/openseizuredetector/StartupActivity.java index dfa64e9..edc0f49 100644 --- a/app/src/main/java/uk/org/openseizuredetector/StartupActivity.java +++ b/app/src/main/java/uk/org/openseizuredetector/StartupActivity.java @@ -30,6 +30,7 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.graphics.Color; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; @@ -63,7 +64,8 @@ public class StartupActivity extends Activity { private SdServiceConnection mConnection; private boolean mStartedMainActivity = false; private Handler mHandler = new Handler(); // used to update ui from mUiTimer - + private boolean mUsingPebbleDataSource = true; + private String mPebbleAppPackageName = null; @Override protected void onCreate(Bundle savedInstanceState) { @@ -92,7 +94,28 @@ public class StartupActivity extends Activity { PreferenceManager.setDefaultValues(this, R.xml.general_prefs, true); PreferenceManager.setDefaultValues(this, R.xml.network_datasource_prefs, true); - Button b = (Button)findViewById(R.id.settingsButton); + + Button b; + b = (Button)findViewById(R.id.installPebbleAppButton); + b.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Log.v(TAG, "install Pebble app button clicked"); + try { + mUtil.writeToSysLogFile("Installing Pebble App"); + Intent intent = new Intent(Intent.ACTION_VIEW) + .setData(Uri.parse("market://details?id="+mUtil.getPreferredPebbleAppPackageName())); + startActivity(intent); + } catch (Exception ex) { + Log.v(TAG, "exception starting play store activity " + ex.toString()); + mUtil.writeToSysLogFile("ERROR Starting play store Activity"); + mUtil.showToast("Error Starting Google Play Store to Install App - is Play Store instaled?"); + } + + } + }); + + b = (Button)findViewById(R.id.settingsButton); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -137,22 +160,29 @@ public class StartupActivity extends Activity { protected void onStart() { super.onStart(); mUtil.writeToSysLogFile("StartupActivity.onStart()"); + TextView tv; + String versionName = mUtil.getAppVersionName(); + tv = (TextView)findViewById(R.id.appNameTv); + tv.setText("OpenSeizureDetector V"+versionName); // Display the DataSource name SharedPreferences SP = PreferenceManager .getDefaultSharedPreferences(getBaseContext());; String dataSourceName = SP.getString("DataSource","Pebble"); - TextView tv = (TextView)findViewById(R.id.dataSourceTextView); + tv = (TextView)findViewById(R.id.dataSourceTextView); tv.setText("DataSource = "+dataSourceName); // disable pebble configuration buttons if we have not selected the pebble datasource if (!dataSourceName.equals("Pebble")) { Log.v(TAG, "Not Pebble Datasource - deactivating Pebble Button"); + mUsingPebbleDataSource = false; Button b = (Button) findViewById(R.id.pebbleButton); b.setEnabled(false); b = (Button) findViewById(R.id.installOsdAppButton); b.setEnabled(false); + } else { + mUsingPebbleDataSource = true; } if (mUtil.isServerRunning()) { @@ -246,13 +276,14 @@ public class StartupActivity extends Activity { pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server)); pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server)); } else { - tv.setText("Waiting to Connect to Pebble Watch....."); + tv.setText("Watch Not Connected"); tv.setBackgroundColor(alarmColour); tv.setTextColor(alarmTextColour); pb.setIndeterminate(true); allOk = false; } + /* // Is Pebble Watch App Running? tv = (TextView) findViewById(R.id.textItem4); pb = (ProgressBar) findViewById(R.id.progressBar4); @@ -260,15 +291,16 @@ public class StartupActivity extends Activity { tv.setText("Watch App Running OK"); tv.setBackgroundColor(okColour); tv.setTextColor(okTextColour); - pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server)); + //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.setText("Watch App Not Running"); tv.setBackgroundColor(alarmColour); tv.setTextColor(alarmTextColour); pb.setIndeterminate(true); allOk = false; } + */ // Do we have seizure detector data? @@ -306,6 +338,39 @@ public class StartupActivity extends Activity { allOk = false; } + // Is Pebble Watch App Installed? + tv = (TextView) findViewById(R.id.textItem7); + pb = (ProgressBar) findViewById(R.id.progressBar7); + boolean pebbleAndroidAppInstalled; + mPebbleAppPackageName = mUtil.isPebbleAppInstalled(); + if (mPebbleAppPackageName!=null) + pebbleAndroidAppInstalled = true; + else + pebbleAndroidAppInstalled = false; + + if (mUsingPebbleDataSource) { + if (pebbleAndroidAppInstalled) { + tv.setText("Pebble Android App Installed"); + tv.setBackgroundColor(okColour); + tv.setTextColor(okTextColour); + pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server)); + pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server)); + } else { + tv.setText("Pebble App NOT Installed: "); + tv.setBackgroundColor(alarmColour); + tv.setTextColor(alarmTextColour); + pb.setIndeterminate(true); + allOk = false; + } + } else { + tv.setText("Pebble Android App Not Required"); + tv.setBackgroundColor(okColour); + tv.setTextColor(okTextColour); + pb.setIndeterminateDrawable(getResources().getDrawable(R.drawable.start_server)); + pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server)); + } + + // If all the parameters are ok, close this activity and open the main // user interface activity instead. diff --git a/app/src/main/res/layout/startup_activity.xml b/app/src/main/res/layout/startup_activity.xml index 2ac7bad..d2fab44 100644 --- a/app/src/main/res/layout/startup_activity.xml +++ b/app/src/main/res/layout/startup_activity.xml @@ -22,7 +22,7 @@ android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="OpenSeizureDetector" - android:id="@+id/textView" + android:id="@+id/appNameTv" android:layout_gravity="center_horizontal" /> + +