Commit 76dea9de220898110f20a03e2468d17d7b54916f

Authored by Imanol-Mikel Barba Sabariego
1 parent 5775e070

--no commit message

Blinker/.classpath deleted
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<classpath>
3   - <classpathentry kind="src" path="src"/>
4   - <classpathentry kind="src" path="gen"/>
5   - <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
6   - <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
7   - <classpathentry kind="lib" path="libs/EmmocoFramework.jar"/>
8   - <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
9   - <classpathentry kind="output" path="bin/classes"/>
10   -</classpath>
Blinker/.project deleted
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<projectDescription>
3   - <name>Blinker</name>
4   - <comment></comment>
5   - <projects>
6   - </projects>
7   - <buildSpec>
8   - <buildCommand>
9   - <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
10   - <arguments>
11   - </arguments>
12   - </buildCommand>
13   - <buildCommand>
14   - <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
15   - <arguments>
16   - </arguments>
17   - </buildCommand>
18   - <buildCommand>
19   - <name>org.eclipse.jdt.core.javabuilder</name>
20   - <arguments>
21   - </arguments>
22   - </buildCommand>
23   - <buildCommand>
24   - <name>com.android.ide.eclipse.adt.ApkBuilder</name>
25   - <arguments>
26   - </arguments>
27   - </buildCommand>
28   - </buildSpec>
29   - <natures>
30   - <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
31   - <nature>org.eclipse.jdt.core.javanature</nature>
32   - </natures>
33   -</projectDescription>
Blinker/.settings/org.eclipse.jdt.core.prefs deleted
1   -eclipse.preferences.version=1
2   -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
3   -org.eclipse.jdt.core.compiler.compliance=1.6
4   -org.eclipse.jdt.core.compiler.source=1.6
Blinker/AndroidManifest.xml deleted
1   -<?xml version="1.0" encoding="utf-8"?>
2   -<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3   - package="com.emmoco.example.blinker"
4   - android:versionCode="1"
5   - android:versionName="0.8">
6   - <uses-sdk android:minSdkVersion="8"
7   - android:targetSdkVersion="8"
8   - android:maxSdkVersion="8" />
9   -
10   - <supports-screens android:largeScreens="false" android:xlargeScreens="false" />
11   -
12   -
13   - <!-- Application -->
14   - <application
15   - android:label="@string/app_name"
16   - android:debuggable="false"
17   - android:icon="@drawable/icon"
18   - android:theme="@style/AppTheme">
19   -
20   - <activity android:name="com.emmoco.example.blinker.MainActivity"
21   - android:screenOrientation="portrait"
22   - android:alwaysRetainTaskState="true"
23   - android:launchMode="singleTop"
24   - android:clearTaskOnLaunch="false"
25   - android:label="@string/app_name"
26   - android:configChanges="keyboardHidden|orientation">
27   - <intent-filter>
28   - <action android:name="android.intent.action.MAIN" />
29   - <category android:name="android.intent.category.LAUNCHER" />
30   - </intent-filter>
31   - </activity>
32   - <activity android:name="com.emmoco.example.blinker.SetDeviceActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation"> </activity>
33   - </application>
34   - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
35   - <uses-permission android:name="android.permission.BLUETOOTH" />
36   - <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
37   - <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
38   - <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
39   - <uses-permission android:name="android.permission.INTERNET" />
40   -</manifest>
Blinker/ant.properties deleted
1   -# This file is used to override default values used by the Ant build system.
2   -#
3   -# This file must be checked in Version Control Systems, as it is
4   -# integral to the build system of your project.
5   -
6   -# This file is only used by the Ant script.
7   -
8   -# You can use this to override default values such as
9   -# 'source.dir' for the location of your java source folder and
10   -# 'out.dir' for the location of your output folder.
11   -
12   -# You can also use it define how the release builds are signed by declaring
13   -# the following properties:
14   -# 'key.store' for the location of your keystore and
15   -# 'key.alias' for the name of the key to use.
16   -# The password will be asked during the build when you use the 'release' target.
17   -
Blinker/bin/AndroidManifest.xml deleted
1   -<?xml version="1.0" encoding="utf-8"?>
2   -<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3   - package="com.emmoco.example.blinker"
4   - android:versionCode="1"
5   - android:versionName="0.8">
6   - <uses-sdk android:minSdkVersion="8"
7   - android:targetSdkVersion="8"
8   - android:maxSdkVersion="8" />
9   -
10   - <supports-screens android:largeScreens="false" android:xlargeScreens="false" />
11   -
12   -
13   - <!-- Application -->
14   - <application
15   - android:label="@string/app_name"
16   - android:debuggable="false"
17   - android:icon="@drawable/icon"
18   - android:theme="@style/AppTheme">
19   -
20   - <activity android:name="com.emmoco.example.blinker.MainActivity"
21   - android:screenOrientation="portrait"
22   - android:alwaysRetainTaskState="true"
23   - android:launchMode="singleTop"
24   - android:clearTaskOnLaunch="false"
25   - android:label="@string/app_name"
26   - android:configChanges="keyboardHidden|orientation">
27   - <intent-filter>
28   - <action android:name="android.intent.action.MAIN" />
29   - <category android:name="android.intent.category.LAUNCHER" />
30   - </intent-filter>
31   - </activity>
32   - <activity android:name="com.emmoco.example.blinker.SetDeviceActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation"> </activity>
33   - </application>
34   - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
35   - <uses-permission android:name="android.permission.BLUETOOTH" />
36   - <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
37   - <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
38   - <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
39   - <uses-permission android:name="android.permission.INTERNET" />
40   -</manifest>
Blinker/build.xml deleted
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<project name="Blinker" default="help">
3   -
4   - <!-- The local.properties file is created and updated by the 'android' tool.
5   - It contains the path to the SDK. It should *NOT* be checked into
6   - Version Control Systems. -->
7   - <loadproperties srcFile="local.properties" />
8   -
9   - <!-- The ant.properties file can be created by you. It is only edited by the
10   - 'android' tool to add properties to it.
11   - This is the place to change some Ant specific build properties.
12   - Here are some properties you may want to change/update:
13   -
14   - source.dir
15   - The name of the source directory. Default is 'src'.
16   - out.dir
17   - The name of the output directory. Default is 'bin'.
18   -
19   - For other overridable properties, look at the beginning of the rules
20   - files in the SDK, at tools/ant/build.xml
21   -
22   - Properties related to the SDK location or the project target should
23   - be updated using the 'android' tool with the 'update' action.
24   -
25   - This file is an integral part of the build system for your
26   - application and should be checked into Version Control Systems.
27   -
28   - -->
29   - <property file="ant.properties" />
30   -
31   - <!-- The project.properties file is created and updated by the 'android'
32   - tool, as well as ADT.
33   -
34   - This contains project specific properties such as project target, and library
35   - dependencies. Lower level build properties are stored in ant.properties
36   - (or in .classpath for Eclipse projects).
37   -
38   - This file is an integral part of the build system for your
39   - application and should be checked into Version Control Systems. -->
40   - <loadproperties srcFile="project.properties" />
41   -
42   - <!-- quick check on sdk.dir -->
43   - <fail
44   - message="sdk.dir is missing. Make sure to generate local.properties using 'android update project'"
45   - unless="sdk.dir"
46   - />
47   -
48   -
49   -<!-- extension targets. Uncomment the ones where you want to do custom work
50   - in between standard targets -->
51   -<!--
52   - <target name="-pre-build">
53   - </target>
54   - <target name="-pre-compile">
55   - </target>
56   -
57   - /* This is typically used for code obfuscation.
58   - Compiled code location: ${out.classes.absolute.dir}
59   - If this is not done in place, override ${out.dex.input.absolute.dir} */
60   - <target name="-post-compile">
61   - </target>
62   --->
63   -
64   - <!-- Import the actual build file.
65   -
66   - To customize existing targets, there are two options:
67   - - Customize only one target:
68   - - copy/paste the target into this file, *before* the
69   - <import> task.
70   - - customize it to your needs.
71   - - Customize the whole content of build.xml
72   - - copy/paste the content of the rules files (minus the top node)
73   - into this file, replacing the <import> task.
74   - - customize to your needs.
75   -
76   - ***********************
77   - ****** IMPORTANT ******
78   - ***********************
79   - In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
80   - in order to avoid having your file be overridden by tools such as "android update project"
81   - -->
82   - <!-- version-tag: custom -->
83   - <import file="../../../tools/Android/version.xml" optional="true"/>
84   - <import file="${sdk.dir}/tools/ant/build.xml" />
85   -
86   -</project>
Blinker/default.properties deleted
1   -# This file is automatically generated by Android Tools.
2   -# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3   -#
4   -# This file must be checked in Version Control Systems.
5   -#
6   -# To customize properties used by the Ant build system use,
7   -# "build.properties", and override values to adapt the script to your
8   -# project structure.
9   -
10   -# Project target.
11   -target=android-8
Blinker/proguard.cfg deleted
1   --optimizationpasses 5
2   --dontusemixedcaseclassnames
3   --dontskipnonpubliclibraryclasses
4   --dontpreverify
5   --verbose
6   --optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
7   -
8   --keep public class * extends android.app.Activity
9   --keep public class * extends android.app.Application
10   --keep public class * extends android.app.Service
11   --keep public class * extends android.content.BroadcastReceiver
12   --keep public class * extends android.content.ContentProvider
13   --keep public class * extends android.app.backup.BackupAgentHelper
14   --keep public class * extends android.preference.Preference
15   --keep public class com.android.vending.licensing.ILicensingService
16   -
17   --keepclasseswithmembernames class * {
18   - native <methods>;
19   -}
20   -
21   --keepclasseswithmembers class * {
22   - public <init>(android.content.Context, android.util.AttributeSet);
23   -}
24   -
25   --keepclasseswithmembers class * {
26   - public <init>(android.content.Context, android.util.AttributeSet, int);
27   -}
28   -
29   --keepclassmembers class * extends android.app.Activity {
30   - public void *(android.view.View);
31   -}
32   -
33   --keepclassmembers enum * {
34   - public static **[] values();
35   - public static ** valueOf(java.lang.String);
36   -}
37   -
38   --keep class * implements android.os.Parcelable {
39   - public static final android.os.Parcelable$Creator *;
40   -}
Blinker/project.properties deleted
1   -# This file is automatically generated by Android Tools.
2   -# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3   -#
4   -# This file must be checked in Version Control Systems.
5   -#
6   -# To customize properties used by the Ant build system use,
7   -# "ant.properties", and override values to adapt the script to your
8   -# project structure.
9   -
10   -# Project target.
11   -target=android-10
Blinker/res/drawable-hdpi/blinker_connection_connected.png deleted

