diff --git a/samples/notifications/default.properties b/samples/notifications/default.properties
index 7027a19..fc667cd 100644
--- a/samples/notifications/default.properties
+++ b/samples/notifications/default.properties
@@ -9,4 +9,4 @@
# Project target.
target=android-5
-android.library.reference.1=../cicada/cicadalib
+android.library.reference.1=../../cicadalib
diff --git a/samples/phonestatus/.classpath b/samples/phonestatus/.classpath
new file mode 100644
index 0000000..7011827
--- /dev/null
+++ b/samples/phonestatus/.classpath
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/samples/phonestatus/.project b/samples/phonestatus/.project
new file mode 100644
index 0000000..36367ee
--- /dev/null
+++ b/samples/phonestatus/.project
@@ -0,0 +1,45 @@
+
+
+ PhoneStatus
+
+
+
+
+
+ com.android.ide.eclipse.adt.ResourceManagerBuilder
+
+
+
+
+ com.android.ide.eclipse.adt.PreCompilerBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ com.android.ide.eclipse.adt.ApkBuilder
+
+
+
+
+
+ com.android.ide.eclipse.adt.AndroidNature
+ org.eclipse.jdt.core.javanature
+
+
+
+ ApolloLib_src
+ 2
+ _android_ApolloLib_c6286f16/src
+
+
+ CicadaLib_src
+ 2
+ _android_CicadaLib_8981e3e4/src
+
+
+
diff --git a/samples/phonestatus/AndroidManifest.xml b/samples/phonestatus/AndroidManifest.xml
new file mode 100644
index 0000000..f25421e
--- /dev/null
+++ b/samples/phonestatus/AndroidManifest.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/phonestatus/default.properties b/samples/phonestatus/default.properties
new file mode 100644
index 0000000..c33f3d2
--- /dev/null
+++ b/samples/phonestatus/default.properties
@@ -0,0 +1,12 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "build.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-8
+android.library.reference.1=../../cicadalib
diff --git a/samples/phonestatus/proguard.cfg b/samples/phonestatus/proguard.cfg
new file mode 100644
index 0000000..b1cdf17
--- /dev/null
+++ b/samples/phonestatus/proguard.cfg
@@ -0,0 +1,40 @@
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontpreverify
+-verbose
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class com.android.vending.licensing.ILicensingService
+
+-keepclasseswithmembernames class * {
+ native ;
+}
+
+-keepclasseswithmembers class * {
+ public (android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembers class * {
+ public (android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclassmembers class * extends android.app.Activity {
+ public void *(android.view.View);
+}
+
+-keepclassmembers enum * {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+-keep class * implements android.os.Parcelable {
+ public static final android.os.Parcelable$Creator *;
+}
diff --git a/samples/phonestatus/res/drawable-hdpi/icon.png b/samples/phonestatus/res/drawable-hdpi/icon.png
new file mode 100644
index 0000000..8074c4c
Binary files /dev/null and b/samples/phonestatus/res/drawable-hdpi/icon.png differ
diff --git a/samples/phonestatus/res/drawable-ldpi/icon.png b/samples/phonestatus/res/drawable-ldpi/icon.png
new file mode 100644
index 0000000..1095584
Binary files /dev/null and b/samples/phonestatus/res/drawable-ldpi/icon.png differ
diff --git a/samples/phonestatus/res/drawable-mdpi/icon.png b/samples/phonestatus/res/drawable-mdpi/icon.png
new file mode 100644
index 0000000..a07c69f
Binary files /dev/null and b/samples/phonestatus/res/drawable-mdpi/icon.png differ
diff --git a/samples/phonestatus/res/values/strings.xml b/samples/phonestatus/res/values/strings.xml
new file mode 100644
index 0000000..01f230e
--- /dev/null
+++ b/samples/phonestatus/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Phone Status
+
diff --git a/samples/phonestatus/src/com/hydraproductions/cicada/phonestatus/PhoneStatus.java b/samples/phonestatus/src/com/hydraproductions/cicada/phonestatus/PhoneStatus.java
new file mode 100644
index 0000000..798ba9d
--- /dev/null
+++ b/samples/phonestatus/src/com/hydraproductions/cicada/phonestatus/PhoneStatus.java
@@ -0,0 +1,102 @@
+package com.hydraproductions.cicada.phonestatus;
+
+import org.cicadasong.cicadalib.CicadaApp;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Typeface;
+
+import android.telephony.PhoneStateListener;
+import android.telephony.TelephonyManager;
+import android.telephony.SignalStrength; // API Level 7+
+import android.util.Log;
+
+/**
+ * @See http://developer.android.com/reference/android/telephony/SignalStrength.html#getGsmSignalStrength%28%29
+ * @See 3GPP TS 27.007 v6.3.0 (2003-06) - Section 8.5 - Signal Quality +CSQ
+ * @author Dominic Clifton
+ */
+public class PhoneStatus extends CicadaApp {
+
+ public static final String TAG = PhoneStatus.class.getSimpleName();
+
+ private Paint paint;
+ private TelephonyManager telephonyManager;
+ private StatusPhoneStateListener phoneStateListener;
+ float signalStrengthPercentage;
+
+ final static short GSM_STRENGTH_MIN = 0;
+ final static short GSM_STRENGTH_MAX = 31;
+ final static short GSM_STRENGTH_UNKNOWN = 99;
+
+ protected float calculateSignalStrengthPercentage(SignalStrength signalStrength) {
+ // TODO add CDMA signal strength calculations
+ int gsmSignalStrength = signalStrength.getGsmSignalStrength();
+ Log.i(TAG, String.format("GSM Signal Strength: %d", gsmSignalStrength));
+ if (gsmSignalStrength == GSM_STRENGTH_MAX) {
+ return 0;
+ }
+ return (float)(gsmSignalStrength * 100) / GSM_STRENGTH_UNKNOWN;
+ }
+
+ protected void updateSignalStrength(SignalStrength signalStrength) {
+ signalStrengthPercentage = calculateSignalStrengthPercentage(signalStrength);
+
+ if (!PhoneStatus.this.isActive()) {
+ return;
+ }
+ invalidate();
+ }
+
+
+ private class StatusPhoneStateListener extends PhoneStateListener {
+ @Override
+ public void onSignalStrengthsChanged(SignalStrength signalStrength) {
+ updateSignalStrength(signalStrength);
+ }
+ };
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ phoneStateListener = new StatusPhoneStateListener();
+ telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
+ }
+
+ @Override
+ public String getAppName() {
+ return getString(R.string.app_name);
+ }
+
+ @Override
+ protected void onResume() {
+ paint = new Paint();
+ paint.setTextAlign(Paint.Align.CENTER);
+ paint.setTypeface(Typeface.DEFAULT_BOLD);
+ paint.setAntiAlias(false);
+ paint.setTextSize(16);
+
+ telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
+
+ invalidate();
+ }
+
+ @Override
+ protected void onPause() {
+ telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ int x = canvas.getWidth() / 2;
+ int y = (int) (canvas.getHeight() - paint.ascent()) / 2;
+ String readout = String.format("%3.2f%%", signalStrengthPercentage);
+ canvas.drawText(readout, x, y, paint);
+ }
+
+ @Override
+ protected void onButtonPress(WatchButton button) {
+ // TODO Auto-generated method stub
+ }
+}
diff --git a/samples/stopwatch/AndroidManifest.xml b/samples/stopwatch/AndroidManifest.xml
index bb18ddd..b054cf1 100644
--- a/samples/stopwatch/AndroidManifest.xml
+++ b/samples/stopwatch/AndroidManifest.xml
@@ -1,6 +1,6 @@
diff --git a/samples/stopwatch/res/values/strings.xml b/samples/stopwatch/res/values/strings.xml
index 7b94ef3..9962d36 100644
--- a/samples/stopwatch/res/values/strings.xml
+++ b/samples/stopwatch/res/values/strings.xml
@@ -1,4 +1,4 @@
- StopWatch
+ Stopwatch
diff --git a/samples/stopwatch/src/com/hydraproductions/cicada/StopWatch.java b/samples/stopwatch/src/com/hydraproductions/cicada/stopwatch/StopWatch.java
similarity index 94%
rename from samples/stopwatch/src/com/hydraproductions/cicada/StopWatch.java
rename to samples/stopwatch/src/com/hydraproductions/cicada/stopwatch/StopWatch.java
index d464e99..12a984d 100644
--- a/samples/stopwatch/src/com/hydraproductions/cicada/StopWatch.java
+++ b/samples/stopwatch/src/com/hydraproductions/cicada/stopwatch/StopWatch.java
@@ -1,4 +1,4 @@
-package com.hydraproductions.cicada;
+package com.hydraproductions.cicada.stopwatch;
/**
* Stopwatch example