1.14 KB

Blinker/res/drawable-hdpi/blinker_connection_disconnected.png deleted

1.15 KB

Blinker/res/drawable-hdpi/blinker_light_off.png deleted

14.8 KB

Blinker/res/drawable-hdpi/blinker_light_on.png deleted

13.6 KB

Blinker/res/drawable-hdpi/icon.png deleted

2.06 KB

Blinker/res/drawable-ldpi/icon.png deleted

1.68 KB

Blinker/res/drawable-mdpi/icon.png deleted

2.06 KB

Blinker/res/drawable/connected_indicator.xml deleted
1   -<?xml version="1.0" encoding="utf-8"?>
2   -<selector xmlns:android="http://schemas.android.com/apk/res/android">
3   -
4   - <item android:state_enabled="false" android:drawable="@drawable/blinker_connection_disconnected"/>
5   -
6   - <item android:drawable="@drawable/blinker_connection_connected"/>
7   -
8   -</selector>
9 0 \ No newline at end of file
Blinker/res/drawable/gradient.xml deleted
1   -<?xml version="1.0" encoding="utf-8"?>
2   -
3   -<shape xmlns:android="http://schemas.android.com/apk/res/android"
4   - android:shape="rectangle">
5   - <gradient
6   - android:startColor="#66000000"
7   - android:endColor="#DD000000"
8   - android:angle="270"/>
9   -</shape>
10 0 \ No newline at end of file
Blinker/res/drawable/led.xml deleted
1   -<?xml version="1.0" encoding="utf-8"?>
2   -
3   -<selector xmlns:android="http://schemas.android.com/apk/res/android">
4   - <item
5   - android:state_selected="true"
6   - android:drawable="@drawable/blinker_light_on" />
7   - <item
8   - android:state_selected="false"
9   - android:drawable="@drawable/blinker_light_off" />
10   -</selector>
11   -
12   -
Blinker/res/layout/list_item.xml deleted
1   -<?xml version="1.0" encoding="utf-8"?>
2   -
3   -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
4   - android:layout_width="fill_parent"
5   - android:layout_height="wrap_content">
6   - <TextView
7   - android:id="@+id/item_label"
8   - android:layout_alignParentLeft="true"
9   - android:layout_gravity="left"
10   - android:layout_width="wrap_content"
11   - android:layout_height="fill_parent"
12   - android:layout_centerVertical="true"
13   - android:textSize="20px"
14   - android:text="test"
15   - android:paddingBottom="10dp"
16   - android:paddingTop="10dp"
17   - android:layout_marginLeft="10dp"
18   - android:textColor="@color/labels"
19   - />
20   - <ImageView
21   - android:id="@+id/checkmark"
22   - android:src="@android:drawable/checkbox_on_background"
23   - android:layout_alignParentRight="true"
24   - android:layout_centerVertical="true"
25   - android:layout_width="wrap_content"
26   - android:layout_height="wrap_content"
27   - android:layout_marginRight="10dp"
28   - />
29   -
30   -</RelativeLayout>
31 0 \ No newline at end of file
Blinker/res/layout/main_activity.xml deleted
1   -<?xml version="1.0" encoding="utf-8"?>
2   -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3   - android:layout_width="fill_parent"
4   - android:layout_height="fill_parent"
5   - android:background="@color/background">
6   -
7   -
8   - <!--Connected and disconnected graphic in upper right corner-->
9   - <ImageView
10   - android:contentDescription="connected indicator"
11   - android:id="@+id/connected_indicator"
12   - android:layout_alignParentRight="true"
13   - android:layout_alignParentTop="true"
14   - android:layout_height="wrap_content"
15   - android:layout_width="wrap_content"
16   - android:layout_marginRight="5dp"
17   - android:layout_marginTop="5dp"
18   - android:src="@drawable/connected_indicator"
19   - />
20   -
21   - />
22   -
23   - <!--The LED image-->
24   - <ImageView
25   - android:contentDescription="led image"
26   - android:id="@+id/led_image"
27   - android:layout_marginTop="10dp"
28   - android:layout_marginBottom="45dp"
29   - android:layout_below="@id/connected_indicator"
30   - android:layout_height="wrap_content"
31   - android:layout_width="wrap_content"
32   - android:layout_centerHorizontal="true"
33   - android:src="@drawable/led" />
34   -
35   -
36   -
37   -
38   - <!--The on/off control line-->
39   - <RelativeLayout
40   - android:id="@+id/blink_control"
41   - android:layout_below="@id/led_image"
42   - android:layout_width="fill_parent"
43   - android:layout_height="wrap_content"
44   - android:layout_marginBottom="@dimen/control_bottom">
45   -
46   - <TextView android:layout_height="wrap_content"
47   - android:layout_width="wrap_content"
48   - android:text="@string/label_blink"
49   - android:textColor="@color/labels"
50   - android:textStyle="bold"
51   - android:layout_marginLeft="@dimen/label_left_margin"
52   - android:layout_alignParentLeft="true"
53   - android:layout_centerVertical="true"
54   - />
55   -
56   - <ToggleButton
57   - android:id="@+id/on_off_button"
58   - android:layout_height="wrap_content"
59   - android:layout_width="wrap_content"
60   - android:layout_centerHorizontal="true"
61   - android:layout_centerVertical="true"
62   - android:textOff="@string/toggle_text_off"
63   - android:textOn="@string/toggle_text_on"
64   - android:gravity="center_horizontal"
65   - android:onClick="onToggleOnOff"
66   - />
67   -
68   - <TextView
69   - android:id="@+id/indicator_count"
70   - android:layout_height="wrap_content"
71   - android:layout_width="wrap_content"
72   - android:layout_marginRight="@dimen/label_right_margin"
73   - android:layout_alignParentRight="true"
74   - android:layout_centerVertical="true"
75   - android:text="0"
76   - android:textStyle="bold"
77   - android:textColor="@color/numbers"
78   - />
79   -
80   - </RelativeLayout>
81   -
82   -
83   -
84   - <!--The Delay Slider Control and Display Line-->
85   - <RelativeLayout
86   - android:id="@+id/delay_control"
87   - android:layout_below="@id/blink_control"
88   - android:layout_width="fill_parent"
89   - android:layout_height="wrap_content"
90   - android:layout_marginBottom="@dimen/control_bottom">
91   -
92   -
93   - <TextView android:layout_height="wrap_content"
94   - android:layout_width="wrap_content"
95   - android:text="@string/label_delay"
96   - android:textColor="@color/labels"
97   - android:textStyle="bold"
98   - android:layout_marginLeft="@dimen/label_left_margin"
99   - android:layout_alignParentLeft="true"
100   - android:layout_centerVertical="true"
101   - />
102   - <SeekBar
103   - android:id="@+id/slider"
104   - android:layout_width="150dp"
105   - android:layout_height="wrap_content"
106   - android:layout_centerVertical="true"
107   - android:layout_centerHorizontal="true"
108   - />
109   -
110   - <TextView
111   - android:id="@+id/delay"
112   - android:layout_height="wrap_content"
113   - android:layout_width="wrap_content"
114   - android:layout_marginRight="@dimen/label_right_margin"
115   - android:layout_alignParentRight="true"
116   - android:layout_centerVertical="true"
117   - android:text="0"
118   - android:textStyle="bold"
119   - android:textColor="@color/numbers"
120   - />
121   -
122   - </RelativeLayout>
123   -
124   -
125   - <!--The Repeat Control and Display Line-->
126   - <RelativeLayout
127   - android:id="@+id/repeat_control"
128   - android:layout_below="@id/delay_control"
129   - android:layout_width="fill_parent"
130   - android:layout_height="wrap_content"
131   - android:layout_marginBottom="@dimen/control_bottom">
132   -
133   -
134   - <TextView android:layout_height="wrap_content"
135   - android:layout_width="wrap_content"
136   - android:text="@string/label_repeat"
137   - android:textColor="@color/labels"
138   - android:textStyle="bold"
139   - android:layout_marginLeft="@dimen/label_left_margin"
140   - android:layout_alignParentLeft="true"
141   - android:layout_centerVertical="true"
142   - />
143   -
144   - <LinearLayout
145   - android:layout_width="wrap_content"
146   - android:layout_height="wrap_content"
147   - android:orientation="horizontal"
148   - android:layout_centerVertical="true"
149   - android:layout_centerHorizontal="true"
150   - >
151   - <Button
152   - android:id="@+id/minus_button"
153   - android:layout_height="wrap_content"
154   - android:layout_width="wrap_content"
155   - android:text="-"
156   - android:textSize="30dp"
157   - android:typeface="monospace"
158   - android:paddingLeft="22dp"
159   - android:paddingRight="22dp"
160   -
161   - android:gravity="center"
162   - android:layout_marginRight="0dp"
163   - android:onClick="onMinusButtonClick"
164   - />
165   -
166   - <Button
167   - android:id="@+id/plus_button"
168   - android:layout_height="wrap_content"
169   - android:layout_width="wrap_content"
170   - android:text="+"
171   - android:textSize="30dp"
172   - android:typeface="monospace"
173   - android:paddingLeft="22dp"
174   - android:paddingRight="22dp"
175   -
176   - android:gravity="center"
177   - android:layout_marginLeft="0dp"
178   - android:onClick="onPlusButtonClick"
179   - />
180   -
181   - </LinearLayout>
182   -
183   -
184   - <TextView
185   - android:id="@+id/repeat_count"
186   - android:layout_height="wrap_content"
187   - android:layout_width="wrap_content"
188   - android:layout_marginRight="@dimen/label_right_margin"
189   - android:layout_alignParentRight="true"
190   - android:layout_centerVertical="true"
191   - android:text="0"
192   - android:textStyle="bold"
193   - android:textColor="@color/numbers"
194   - />
195   -
196   - </RelativeLayout>
197   -
198   -
199   - <!--Container for Footer buttons, SetDevice and Connect/Disconnect -->
200   - <RelativeLayout
201   - android:layout_width="fill_parent"
202   - android:layout_height="wrap_content"
203   - android:layout_alignParentBottom="true"
204   - android:paddingBottom="8dp"
205   - android:paddingTop="8dp"
206   - android:background="@drawable/gradient"
207   - >
208   -
209   - <Button
210   - android:id="@+id/connect_button"
211   - android:text="@string/label_connect"
212   - android:gravity="center"
213   - android:layout_centerVertical="true"
214   - android:layout_alignParentRight="true"
215   - android:layout_height="wrap_content"
216   - android:layout_width="wrap_content"
217   - android:onClick="onConnectToggleClick"
218   -
219   - />
220   - <Button
221   - android:id="@+id/setdevice_button"
222   - android:text="@string/label_set_device"
223   - android:gravity="center"
224   - android:layout_centerVertical="true"
225   - android:layout_alignParentLeft="true"
226   - android:layout_height="wrap_content"
227   - android:layout_width="wrap_content"
228   - android:onClick="onSetDeviceClick"
229   - />
230   -
231   -
232   -
233   - </RelativeLayout>
234   -
235   -</RelativeLayout>
236   -
Blinker/res/layout/set_device_activity.xml deleted
1   -<?xml version="1.0" encoding="utf-8"?>
2   -
3   -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
4   - android:layout_width="fill_parent"
5   - android:layout_height="fill_parent"
6   - android:orientation="vertical"
7   - android:background="@color/background"
8   - >
9   -
10   - <!--Simple header for our list-->
11   - <RelativeLayout
12   - android:layout_width="fill_parent"
13   - android:layout_height="wrap_content"
14   - android:background="@color/background_header"
15   - >
16   - <TextView
17   - android:layout_width="fill_parent"
18   - android:layout_height="wrap_content"
19   - android:paddingBottom="10dp"
20   - android:layout_centerInParent="true"
21   - android:gravity="center"
22   - android:text="@string/heading_set_device"
23   - android:textStyle="bold"
24   - />
25   - <Button
26   - android:layout_alignParentRight="true"
27   - android:layout_width="wrap_content"
28   - android:layout_height="wrap_content"
29   - android:text="@string/label_scan"
30   - android:onClick="onScanDeviceClick"/>
31   -
32   - </RelativeLayout>
33   -
34   - <!--The actual device list-->
35   - <ListView
36   - android:id="@+id/device_list_view"
37   - android:layout_width="fill_parent"
38   - android:layout_height="fill_parent"
39   - />
40   -
41   -
42   -</LinearLayout>
43 0 \ No newline at end of file
Blinker/res/raw/blinker.json deleted
1   -{"resources":{"$schemaHash":{"id":-6,"align":1,"attributes":{"readonly":true},"type":"A16:u1","access":"r","size":16},"$eapProtocolLevel":{"id":-3,"align":2,"attributes":{"readonly":true},"type":"u2","access":"r","size":2},"cmd":{"id":1,"align":1,"attributes":{"writeonly":true},"type":"E:demos@emmoco.com.Blinker/Cmd","access":"w","size":1},"$mcmProtocolLevel":{"id":-2,"align":2,"attributes":{"readonly":true},"type":"u2","access":"r","size":2},"count":{"id":2,"align":2,"attributes":{"readwrite":true},"type":"i2","access":"rw","size":2},"$schemaUuid":{"id":-1,"align":1,"attributes":{"readonly":true},"type":"A16:u1","access":"r","size":16},"delay":{"id":3,"align":2,"attributes":{"readwrite":true},"type":"N:0.500000,2.000000,0.100000,3/u2","access":"rw","size":2},"$eapBuildDate":{"id":-4,"align":1,"attributes":{"readonly":true},"type":"A8:u1","access":"r","size":8},"$resourceCount":{"id":-7,"align":1,"attributes":{"readonly":true},"type":"S:system@emmoco.com.System/ResourceCount","access":"r","size":2},"ledState":{"id":4,"align":1,"attributes":{"indicator":true,"readonly":true},"type":"E:demos@emmoco.com.Blinker/LedState","access":"ir","size":1},"$fileIndexReset":{"id":-5,"align":2,"attributes":{"writeonly":true},"type":"i2","access":"w","size":2}},"resourceNamesSys":["$eapBuildDate","$eapProtocolLevel","$fileIndexReset","$mcmProtocolLevel","$resourceCount","$schemaHash","$schemaUuid"],"manifest":{"protocolLevel":7,"hash":[193,64,14,198,222,65,254,73,231,195,236,98,124,34,224,251],"name":"Blinker","uuid":[243,78,78,150,58,146,163,180,255,66,64,107,112,96,163,80],"build":[228,142,35,113,54,1,0,0],"date":"2012-04-01T22:40:17","maxAlign":2,"maxSize":16,"version":"1.0.0"},"resourceNames":["cmd","count","delay","ledState","$schemaUuid","$mcmProtocolLevel","$eapProtocolLevel","$eapBuildDate","$fileIndexReset","$schemaHash","$resourceCount"],"attributes":{"description":"Blinker, the hello world program for mobile control","owner":"demos@emmoco.com","uuid":"50a36070-6b40-42ff-b4a3-923a964e4ef3","version":"1.0.0"},"types":{"system@emmoco.com.System/ResourceCount":{"align":1,"type":"S:system@emmoco.com.System/ResourceCount","size":2,"fields":[{"align":1,"name":"app","type":"u1","size":1},{"align":1,"name":"sys","type":"u1","size":1}]},"std:i2":{"align":2,"size":2},"demos@emmoco.com.Blinker/LedState":{"values":["LED_OFF","LED_ON"],"align":1,"type":"E:demos@emmoco.com.Blinker/LedState","size":1},"std:u1":{"align":1,"size":1},"std:u2":{"align":2,"size":2},"demos@emmoco.com.Blinker/Cmd":{"values":["START_CMD","STOP_CMD"],"align":1,"type":"E:demos@emmoco.com.Blinker/Cmd","size":1}},"resourceNamesApp":["cmd","count","delay","ledState"],"imports":{"demos@emmoco.com.Blinker":true}}
2 0 \ No newline at end of file
Blinker/res/values/colors.xml deleted
1   -<resources>
2   -
3   - <color name="background_header">#000000</color>
4   - <color name="background">#FFF</color>
5   -
6   - <color name="labels">#000000</color>
7   - <color name="numbers">#2e82a2</color>
8   -
9   -
10   -</resources>
11   -
Blinker/res/values/dimensions.xml deleted
1   -<resources>
2   - <dimen name="label_left_margin">15dp</dimen>
3   - <dimen name="label_right_margin">15dp</dimen>
4   - <dimen name="control_bottom">15dp</dimen>
5   -
6   -
7   -</resources>
Blinker/res/values/strings.xml deleted
1   -<?xml version="1.0" encoding="utf-8"?>
2   -<resources>
3   - <string name="app_name">Blinker Demo</string>
4   -
5   -
6   - <!--Label and heading strings-->
7   - <string name="label_set_device">Device</string>
8   - <string name="label_delay">Delay</string>
9   - <string name="label_repeat">Repeat</string>
10   - <string name="label_blink">Blink</string>
11   - <string name="heading_set_device">Choose Target Device"</string>
12   - <string name="label_connect">Connect</string>
13   - <string name="label_disconnect">Disconnect</string>
14   - <string name="label_cancel">Cancel</string>
15   - <string name="label_scan">Scan</string>
16   -
17   - <string name="toggle_text_on">ON</string>
18   - <string name="toggle_text_off">OFF</string>
19   -
20   -
21   -
22   - <!--Toast messages-->
23   - <string name="notice_connected">Emmoco Target Device Connected</string>
24   - <string name="notice_disconnected">Emmoco Target Device Disconnected</string>
25   - <string name="notice_timeout">Emmoco Target Device Connection Timeout</string>
26   - <string name="notice_cancelled">Emmoco Target Device Connection Cancelled</string>
27   - <string name="notice_failure">Emmoco Target Device Connection Failure</string>
28   - <string name="notice_uuid_mismatch">Connection Failure. The Target Device Is Not Using The Blinker Schema</string>
29   - <string name="notice_connecting">Connecting</string>
30   - <string name="notice_cancelling">Cancelling connection...</string>
31   -
32   -
33   - <!--Dialog text when the schema does not match-->
34   - <string name="mismatch_title">Incompatible Schema</string>
35   - <string name="mismatch_uuid">The schema that is on the device you\'re connecting to isn\'t the same
36   - as the one you\'re viewing currently. Attempting to read or write resources will probably fail.</string>
37   -
38   -
39   -
40   -</resources>
Blinker/res/values/styles.xml deleted
1   -<?xml version="1.0" encoding="utf-8"?>
2   -
3   -<resources>
4   - <style name="AppTheme" parent="@android:style/Theme">
5   - <item name="android:windowNoTitle">true</item>
6   - <item name="android:windowBackground">@color/background</item>
7   - </style>
8   -
9   -</resources>
10   -
Blinker/src/com/emmoco/example/blinker/MainActivity.java deleted
1   -package com.emmoco.example.blinker;
2   -
3   -import android.app.Activity;
4   -import android.app.ProgressDialog;
5   -import android.content.Context;
6   -import android.content.DialogInterface;
7   -import android.content.Intent;
8   -import android.content.SharedPreferences;
9   -import android.os.Bundle;
10   -import android.preference.PreferenceManager;
11   -import android.text.InputType;
12   -import android.view.View;
13   -import android.widget.*;
14   -import com.emmoco.android.*;
15   -
16   -
17   -/**
18   - * This example application uses the Emmoco Framework to connect to a target running the Blinker schema
19   - * It allows the users to control the target by setting the blink counter, the blink delay and start the LED blinker
20   - * application running on the target.
21   - *
22   - * This application will receive indicators from the target when the LED changes state (on or off) and the app will
23   - * update an on-screen LED to match the state of the target's LED
24   - *
25   - *
26   - */
27   -public class MainActivity extends Activity {
28   -
29   - // The connection states track the app's connection to the target device
30   - public enum ConnectionState {
31   - CONNECTED, DISCONNECTED
32   - };
33   -
34   - private final static String TAG = "Blinker";
35   -
36   - private String mCurrentDevice;
37   - private ResourceSchema mServiceSchema;
38   - private TargetConnection mTargetConnection;
39   -
40   - private ResourceValue mCmdResourceValue;
41   - private ResourceValue mLedStateResourceValue;
42   - private ResourceValue mCountResourceValue;
43   - private ResourceValue mDelayResourceValue;
44   -
45   - private ImageView mLedImage;
46   - private ImageView mIndicator;
47   - private TextView mCountTextView;
48   - private TextView mDelayTextView;
49   - private TextView mIndTextView;
50   - private Button mConnectButton;
51   - private ToggleButton mOnOffButton;
52   - private Button mPlusButton;
53   - private Button mMinusButton;
54   - private Button mSetDevice;
55   -
56   - private ConnectionState mConnectionState = ConnectionState.DISCONNECTED;
57   - private long mScaledStep;
58   - private String mDelayFormat;
59   - private SeekBar mSlider;
60   - private StickyProgressDialog mProgress;
61   - private int mLocalCount;
62   -
63   -
64   - /**
65   - * Standard Android onCreate method. This will setup all the layout and save references to the UI elements
66   - * that will be modified during the course of the program
67   - *
68   - * @param savedInstanceState
69   - */
70   - @Override
71   - public void onCreate(Bundle savedInstanceState) {
72   -
73   - super.onCreate(savedInstanceState);
74   -
75   - // Setup and retrieve view references
76   - setContentView(R.layout.main_activity);
77   - mLedImage = (ImageView) findViewById(R.id.led_image);
78   - mIndicator = (ImageView) findViewById(R.id.connected_indicator);
79   - mCountTextView = (TextView) findViewById(R.id.repeat_count);
80   - mIndTextView = (TextView) findViewById(R.id.indicator_count);
81   - mConnectButton = (Button) findViewById(R.id.connect_button);
82   - mOnOffButton = (ToggleButton) findViewById(R.id.on_off_button);
83   - mPlusButton = (Button) findViewById(R.id.plus_button);
84   - mMinusButton = (Button) findViewById(R.id.minus_button);
85   - mSetDevice = (Button) findViewById(R.id.setdevice_button);
86   -
87   - // Create a ProgressDialog spinner to use during connection
88   - mProgress = new StickyProgressDialog(this);
89   - mProgress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
90   - mProgress.setButton(getResources().getString(R.string.label_cancel), new DialogInterface.OnClickListener() {
91   - public void onClick(DialogInterface dialog, int which) {
92   - // Cancel the connect attempt by closing it
93   - mTargetConnection.closeSync();
94   - mProgress.setMessage(getResources().getString(R.string.notice_cancelling));
95   - mProgress.show();
96   - return;
97   - }
98   - });
99   -
100   - // Setup Emmoco specific items
101   - initializeEmmoco();
102   -
103   - // set the slider for entering the delay value
104   - setup_slider();
105   -
106   - // Update the UI elements to show that the we are not connected to the target
107   - updateUiState(false);
108   -
109   -
110   - }
111   -
112   -
113   -
114   - /**
115   - * Standard Android onDestroy. Here we will make sure that we are disconnected from the target on Activity
116   - * destruction.
117   - */
118   - @Override
119   - protected void onDestroy() {
120   - super.onDestroy();
121   - if (mTargetConnection != null)
122   - mTargetConnection.closeSync();
123   - }
124   -
125   -
126   - /**
127   - * Do all the work loading the schema and setting up the references to the Emmoco Target's Resources
128   - */
129   - private void initializeEmmoco() {
130   -
131   - // load the schema that was downloaded from em-hub. We include the schema as part of the app resources
132   - mServiceSchema = Framework.current().createSchemaFromRaw(this, R.raw.blinker);
133   -
134   - // get the device to connect to from the users preferences
135   - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
136   - mCurrentDevice = prefs.getString(SetDeviceActivity.PREF_DEVICE_NAME, TargetConnection.MOCK_BLINKER_PRE);
137   -
138   - // initialize the Emmoco the resources
139   - mCmdResourceValue = mServiceSchema.newValue("cmd");
140   - mLedStateResourceValue = mServiceSchema.newValue("ledState");
141   - mCountResourceValue = mServiceSchema.newValue("count");
142   - mDelayResourceValue = mServiceSchema.newValue("delay");
143   -
144   -
145   - }
146   -
147   - /**
148   - * Update the UI elements based on whether we are connected or disconnected from the target
149   - *
150   - * If we are connected, we enable all the UI controls.
151   - * If we are disconnected, we disable all the UI controls that require talking to the target to operate
152   - *
153   - * @param connected
154   - */
155   - private void updateUiState(boolean connected){
156   -
157   - // indicator light
158   - mIndicator.setEnabled(connected);
159   -
160   - // delay slider
161   - mSlider.setEnabled(connected);
162   -
163   - // on/off toggle
164   - mOnOffButton.setEnabled(connected);
165   -
166   - if (mConnectionState == ConnectionState.DISCONNECTED){
167   - // Change text on connect button
168   - mConnectButton.setText(R.string.label_connect);
169   - }else{
170   - mConnectButton.setText(R.string.label_disconnect);
171   - }
172   -
173   - // Repeat section buttons
174   - mMinusButton.setEnabled(connected);
175   - mPlusButton.setEnabled(connected);
176   - mCountTextView.setEnabled(connected);
177   -
178   - // The device button is only active when not connected
179   - mSetDevice.setEnabled(!connected);
180   -
181   - // When connect or disconnect happens, the toggle button is not checked
182   - mOnOffButton.setChecked(false);
183   -
184   - // Clear the local counter
185   - mIndTextView.setText("");
186   -
187   -
188   - }
189   -
190   -
191   - /**
192   - * Emmoco Reactor used to handle the connection requests to the target
193   - *
194   - * Reactors are listeners that are called when the target device state changes, read/writes complete, or the target
195   - * sends an indicator.
196   - *
197   - * Reactors are called from the context of the UI thread.
198   - *
199   - * This reactor will be called back during the connection and disconnection phases of the example.
200   - *
201   - * This will set the UI elements to certain values based on connection and disconnection states
202   - *
203   - */
204   - enum Connection { CONNECT_DONE, DISCONNECT_DONE };
205   - private Reactor<Connection> mConnectionReactor = new Reactor<Connection>() {
206   - public void exec(Connection action, int status, Bundle data) {
207   - Toast msg;
208   - int notice;
209   -
210   - switch (action) {
211   - case CONNECT_DONE:
212   -
213   - if (status == TargetConnection.STATUS_OK) {
214   - //
215   - // Connection completed successfully
216   - //
217   - mConnectionState = ConnectionState.CONNECTED;
218   - notice = R.string.notice_connected;
219   -
220   - // bind to catch if the far end disconnects
221   - mTargetConnection.bindHangupEvent(mConnectionReactor.event(Connection.DISCONNECT_DONE));
222   -
223   - // read and display the current value of count
224   - mTargetConnection.read(mCountResourceValue, mCountReactor.event(CountAction.READ_COMPLETE));
225   -
226   - // read and display the current value of delay
227   - mTargetConnection.read(mDelayResourceValue, mDelayReactor.event(DelayAction.READ_COMPLETE));
228   -
229   - // Now update all the UI elements
230   - updateUiState(true);
231   - } else if (status == TargetConnection.STATUS_UUID_MISMATCH) {
232   - mConnectionState = ConnectionState.DISCONNECTED;
233   - notice = R.string.notice_uuid_mismatch;
234   - } else if (status == TargetConnection.STATUS_CONNECTION_TIMEOUT) {
235   - mConnectionState = ConnectionState.DISCONNECTED;
236   - notice = R.string.notice_timeout;
237   - } else if (status == TargetConnection.STATUS_CONNECTION_CANCELLED) {
238   - mConnectionState = ConnectionState.DISCONNECTED;
239   - notice = R.string.notice_cancelled;
240   - } else {
241   - // Connection attempt failed. Display a message
242   - notice = R.string.notice_failure;
243   - mConnectionState = ConnectionState.DISCONNECTED;
244   - }
245   -
246   - // Show a quick toast with the status of the connection
247   - msg = Toast.makeText(getApplicationContext(), notice, Toast.LENGTH_LONG);
248   - msg.show();
249   -
250   - // Dismiss the dialog only when connect result comes back
251   - mProgress.dismissManually();
252   -
253   - break;
254   -
255   - case DISCONNECT_DONE:
256   - // no need to check the status, disconnect always completes by leaving us
257   - // in the disconnected state
258   - mConnectionState = ConnectionState.DISCONNECTED;
259   - msg = Toast.makeText(getApplicationContext(), R.string.notice_disconnected, Toast.LENGTH_SHORT);
260   - msg.show();
261   -
262   - updateUiState(false);
263   -
264   - break;
265   - }
266   - }
267   - };
268   -
269   -
270   - /**
271   - * Reactor used to handle the writes and indicators for the blinker schema. This reactor will be called back
272   - * after each write (where we do not need to do anything at all) and the firing of the indicator. When the
273   - * indicator is fired, it signals when the LED changes, so we can use that indicator to trigger our UI LED and
274   - * countdown value to change
275   - */
276   - enum Action { WRITE_CMD_COMPLETE, INDICATOR };
277   - private Reactor<Action> mLedReactor = new Reactor<Action>() {
278   - public void exec(Action action, int status, Bundle data) {
279   - switch (action) {
280   - case WRITE_CMD_COMPLETE:
281   - // nothing to do
282   - break;
283   - case INDICATOR:
284   - // update the virtual led display based on the value that gets updated when the indicator is fired.
285   - // We registered this value after connection occurred with bindIndicatorValue()
286   - if (mLedStateResourceValue.toString().equals("LED_OFF")) {
287   - mLedImage.setSelected(false);
288   - if (mLocalCount == 0){
289   - // Reached the end, we disable some UI elements
290   - mIndTextView.setText("");
291   - mOnOffButton.setChecked(false);
292   - }
293   - } else {
294   - mLedImage.setSelected(true);
295   - mLocalCount--;
296   - mIndTextView.setText(String.valueOf(mLocalCount));
297   - }
298   - break;
299   - }
300   - }
301   - };
302   -
303   -
304   - /**
305   - * Reactor used for count value. When the count value is read back from the target, the UI value is updated with
306   - * the new value that is read back
307   - */
308   - enum CountAction { READ_COMPLETE, WRITE_COMPLETE };
309   - private Reactor<CountAction> mCountReactor = new Reactor<CountAction>() {
310   - public void exec(CountAction action, int status, Bundle data) {
311   - Long count;
312   - switch (action) {
313   - case READ_COMPLETE:
314   - count = new Long(mCountResourceValue.toLong());
315   - mCountTextView.setText(count.toString());
316   - break;
317   - case WRITE_COMPLETE:
318   - mTargetConnection.read(mCountResourceValue,mCountReactor.event(CountAction.READ_COMPLETE));
319   - break;
320   - }
321   - }
322   - };
323   -
324   -
325   - /**
326   - * Reactor used for delay resource. When the delay resource is read or written, the seek bar value is moved (on
327   - * read) and the display value is updated
328   - */
329   - enum DelayAction { READ_COMPLETE, WRITE_COMPLETE };
330   - private Reactor<DelayAction> mDelayReactor = new Reactor<DelayAction>() {
331   - public void exec(DelayAction action, int status, Bundle data) {
332   - double delay;
333   - long delayOrd;
334   - switch (action) {
335   - case READ_COMPLETE:
336   - delay = mDelayResourceValue.toDouble();
337   - delayOrd = mDelayResourceValue.toLong();
338   - mDelayTextView.setText(String.format(mDelayFormat, delay));
339   -
340   - // set the progress bar position based on the ordinal value. We use the ordinal value
341   - // to determine where to position the seek on the 0 to 100 scale of the seekbar.
342   - int progress;
343   - if (delayOrd == mDelayResourceValue.numMaxOrdinal()) {
344   - progress = 100;
345   - } else {
346   - progress = (int) (delayOrd * mScaledStep);
347   - }
348   - mSlider.setProgress(progress);
349   - break;
350   - case WRITE_COMPLETE:
351   - // Nothing to do
352   - break;
353   - }
354   - }
355   - };
356   -
357   -
358   -
359   -
360   -
361   -
362   - /**
363   - * The set-device button has been pressed, start the sub-activity which will change the device preference
364   - */
365   - final private int DEVICE_SELECT = 1;
366   - public void onSetDeviceClick(View v) {
367   - Intent i = new Intent(this, SetDeviceActivity.class);
368   - startActivityForResult(i, DEVICE_SELECT);
369   - }
370   -
371   - /**
372   - * Process the result from the set-device sub activity
373   - *
374   - * @param requestCode
375   - * @param resultCode
376   - * @param data
377   - */
378   - @Override
379   - protected void onActivityResult(int requestCode, int resultCode, Intent data) {
380   - switch (requestCode){
381   - case DEVICE_SELECT:
382   - // If the device value string has changed, update our local copy
383   - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
384   - String device = prefs.getString(SetDeviceActivity.PREF_DEVICE_NAME, TargetConnection.MOCK_BLINKER_PRE);
385   -
386   - // If device has changed we need to disconnect if connected, then the user can reconnect
387   - // manually to the new device
388   - if (!mCurrentDevice.contentEquals(device)){
389   - mCurrentDevice = device;
390   -
391   - if ((mTargetConnection != null) &&(mTargetConnection.isConnected())){
392   - onConnectToggleClick(null);
393   - }
394   - }
395   - break;
396   - }
397   - }
398   -
399   - /**
400   - * Handler function for when the on/off button is press. In this handler, depending on the current state,
401   - * the command is sent to start or stop the blinker on the target
402   - *
403   - * @param v unused
404   - */
405   - public void onToggleOnOff(View v) {
406   -
407   - String command;
408   -
409   - ToggleButton b = (ToggleButton)v;
410   -
411   - // Determine which command to send
412   - if (b.isChecked()){
413   - // We have been turned on
414   - command = "START_CMD";
415   -
416   - // Set up the local count value so we can count down
417   - mLocalCount = mCountResourceValue.toInt();
418   - ((TextView)findViewById(R.id.indicator_count)).setText(String.valueOf(mLocalCount));
419   -
420   - }else{
421   - // We have been turned off
422   - command = "STOP_CMD";
423   - }
424   -
425   - // Send command
426   - mCmdResourceValue.assignEnum(command);
427   - mTargetConnection.write(mCmdResourceValue, mLedReactor.event(Action.WRITE_CMD_COMPLETE));
428   -
429   - }
430   -
431   -
432   - /**
433   - * Handler for the connect toggle button
434   - *
435   - * Normally in an app the user doesn't worry about connecting or disconnecting, we
436   - * simply connect when the main activity becomes visible and disconnect
437   - * when another activity comes to the front, but this handler is used to
438   - * give the user the ability to toggle the connect state by touching the
439   - * connect/disconnect button
440   - *
441   - * @param v unused
442   - */
443   - public void onConnectToggleClick(View v) {
444   -
445   - // toggle connect or disconnect
446   - switch (mConnectionState) {
447   - case DISCONNECTED:
448   -
449   - // Show Connection spinner
450   - mProgress.setMessage(getResources().getString(R.string.notice_connecting));
451   - mProgress.setCancelable(false);
452   - mProgress.show();
453   -
454   - // configure the generic mock device if it is being used with some default values
455   - if (mCurrentDevice.equals(TargetConnection.MOCK_PRE)) {
456   - MockTargetDevice.reset();
457   - MockTargetDevice.current().setTickRate(500);
458   - MockTargetDevice.current().setAccessDelay(2);
459   - }
460   -
461   - // connect to the device using the schema
462   - mTargetConnection = new TargetConnection(mCurrentDevice, getApplicationContext());
463   - mTargetConnection.bindSchema(mServiceSchema);
464   - mTargetConnection.bindIndicatorValue("ledState", mLedReactor.event(Action.INDICATOR),mLedStateResourceValue);
465   -
466   - mTargetConnection.open(mConnectionReactor.event(Connection.CONNECT_DONE));
467   -
468   - break;
469   - case CONNECTED:
470   - mTargetConnection.close(mConnectionReactor.event(Connection.DISCONNECT_DONE));
471   - break;
472   - }
473   - }
474   -
475   - /**
476   - * handler for the minus Button
477   - * the minus button decrements the count resource and writes it to blinker
478   - *
479   - * @param v
480   - */
481   - public void onMinusButtonClick(View v) {
482   - long count = Long.parseLong(mCountTextView.getText().toString());
483   - if (count > 0) {
484   - count--;
485   - }
486   - mCountResourceValue.assignInt(count);
487   - mTargetConnection.write(mCountResourceValue, mCountReactor.event(CountAction.WRITE_COMPLETE));
488   - }
489   -
490   - /**
491   - * Handler for the plus Button
492   - * The plus button increments the count resource and writes it to blinker
493   - *
494   - * @param v
495   - */
496   - public void onPlusButtonClick(View v) {
497   - long count = Long.parseLong(mCountTextView.getText().toString());
498   - if (count < mCountResourceValue.intMax()){
499   - count++;
500   - }
501   - mCountResourceValue.assignInt(count);
502   - mTargetConnection.write(mCountResourceValue, mCountReactor.event(CountAction.WRITE_COMPLETE));
503   - }
504   -
505   -
506   -
507   -
508   -
509   - /**
510   - * Sets up the seekbar to be used as the input for changing the target's delay values. This must be called
511   - * after the schema and resource values are set up, We need to do some math here to split the 0 to 100 range of the
512   - * seekbar into the number of distinct values we can set the delay resource, and map those parts of the seekbar
513   - * into values that are set.
514   - *
515   - */
516   - private void setup_slider() {
517   - // calculate scaled step
518   - mScaledStep = 100 / mDelayResourceValue.numMaxOrdinal();
519   - mDelayFormat = "%.1f";
520   -
521   - mDelayTextView = (TextView) findViewById(R.id.delay);
522   - mDelayTextView.setRawInputType(InputType.TYPE_CLASS_NUMBER);
523   - mSlider = (SeekBar) findViewById(R.id.slider);
524   -
525   - // initializeEmmoco slider listener
526   - mSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
527   -
528   - public void onStopTrackingTouch(SeekBar seekBar) {
529   - // they took their finger off the bar, so write to the device
530   - Double delay = Double.parseDouble(mDelayTextView.getText().toString());
531   - mDelayResourceValue.assignNum(delay);
532   - mTargetConnection.write(mDelayResourceValue, mDelayReactor.event(DelayAction.WRITE_COMPLETE));
533   - }
534   -
535   - public void onStartTrackingTouch(SeekBar seekBar) {
536   - }
537   -
538   - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
539   - long ord = progress / mScaledStep;
540   - mDelayResourceValue.assignNum(ord);
541   - mDelayTextView.setText(String.format(mDelayFormat, mDelayResourceValue.toDouble()));
542   - }
543   - });
544   - }
545   -
546   -
547   - /**
548   - * Android UI tweak.
549   - * Normally a progress dialog disappears when you hit a button (like cancel), but we want our dialog to stick around
550   - * until our background task has completed the cancellation phase. The easiest way is to override the dismiss() so
551   - * the dialog does not automatically close
552   - */
553   - private class StickyProgressDialog extends ProgressDialog {
554   - private StickyProgressDialog(Context context) {
555   - super(context);
556   - }
557   -
558   - @Override
559   - public void dismiss() {
560   - // do nothing
561   - }
562   - public void dismissManually() {
563   - super.dismiss();
564   - }
565   - }
566   -}
567   -
Blinker/src/com/emmoco/example/blinker/SetDeviceActivity.java deleted
1   -package com.emmoco.example.blinker;
2   -
3   -import android.app.Activity;
4   -import android.content.Intent;
5   -import android.content.SharedPreferences;
6   -import android.os.Bundle;
7   -import android.preference.PreferenceManager;
8   -import android.view.LayoutInflater;
9   -import android.view.View;
10   -import android.view.ViewGroup;
11   -import android.widget.AdapterView;
12   -import android.widget.BaseAdapter;
13   -import android.widget.ListView;
14   -import android.widget.TextView;
15   -import com.emmoco.android.TargetConnection;
16   -
17   -import java.util.ArrayList;
18   -
19   -/**
20   - * This activity manages a screen where the user can choose from a list of target devices. These devices include
21   - * the Bluetooth paired devices and the Emmoco mock devices used for testing.
22   - *
23   - * This activity maintains a simple listview. There is an option to jump to the Settings->Bluetooth-Scan activity
24   - * When this activity returns, it refreshes the paired bluetooth device list in case it has changed
25   - *
26   - * This uses a custom Listview Adapter to show a checkmark next to the currently saved device
27   - *
28   - * The devices is stored using standard Android SharedPreferences
29   - *
30   - */
31   -public class SetDeviceActivity extends Activity{
32   - final static private String TAG="SetDeviceActivity";
33   -
34   - private String mCurrentDevice;
35   - private ListView mDeviceList;
36   - private DeviceArrayAdapter mAdapter;
37   -
38   - final public static String PREF_DEVICE_NAME = "DEVICE";
39   - final public static String MOCK_DEVICE_LABEL = "Mock Blinker Device";
40   -
41   -
42   - /**
43   - * Internal class that adapts our array of device strings to a listview. Current choice is highlighted with
44   - * a checkmark
45   - */
46   - private class DeviceArrayAdapter extends BaseAdapter {
47   -
48   - ArrayList<String> mList;
49   - Activity mContext;
50   -
51   - DeviceArrayAdapter(Activity context, ArrayList<String> arrayList) {
52   - mList = arrayList;
53   - mContext = context;
54   - }
55   -
56   - public int getCount() {
57   - return mList.size();
58   - }
59   -
60   - public Object getItem(int i) {
61   - return mList.get(i);
62   - }
63   -
64   - public long getItemId(int i) {
65   - return i;
66   - }
67   -
68   - /**
69   - * Returns a new view constructed from a simple layout. The layout has a textview for the name of the device
70   - * and a checkmark graphic that is visible or not.
71   - *
72   - * @param i
73   - * @param view
74   - * @param viewGroup
75   - * @return
76   - */
77   - public View getView(int i, View view, ViewGroup viewGroup) {
78   - LayoutInflater inflator = mContext.getLayoutInflater();
79   - view = inflator.inflate(R.layout.list_item, null);
80   -
81   - String name = (String)getItem(i);
82   - String label = name;
83   -
84   - // Translate the URI for the device into a pretty label for display in the listview
85   -
86   - // If Mock device, use mock label
87   - if (name.contentEquals(TargetConnection.MOCK_BLINKER_PRE)){
88   - label = MOCK_DEVICE_LABEL;
89   - }
90   - if (name.startsWith(TargetConnection.BT_PRE)) {
91   - // If Bluetooth, remove prefix
92   - label = name.substring(TargetConnection.BT_PRE.length());
93   - }
94   -
95   -
96   - // Set the label in the view
97   - ((TextView)view.findViewById(R.id.item_label)).setText(label);
98   -
99   - // If the current one, show the checkbox
100   - if (mList.get(i).contentEquals(mCurrentDevice)){
101   - view.findViewById(R.id.checkmark).setVisibility(View.VISIBLE);
102   - }else{
103   - view.findViewById(R.id.checkmark).setVisibility(View.INVISIBLE);
104   - }
105   - return view;
106   - }
107   -
108   - // Replace the list with a new one and trigger a redraw on the screen
109   - public void updateList(ArrayList<String> list){
110   - mList = list;
111   - notifyDataSetInvalidated();
112   - }
113   - }
114   -
115   - /**
116   - * Standard Android method called at start of activity.
117   - *
118   - * Save the
119   - * @param savedInstanceState
120   - */
121   - @Override
122   - protected void onCreate(Bundle savedInstanceState) {
123   -
124   - super.onCreate(savedInstanceState);
125   - setContentView(R.layout.set_device_activity);
126   -
127   -
128   - mDeviceList = (ListView)findViewById(R.id.device_list_view);
129   -
130   - mAdapter = new DeviceArrayAdapter(this,TargetConnection.deviceList(true,false));
131   - mDeviceList.setAdapter(mAdapter);
132   -
133   - // get the device to connect to from the users preferences
134   - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
135   - mCurrentDevice = prefs.getString(PREF_DEVICE_NAME, TargetConnection.MOCK_BLINKER_PRE);
136   -
137   -
138   - // Register a handler when one of the list items is clicked. This handler will set the
139   - // preference to use the new device, and finish this activity so we go back to the main activity
140   - mDeviceList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
141   - public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
142   -
143   - String newDeviceName = (String)mAdapter.getItem(i);
144   -
145   - // Save changed name to preferences
146   - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(SetDeviceActivity.this);
147   - SharedPreferences.Editor edit = prefs.edit();
148   - edit.putString(PREF_DEVICE_NAME, newDeviceName);
149   - edit.commit();
150   -
151   - // Set the result so the calling activity know we have changed the device
152   - setResult(RESULT_OK);
153   - finish();
154   - }
155   - } );
156   -
157   - }
158   -
159   - @Override
160   - protected void onResume() {
161   - // If we are resuming after going to Settings-->Bluetooth, the device list may have changed so update
162   - mAdapter.updateList(TargetConnection.deviceList(true,false));
163   -
164   - super.onResume();
165   - }
166   -
167   -
168   -
169   - /**
170   - * Use an intent to call the Android bluetooth settings for scanning bluetooth devices
171   - * @param v
172   - */
173   - public void onScanDeviceClick(View v) {
174   - Intent i = new Intent();
175   - i.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);
176   - startActivity(i);
177   - }
178   -
179   -}