rhodes 2.1.0 → 2.2.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +7 -0
- data/README.textile +4 -5
- data/Rakefile +8 -1
- data/lib/build/jake.rb +22 -16
- data/lib/extensions/rhoxml/rexml/cdata.rb +67 -0
- data/lib/extensions/rhoxml/rexml/document.rb +2 -116
- data/lib/extensions/rhoxml/rexml/element.rb +1 -1
- data/lib/extensions/rhoxml/rexml/text.rb +117 -0
- data/lib/framework/rho/render.rb +19 -11
- data/lib/framework/rho/rho.rb +17 -10
- data/lib/framework/rho/rhobluetooth.rb +103 -0
- data/lib/framework/rho/rhocontroller.rb +2 -0
- data/lib/framework/rho/rhoevent.rb +43 -0
- data/lib/framework/rho/rhoevent_bb.rb +80 -0
- data/lib/framework/rho/rhoevent_c.rb +47 -0
- data/lib/framework/rhodes.rb +2 -2
- data/lib/framework/rhom/rhom_db_adapter.rb +2 -1
- data/lib/framework/rhom/rhom_model.rb +9 -3
- data/lib/framework/rhom/rhom_object_factory.rb +46 -22
- data/lib/framework/rhom/rhom_source.rb +12 -10
- data/lib/framework/version.rb +2 -2
- data/lib/rhodes.rb +2 -2
- data/platform/android/Rhodes/AndroidManifest.xml +23 -2
- data/platform/android/Rhodes/gen/com/rhomobile/rhodes/R.java +54 -38
- data/platform/android/Rhodes/jni/include/rhodes.h +3 -0
- data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +2 -2
- data/platform/android/Rhodes/jni/include/rhodes/details/rhojava.inc +4 -0
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +16 -0
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_bluetooth_RhoBluetoothManager.h +21 -0
- data/platform/android/Rhodes/jni/src/bluetooth.cpp +169 -0
- data/platform/android/Rhodes/jni/src/callbacks.cpp +10 -0
- data/platform/android/Rhodes/jni/src/event.cpp +429 -0
- data/platform/android/Rhodes/jni/src/fileapi.cpp +51 -1
- data/platform/android/Rhodes/jni/src/rhodes.cpp +16 -0
- data/platform/android/Rhodes/jni/src/sslimpl.cpp +3 -0
- data/platform/android/Rhodes/res/layout/bt_device_list.xml +42 -0
- data/platform/android/Rhodes/res/layout/bt_device_name.xml +7 -0
- data/platform/android/Rhodes/res/values/strings.xml +8 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java +14 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +2 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Push.java +7 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +58 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushService.java +53 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +8 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +144 -3
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/IRhoBluetoothManager.java +66 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothDeviceListActivity.java +201 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManager.java +139 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerNew.java +401 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerOld.java +136 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothSession.java +457 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/UUIDHelper.java +71 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +12 -7
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/Event.java +19 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +261 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +4 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java +2 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/uri/MailUriHandler.java +10 -2
- data/platform/android/build/RhodesSRC_build.files +33 -22
- data/platform/android/build/android.rake +198 -27
- data/platform/android/build/librhodes_build.files +3 -1
- data/platform/android/build/libruby_build.files +4 -1
- data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBResult.java +2 -2
- data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBRowResult.java +1 -1
- data/platform/bb/Hsqldb/src/org/hsqldb/Expression.java +7 -4
- data/platform/bb/Hsqldb/src/org/hsqldb/Like.java +3 -3
- data/platform/bb/Hsqldb/src/org/hsqldb/Table.java +3 -1
- data/platform/bb/Hsqldb/src/org/hsqldb/Tokenizer.java +1 -1
- data/platform/bb/RubyVM/RubyVM.jdp +1 -0
- data/platform/bb/RubyVM/src/com/rho/RhoConf.java +108 -1
- data/platform/bb/RubyVM/src/com/rho/RhoLogConf.java +7 -1
- data/platform/bb/RubyVM/src/com/rho/RhoRuby.java +7 -4
- data/platform/bb/RubyVM/src/com/rho/ThreadQueue.java +7 -1
- data/platform/bb/RubyVM/src/com/rho/net/AsyncHttp.java +1 -1
- data/platform/bb/RubyVM/src/com/rho/net/NetRequest.java +21 -23
- data/platform/bb/RubyVM/src/com/rho/net/RhoConnection.java +19 -10
- data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +8 -0
- data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +3 -0
- data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +14 -17
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyFile.java +7 -5
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RhoSupport.java +2 -0
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyRuntime.java +10 -1
- data/platform/bb/RubyVM/src/j2me/io/File.java +7 -6
- data/platform/bb/build/RubyVM_build.files +412 -412
- data/platform/bb/build/bb.rake +42 -18
- data/platform/bb/build/hsqldb_build.files +151 -151
- data/platform/bb/build/rhodes_build.files +44 -40
- data/platform/bb/rhodes/platform/5.0/com/rho/BrowserAdapter5.java +2 -0
- data/platform/bb/rhodes/platform/5.0/com/rho/RhodesApplicationPlatform.java +237 -0
- data/platform/bb/rhodes/platform/common/com/rho/RhodesApplicationPlatform.java +14 -0
- data/platform/bb/rhodes/rhodes.jdp +6 -1
- data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +7 -1
- data/platform/bb/rhodes/src/com/rho/RhodesApplicationPlatform.java +14 -0
- data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +62 -76
- data/platform/bb/rhodes/src/com/rho/rubyext/RhoCalendar.java +660 -0
- data/platform/bb/rhodes/src/{rhomobile → com/rho/rubyext}/RhoPhonebook.java +95 -38
- data/platform/bb/rhodes/src/com/rho/rubyext/System.java +22 -1
- data/platform/bb/rhodes/src/rhomobile/PushListeningThread.java +26 -6
- data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +21 -7
- data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothManager.java +528 -0
- data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothPort.java +281 -0
- data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothScreen.java +119 -0
- data/platform/bb/rhodes/src/rhomobile/camera/CameraFilesListener.java +2 -2
- data/platform/iphone/Classes/AppManager/AppManager.m +70 -7
- data/platform/iphone/Classes/Bluetooth/Bluetooth.h +72 -0
- data/platform/iphone/Classes/Bluetooth/Bluetooth.m +414 -0
- data/platform/iphone/Classes/Event/Event.h +12 -0
- data/platform/iphone/Classes/Event/Event.m +300 -0
- data/platform/iphone/Classes/LogOptionsController.h +2 -1
- data/platform/iphone/Classes/LogOptionsController.m +1 -1
- data/platform/iphone/Classes/LogViewController.h +2 -1
- data/platform/iphone/Classes/MapView/MapViewController.h +2 -1
- data/platform/iphone/Classes/RhoViewController.h +16 -0
- data/platform/iphone/Classes/RhoViewController.m +20 -0
- data/platform/iphone/Classes/Rhodes.h +12 -0
- data/platform/iphone/Classes/Rhodes.m +34 -6
- data/platform/iphone/Classes/Signature/SignatureViewController.h +2 -2
- data/platform/iphone/Classes/Signature/SignatureViewController.m +0 -10
- data/platform/iphone/Classes/SimpleMainView.h +2 -2
- data/platform/iphone/Classes/SimpleMainView.m +5 -14
- data/platform/iphone/Classes/SplashViewController.h +2 -2
- data/platform/iphone/Classes/TabbedMainView.h +2 -2
- data/platform/iphone/Classes/TabbedMainView.m +5 -10
- data/platform/iphone/Info.plist +5 -5
- data/platform/iphone/rhorubylib/rhorubylib.xcodeproj/project.pbxproj +39 -0
- data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +47 -4
- data/platform/osx/Rhodes Debugger/NoodleLineNumberView.m +3 -2
- data/platform/shared/common/AutoPointer.h +3 -0
- data/platform/shared/common/RhoConf.cpp +2 -1
- data/platform/shared/common/RhoThread.h +1 -1
- data/platform/shared/common/RhoTime.h +3 -3
- data/platform/shared/common/RhodesApp.cpp +75 -23
- data/platform/shared/common/RhodesApp.h +4 -0
- data/platform/shared/common/RhodesAppBase.h +2 -0
- data/platform/shared/common/ThreadQueue.cpp +23 -18
- data/platform/shared/common/ThreadQueue.h +2 -0
- data/platform/shared/db/res/db/syncdb.schema +39 -39
- data/platform/shared/logging/RhoLogConf.cpp +58 -3
- data/platform/shared/logging/RhoLogConf.h +3 -1
- data/platform/shared/net/CURLNetRequest.cpp +17 -6
- data/platform/shared/net/HttpServer.cpp +125 -25
- data/platform/shared/net/HttpServer.h +4 -3
- data/platform/shared/ruby/ext/bluetooth/bluetooth.i +56 -0
- data/platform/shared/ruby/ext/bluetooth/bluetooth_wrap.c +2563 -0
- data/platform/shared/ruby/ext/calendar/calendar.i +28 -0
- data/platform/shared/ruby/ext/calendar/calendar_wrap.c +2251 -0
- data/platform/shared/ruby/ext/calendar/event.h +41 -0
- data/platform/shared/ruby/ext/calendar/event.i +28 -0
- data/platform/shared/ruby/ext/calendar/event_wrap.c +2151 -0
- data/platform/shared/ruby/ext/rho/rhoruby.c +103 -3
- data/platform/shared/ruby/ext/rho/rhoruby.h +16 -2
- data/platform/shared/ruby/ext/rhoconf/rhoconf.i +12 -0
- data/platform/shared/ruby/ext/rhoconf/rhoconf_wrap.c +101 -0
- data/platform/shared/ruby/ext/system/system.i +14 -0
- data/platform/shared/ruby/ext/system/system_wrap.c +2568 -2208
- data/platform/shared/ruby/main.c +8 -0
- data/platform/shared/rubyext/GeoLocation.cpp +6 -3
- data/platform/shared/rubyext/System.cpp +14 -0
- data/platform/shared/sync/SyncEngine.cpp +9 -1
- data/platform/shared/sync/SyncNotify.cpp +16 -8
- data/platform/shared/sync/SyncNotify.h +1 -0
- data/platform/shared/sync/SyncThread.cpp +7 -12
- data/platform/shared/sync/SyncThread.h +5 -3
- data/platform/wm/build/wm.rake +7 -1
- data/platform/wm/rhodes/Alert.cpp +1 -1
- data/platform/wm/rhodes/MainWindow.cpp +28 -0
- data/platform/wm/rhodes/MainWindow.h +9 -0
- data/platform/wm/rhodes/OutlookApp.cpp +72 -0
- data/platform/wm/rhodes/OutlookApp.h +22 -0
- data/platform/wm/rhodes/Rhodes.cpp +8 -0
- data/platform/wm/rhodes/Rhodes.rc +31 -0
- data/platform/wm/rhodes/bluetooth/Bluetooth.cpp +1274 -0
- data/platform/wm/rhodes/bluetooth/Bluetooth.h +321 -0
- data/platform/wm/rhodes/phonebook/NativeAddressBook.cpp +37 -70
- data/platform/wm/rhodes/phonebook/NativeAddressBook.h +0 -4
- data/platform/wm/rhodes/resource.h +8 -1
- data/platform/wm/rhodes/rho/net/NetRequest.cpp +4 -0
- data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +6 -4
- data/platform/wm/rhodes/rho/rubyext/calendar.cpp +487 -0
- data/platform/wm/rhodes/rhodes.vcproj +28 -11
- data/platform/wm/rhodes/stdafx.h +1 -0
- data/platform/wm/rubylib/rubylib.vcproj +32 -0
- data/rakefile.rb +8 -1
- data/res/generators/templates/application/Rakefile +1 -1
- data/res/generators/templates/application/app/layout.erb +4 -1
- data/res/generators/templates/application/build.yml +0 -1
- data/res/generators/templates/application/public/css/iphone.css +2 -2
- data/res/generators/templates/application/public/jqtouch/jqtouch-iphone.css +9 -0
- data/res/generators/templates/application/public/jqtouch/jqtouch.css +1 -5
- data/res/generators/templates/application/public/jqtouch/jqtouch.js +3 -2
- data/rhodes.gemspec +1 -1
- data/spec/perfomance_spec/app/Benchmark/benchmark.rb +4 -0
- data/spec/perfomance_spec/app/Benchmark/bulk_results.erb +13 -0
- data/spec/perfomance_spec/app/Benchmark/controller.rb +178 -0
- data/spec/perfomance_spec/app/Benchmark/create_results.erb +13 -0
- data/spec/perfomance_spec/app/Benchmark/customers.erb +35 -0
- data/spec/perfomance_spec/app/Benchmark/index.erb +9 -0
- data/spec/perfomance_spec/app/Benchmark/products.erb +25 -0
- data/spec/perfomance_spec/app/Benchmark/search_results.erb +13 -0
- data/spec/perfomance_spec/app/Customer/customer.rb +6 -0
- data/spec/perfomance_spec/app/Perftest/index.erb +5 -0
- data/spec/perfomance_spec/app/Product/index.erb +25 -0
- data/spec/perfomance_spec/app/Product/product.rb +6 -0
- data/spec/perfomance_spec/app/helpers/application_helper.rb +126 -0
- data/spec/perfomance_spec/app/helpers/browser_helper.rb +18 -0
- data/spec/perfomance_spec/rhoconfig.txt +1 -1
- data/spec/phone_spec/app/Account_s/account_s.rb +5 -2
- data/spec/phone_spec/app/Case/case.rb +1 -0
- data/spec/phone_spec/app/Case_s/case_s.rb +2 -0
- data/spec/phone_spec/app/Data/perftest.json +35 -0
- data/spec/phone_spec/app/Data/testCDATA.xml +11 -0
- data/spec/phone_spec/app/Product/product.rb +1 -1
- data/spec/phone_spec/app/{Spec → spec}/asynchttp_spec.rb +66 -17
- data/spec/phone_spec/app/{Spec → spec}/barcode_spec.rb +0 -0
- data/spec/phone_spec/app/{Spec → spec}/blobsync_spec.rb +0 -0
- data/spec/phone_spec/app/{Spec → spec}/bsearch_spec.rb +0 -0
- data/spec/phone_spec/app/{Spec → spec}/bulksync_spec.rb +0 -0
- data/spec/phone_spec/app/{Spec → spec}/contacts_spec.rb +0 -0
- data/spec/phone_spec/app/{Spec → spec}/crypt_spec.rb +0 -0
- data/spec/phone_spec/app/{Spec → spec}/date_spec.rb +0 -0
- data/spec/phone_spec/app/spec/events_spec.rb +199 -0
- data/spec/phone_spec/app/{Spec → spec}/fixtures/client_info.txt +0 -0
- data/spec/phone_spec/app/{Spec → spec}/fixtures/object_values.txt +0 -0
- data/spec/phone_spec/app/{Spec → spec}/json_spec.rb +11 -2
- data/spec/phone_spec/app/{Spec → spec}/mapview_spec.rb +0 -0
- data/spec/phone_spec/app/{Spec → spec}/nativebar_spec.rb +0 -0
- data/spec/phone_spec/app/{Spec → spec}/navbar_spec.rb +0 -0
- data/spec/phone_spec/app/{Spec → spec}/pagination/fixtures/object_values.txt +0 -0
- data/spec/phone_spec/app/{Spec → spec}/rho_controller_spec.rb +5 -0
- data/spec/phone_spec/app/{Spec → spec}/rho_spec.rb +48 -0
- data/spec/phone_spec/app/{Spec → spec}/rhofile_spec.rb +9 -6
- data/spec/phone_spec/app/{Spec → spec}/rhom_object_spec.rb +188 -9
- data/spec/phone_spec/app/{Spec → spec}/syncengine_spec.rb +0 -0
- data/spec/phone_spec/app/{Spec → spec}/xml_spec.rb +15 -0
- data/spec/phone_spec/app/{Spec → spec}/xruby_spec.rb +0 -0
- data/spec/phone_spec/app/spec_runner.rb +4 -1
- data/spec/phone_spec/build.yml +2 -1
- metadata +95 -31
- data/platform/bb/rhodes/platform/5.0/com/rho/RhoMainScreen.java +0 -36
- data/platform/bb/rhodes/platform/6.0/com/rho/BrowserAdapter5.java +0 -155
- data/platform/bb/rhodes/platform/6.0/com/rho/RhoMainScreen.java +0 -36
@@ -0,0 +1,71 @@
|
|
1
|
+
package com.rhomobile.rhodes.bluetooth;
|
2
|
+
|
3
|
+
|
4
|
+
import java.util.UUID;
|
5
|
+
|
6
|
+
public class UUIDHelper {
|
7
|
+
|
8
|
+
/** SDP 0x0001 16-bit */
|
9
|
+
public static final UUID SDP_PROTOCOL_UUID = fromUUID16(0x0001);
|
10
|
+
|
11
|
+
/** RFCOMM 0x0003 16-bit */
|
12
|
+
public static final UUID RFCOMM_PROTOCOL_UUID = fromUUID16(0x0003);
|
13
|
+
|
14
|
+
/** OBEX 0x0008 16-bit */
|
15
|
+
public static final UUID OBEX_PROTOCOL_UUID = fromUUID16(0x0008);
|
16
|
+
|
17
|
+
/** HTTP 0x000C 16-bit */
|
18
|
+
public static final UUID HTTP_PROTOCOL_UUID = fromUUID16(0x000C);
|
19
|
+
|
20
|
+
/** L2CAP 0x0100 16-bit */
|
21
|
+
public static final UUID L2CAP_PROTOCOL_UUID = fromUUID16(0x0100);
|
22
|
+
|
23
|
+
/** BNEP 0x000F 16-bit */
|
24
|
+
public static final UUID BNEP_PROTOCOL_UUID = fromUUID16(0x000F);
|
25
|
+
|
26
|
+
/** Serial Port 0x1101 16-bit */
|
27
|
+
public static final UUID SERIAL_PORT_PROTOCOL_UUID = fromUUID16(0x1101);
|
28
|
+
|
29
|
+
/** OBEX Object Push Profile 0x1105 16-bit */
|
30
|
+
public static final UUID OBEX_OBJECT_PUSH_PROTOCOL_UUID = fromUUID16(0x1105);
|
31
|
+
|
32
|
+
/** OBEX File Transfer Profile 0x1106 16-bit */
|
33
|
+
public static final UUID OBEX_FILE_TRANSFER_PROTOCOL_UUID = fromUUID16(0x1106);
|
34
|
+
|
35
|
+
/** Personal Area Networking User 0x1115 16-bit */
|
36
|
+
public static final UUID PERSONAL_AREA_NETWORKING_PROTOCOL_UUID = fromUUID16(0x1115);
|
37
|
+
|
38
|
+
private static final String UUID_BASE = "0000-1000-8000-00805F9B34FB";
|
39
|
+
|
40
|
+
private static final int MASK_UUID16 = 0x0000FFFF;
|
41
|
+
|
42
|
+
private static final int MASK_UUID128 = 0x0000FFFF;
|
43
|
+
|
44
|
+
public static final UUID fromUUID16(int uuid16) {
|
45
|
+
|
46
|
+
String s = uuidStringFromUuid16(uuid16);
|
47
|
+
UUID uuid = UUID.fromString(s);
|
48
|
+
|
49
|
+
return uuid;
|
50
|
+
}
|
51
|
+
|
52
|
+
public static final int toUUID16(UUID uuid128) {
|
53
|
+
|
54
|
+
long bits = uuid128.getMostSignificantBits();
|
55
|
+
|
56
|
+
return (int) ((bits >> 32) & MASK_UUID128);
|
57
|
+
}
|
58
|
+
|
59
|
+
private static final String uuidStringFromUuid16(int uuid16) {
|
60
|
+
|
61
|
+
StringBuilder b = new StringBuilder();
|
62
|
+
String hex = Integer.toHexString(uuid16 & MASK_UUID16);
|
63
|
+
b.append("00000000".substring(hex.length()));
|
64
|
+
b.append(hex);
|
65
|
+
b.append('-');
|
66
|
+
b.append(UUID_BASE);
|
67
|
+
|
68
|
+
return b.toString();
|
69
|
+
}
|
70
|
+
|
71
|
+
}
|
@@ -93,7 +93,6 @@ public class ImageCapture extends RhoActivity implements SurfaceHolder.Callback,
|
|
93
93
|
public void onPictureTaken(byte[] data, Camera c) {
|
94
94
|
Logger.D(TAG, "PICTURE CALLBACK RAW");
|
95
95
|
camera.startPreview();
|
96
|
-
startAutoFocusIfExist();
|
97
96
|
}
|
98
97
|
};
|
99
98
|
|
@@ -107,7 +106,8 @@ public class ImageCapture extends RhoActivity implements SurfaceHolder.Callback,
|
|
107
106
|
switch (keyCode) {
|
108
107
|
case KeyEvent.KEYCODE_DPAD_CENTER:
|
109
108
|
case KeyEvent.KEYCODE_CAMERA:
|
110
|
-
|
109
|
+
takePictureWithAutofocus();
|
110
|
+
cameraButton.setVisibility(View.INVISIBLE);
|
111
111
|
return true;
|
112
112
|
case KeyEvent.KEYCODE_BACK:
|
113
113
|
return super.onKeyDown(keyCode, event);
|
@@ -148,7 +148,6 @@ public class ImageCapture extends RhoActivity implements SurfaceHolder.Callback,
|
|
148
148
|
camera.setParameters(p);
|
149
149
|
camera.setPreviewDisplay(holder);
|
150
150
|
camera.startPreview();
|
151
|
-
startAutoFocusIfExist();
|
152
151
|
isPreviewRunning = true;
|
153
152
|
} catch (Exception e) {
|
154
153
|
Logger.E(TAG, e.getMessage());
|
@@ -165,11 +164,16 @@ public class ImageCapture extends RhoActivity implements SurfaceHolder.Callback,
|
|
165
164
|
|
166
165
|
public void onClick(View v) {
|
167
166
|
if (v.getId() == AndroidR.id.cameraButton) {
|
168
|
-
|
167
|
+
takePictureWithAutofocus();
|
169
168
|
cameraButton.setVisibility(View.INVISIBLE);
|
170
169
|
|
171
170
|
}
|
172
171
|
}
|
172
|
+
|
173
|
+
private void takePictureWithAutofocus() {
|
174
|
+
startAutoFocus();
|
175
|
+
}
|
176
|
+
|
173
177
|
|
174
178
|
private void takePicture() {
|
175
179
|
if (!mIsActive) {
|
@@ -199,14 +203,15 @@ public class ImageCapture extends RhoActivity implements SurfaceHolder.Callback,
|
|
199
203
|
mIsActive = false;
|
200
204
|
}
|
201
205
|
|
202
|
-
|
206
|
+
private void startAutoFocus() {
|
203
207
|
//this only from API v.5 and higher
|
204
208
|
//String focus_mode = camera.getParameters().getFocusMode();
|
205
209
|
//if ((focus_mode != Camera.Parameters.FOCUS_MODE_FIXED) && (focus_mode != Camera.Parameters.FOCUS_MODE_INFINITY)) {
|
206
|
-
|
210
|
+
camera.autoFocus(this);
|
207
211
|
//}
|
208
|
-
|
212
|
+
}
|
209
213
|
|
210
214
|
public void onAutoFocus (boolean success, Camera camera) {
|
215
|
+
takePicture();
|
211
216
|
}
|
212
217
|
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
package com.rhomobile.rhodes.event;
|
2
|
+
|
3
|
+
import java.util.Date;
|
4
|
+
|
5
|
+
public class Event {
|
6
|
+
|
7
|
+
public Event(String eid) {
|
8
|
+
id = eid;
|
9
|
+
}
|
10
|
+
|
11
|
+
public String id;
|
12
|
+
public String title;
|
13
|
+
public Date startDate;
|
14
|
+
public Date endDate;
|
15
|
+
public Date lastModified;
|
16
|
+
public String location;
|
17
|
+
public String notes;
|
18
|
+
public String privacy;
|
19
|
+
}
|
@@ -0,0 +1,261 @@
|
|
1
|
+
package com.rhomobile.rhodes.event;
|
2
|
+
|
3
|
+
import java.util.Date;
|
4
|
+
import java.util.Vector;
|
5
|
+
|
6
|
+
import android.database.Cursor;
|
7
|
+
import android.content.ContentResolver;
|
8
|
+
import android.content.ContentUris;
|
9
|
+
import android.content.ContentValues;
|
10
|
+
import android.net.Uri;
|
11
|
+
import android.os.Build;
|
12
|
+
|
13
|
+
import com.rhomobile.rhodes.Capabilities;
|
14
|
+
import com.rhomobile.rhodes.Logger;
|
15
|
+
import com.rhomobile.rhodes.RhodesService;
|
16
|
+
|
17
|
+
public class EventStore {
|
18
|
+
|
19
|
+
private static final String TAG = "EventStore";
|
20
|
+
|
21
|
+
private static final String AUTHORITY = Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO ? "com.android.calendar" : "calendar";
|
22
|
+
private static final Uri EVENTS_URI = Uri.parse("content://" + AUTHORITY + "/events");
|
23
|
+
|
24
|
+
private static final String EVENTS_TITLE = "title";
|
25
|
+
private static final String EVENTS_START_DATE = "dtstart";
|
26
|
+
private static final String EVENTS_END_DATE = "dtend";
|
27
|
+
private static final String EVENTS_LOCATION = "eventLocation";
|
28
|
+
private static final String EVENTS_NOTES = "description";
|
29
|
+
private static final String EVENTS_PRIVACY = "visibility";
|
30
|
+
|
31
|
+
private static void reportFail(String name, Exception e) {
|
32
|
+
Logger.E(TAG, "Call of \"" + name + "\" failed: " + e.getMessage());
|
33
|
+
e.printStackTrace();
|
34
|
+
}
|
35
|
+
|
36
|
+
private static String dateToString(Date date) {
|
37
|
+
return String.format("%04d-%02d-%02d %02d:%02d:%02d",
|
38
|
+
date.getYear() + 1900, date.getMonth() + 1, date.getDate(),
|
39
|
+
date.getHours(), date.getMinutes(), date.getSeconds());
|
40
|
+
}
|
41
|
+
|
42
|
+
private static void checkCapabilities() throws IllegalAccessException {
|
43
|
+
if (!Capabilities.CALENDAR_ENABLED)
|
44
|
+
throw new IllegalAccessException("Capability CALENDAR disabled");
|
45
|
+
}
|
46
|
+
|
47
|
+
private static ContentResolver getContentResolver() {
|
48
|
+
return RhodesService.getInstance().getContext().getContentResolver();
|
49
|
+
}
|
50
|
+
|
51
|
+
private static long getDefaultCalendarId() {
|
52
|
+
final Cursor calendarCursor = getContentResolver().query(
|
53
|
+
Uri.parse("content://" + AUTHORITY + "/calendars"),
|
54
|
+
new String[] {"_id"},
|
55
|
+
null, null, null);
|
56
|
+
try {
|
57
|
+
if (!calendarCursor.moveToFirst())
|
58
|
+
throw new RuntimeException("No calendars found!");
|
59
|
+
long id = calendarCursor.getLong(0);
|
60
|
+
return id;
|
61
|
+
}
|
62
|
+
finally {
|
63
|
+
calendarCursor.close();
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
public static Object fetch(Date startDate, Date endDate, boolean includeRepeating) {
|
68
|
+
try {
|
69
|
+
checkCapabilities();
|
70
|
+
|
71
|
+
Logger.D(TAG, "fetch(start, end), start: " + dateToString(startDate) + ", end: " + dateToString(endDate));
|
72
|
+
|
73
|
+
Vector<Event> ret = new Vector<Event>();
|
74
|
+
|
75
|
+
ContentResolver r = getContentResolver();
|
76
|
+
|
77
|
+
Cursor eventCursor;
|
78
|
+
if (includeRepeating) {
|
79
|
+
Uri.Builder builder = Uri.parse("content://" + AUTHORITY + "/instances/when").buildUpon();
|
80
|
+
ContentUris.appendId(builder, startDate.getTime());
|
81
|
+
ContentUris.appendId(builder, endDate.getTime());
|
82
|
+
|
83
|
+
eventCursor = r.query(builder.build(),
|
84
|
+
new String[] {"event_id", EVENTS_TITLE, "begin", "end", EVENTS_LOCATION,
|
85
|
+
EVENTS_NOTES, EVENTS_PRIVACY},
|
86
|
+
null, //"Calendars._id=" + id,
|
87
|
+
null, "startDay ASC, startMinute ASC");
|
88
|
+
}
|
89
|
+
else {
|
90
|
+
String where = String.format("(%s >= ? and %s <= ?) or (%s >= ? and %s <= ?)",
|
91
|
+
EVENTS_START_DATE, EVENTS_START_DATE, EVENTS_END_DATE, EVENTS_END_DATE);
|
92
|
+
String start = Long.toString(startDate.getTime());
|
93
|
+
String end = Long.toString(endDate.getTime());
|
94
|
+
eventCursor = r.query(EVENTS_URI,
|
95
|
+
new String[] {"_id", EVENTS_TITLE, EVENTS_START_DATE, EVENTS_END_DATE,
|
96
|
+
EVENTS_LOCATION, EVENTS_NOTES, EVENTS_PRIVACY},
|
97
|
+
where, new String[] {start, end, start, end},
|
98
|
+
null);
|
99
|
+
}
|
100
|
+
if (eventCursor == null)
|
101
|
+
throw new RuntimeException("Calendar provider not found");
|
102
|
+
try {
|
103
|
+
while (eventCursor.moveToNext()) {
|
104
|
+
String eid = eventCursor.getString(0);
|
105
|
+
Event event = new Event(eid);
|
106
|
+
|
107
|
+
event.title = eventCursor.getString(1);
|
108
|
+
event.startDate = new Date(eventCursor.getLong(2));
|
109
|
+
event.endDate = new Date(eventCursor.getLong(3));
|
110
|
+
event.location = eventCursor.getString(4);
|
111
|
+
event.notes = eventCursor.getString(5);
|
112
|
+
switch (eventCursor.getInt(6)) {
|
113
|
+
case 1: event.privacy = "confidential"; break;
|
114
|
+
case 2: event.privacy = "private"; break;
|
115
|
+
case 3: event.privacy = "public"; break;
|
116
|
+
}
|
117
|
+
|
118
|
+
Logger.D(TAG, "Event: id: " + event.id +
|
119
|
+
", title: " + event.title +
|
120
|
+
", begin: " + dateToString(event.startDate) +
|
121
|
+
", end: " + dateToString(event.endDate));
|
122
|
+
|
123
|
+
ret.add(event);
|
124
|
+
}
|
125
|
+
}
|
126
|
+
finally {
|
127
|
+
eventCursor.close();
|
128
|
+
}
|
129
|
+
|
130
|
+
return ret;
|
131
|
+
}
|
132
|
+
catch (Exception e) {
|
133
|
+
reportFail("fetch(start, end)", e);
|
134
|
+
String error = e.getMessage();
|
135
|
+
return error == null ? "unknown" : error;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
public static Object fetch(String id) {
|
140
|
+
try {
|
141
|
+
checkCapabilities();
|
142
|
+
|
143
|
+
Logger.D(TAG, "fetch(id)");
|
144
|
+
|
145
|
+
ContentResolver r = getContentResolver();
|
146
|
+
|
147
|
+
Uri uri = ContentUris.withAppendedId(EVENTS_URI, Long.parseLong(id));
|
148
|
+
final Cursor eventCursor = r.query(uri,
|
149
|
+
new String[] {EVENTS_TITLE, EVENTS_START_DATE, EVENTS_END_DATE,
|
150
|
+
EVENTS_LOCATION, EVENTS_NOTES, EVENTS_PRIVACY},
|
151
|
+
null, null, null);
|
152
|
+
if (eventCursor == null)
|
153
|
+
throw new RuntimeException("Calendar provider not found");
|
154
|
+
|
155
|
+
try {
|
156
|
+
if (!eventCursor.moveToFirst()) {
|
157
|
+
Logger.D(TAG, "fetch(id): result set is empty");
|
158
|
+
return null;
|
159
|
+
}
|
160
|
+
Event event = new Event(id);
|
161
|
+
event.title = eventCursor.getString(0);
|
162
|
+
event.startDate = new Date(eventCursor.getLong(1));
|
163
|
+
event.endDate = new Date(eventCursor.getLong(2));
|
164
|
+
event.location = eventCursor.getString(3);
|
165
|
+
event.notes = eventCursor.getString(4);
|
166
|
+
switch (eventCursor.getInt(5)) {
|
167
|
+
case 1: event.privacy = "confidential"; break;
|
168
|
+
case 2: event.privacy = "private"; break;
|
169
|
+
case 3: event.privacy = "public"; break;
|
170
|
+
}
|
171
|
+
|
172
|
+
Logger.D(TAG, "Event: id: " + event.id +
|
173
|
+
", title: " + event.title +
|
174
|
+
", begin: " + dateToString(event.startDate) +
|
175
|
+
", end: " + dateToString(event.endDate));
|
176
|
+
|
177
|
+
return event;
|
178
|
+
}
|
179
|
+
finally {
|
180
|
+
eventCursor.close();
|
181
|
+
}
|
182
|
+
}
|
183
|
+
catch (Exception e) {
|
184
|
+
reportFail("fetch(id)", e);
|
185
|
+
String error = e.getMessage();
|
186
|
+
return error == null ? "unknown" : error;
|
187
|
+
}
|
188
|
+
}
|
189
|
+
|
190
|
+
public static String save(Event event) {
|
191
|
+
try {
|
192
|
+
checkCapabilities();
|
193
|
+
|
194
|
+
Logger.D(TAG, "save(event)");
|
195
|
+
|
196
|
+
ContentValues values = new ContentValues();
|
197
|
+
values.put(EVENTS_TITLE, event.title);
|
198
|
+
values.put(EVENTS_START_DATE, event.startDate.getTime());
|
199
|
+
values.put(EVENTS_END_DATE, event.endDate.getTime());
|
200
|
+
if (event.location != null)
|
201
|
+
values.put(EVENTS_LOCATION, event.location);
|
202
|
+
if (event.notes != null)
|
203
|
+
values.put(EVENTS_NOTES, event.notes);
|
204
|
+
if (event.privacy != null)
|
205
|
+
{
|
206
|
+
int privacy = 0;
|
207
|
+
if (event.privacy.equalsIgnoreCase("confidential"))
|
208
|
+
privacy = 1;
|
209
|
+
else if (event.privacy.equalsIgnoreCase("private"))
|
210
|
+
privacy = 2;
|
211
|
+
else if (event.privacy.equalsIgnoreCase("public"))
|
212
|
+
privacy = 3;
|
213
|
+
values.put(EVENTS_PRIVACY, privacy);
|
214
|
+
}
|
215
|
+
|
216
|
+
long calendarId = getDefaultCalendarId();
|
217
|
+
values.put("calendar_id", calendarId);
|
218
|
+
|
219
|
+
ContentResolver r = getContentResolver();
|
220
|
+
|
221
|
+
if (event.id == null || event.id.equalsIgnoreCase("")) {
|
222
|
+
Logger.D(TAG, "Insert new event...");
|
223
|
+
Uri euri = r.insert(EVENTS_URI, values);
|
224
|
+
event.id = Long.toString(ContentUris.parseId(euri));
|
225
|
+
Logger.D(TAG, "Event id of event is " + event.id);
|
226
|
+
}
|
227
|
+
else {
|
228
|
+
Logger.D(TAG, "Update event...");
|
229
|
+
Uri uri = ContentUris.withAppendedId(EVENTS_URI, Long.parseLong(event.id));
|
230
|
+
r.update(uri, values, null, null);
|
231
|
+
Logger.D(TAG, "Event updated");
|
232
|
+
}
|
233
|
+
|
234
|
+
return null;
|
235
|
+
}
|
236
|
+
catch (Exception e) {
|
237
|
+
reportFail("save", e);
|
238
|
+
String error = e.getMessage();
|
239
|
+
return error == null ? "unknown" : error;
|
240
|
+
}
|
241
|
+
}
|
242
|
+
|
243
|
+
public static String delete(String id) {
|
244
|
+
try {
|
245
|
+
checkCapabilities();
|
246
|
+
|
247
|
+
Logger.D(TAG, "delete(id)");
|
248
|
+
|
249
|
+
int rows = getContentResolver().delete(EVENTS_URI, "_id=?", new String[] {id});
|
250
|
+
Logger.D(TAG, String.format("%d rows deleted", rows));
|
251
|
+
|
252
|
+
return null;
|
253
|
+
}
|
254
|
+
catch (Exception e) {
|
255
|
+
reportFail("delete", e);
|
256
|
+
String error = e.getMessage();
|
257
|
+
return error == null ? "unknown" : error;
|
258
|
+
}
|
259
|
+
}
|
260
|
+
|
261
|
+
}
|
@@ -291,15 +291,17 @@ public class SimpleMainView implements MainView {
|
|
291
291
|
group = new LinearLayout(ctx);
|
292
292
|
group.setGravity(gravity);
|
293
293
|
group.setOrientation(LinearLayout.HORIZONTAL);
|
294
|
-
group.setLayoutParams(new LinearLayout.LayoutParams(
|
294
|
+
group.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, FILL_PARENT, 1));
|
295
295
|
bottom.addView(group);
|
296
296
|
}
|
297
297
|
group.addView(button);
|
298
298
|
}
|
299
299
|
|
300
300
|
// Last group should have gravity RIGHT
|
301
|
-
if (group != null)
|
301
|
+
if (group != null) {
|
302
302
|
group.setGravity(Gravity.RIGHT);
|
303
|
+
bottom.requestLayout();
|
304
|
+
}
|
303
305
|
}
|
304
306
|
|
305
307
|
webView.requestFocus();
|
@@ -131,7 +131,7 @@ public class TabbedMainView implements MainView {
|
|
131
131
|
tabIndex = Integer.parseInt(tabId);
|
132
132
|
TabData data = tabData.elementAt(tabIndex);
|
133
133
|
if (data.reload || !data.loaded) {
|
134
|
-
|
134
|
+
RhodesService.loadUrl(data.url);
|
135
135
|
data.loaded = true;
|
136
136
|
}
|
137
137
|
}
|
@@ -162,7 +162,7 @@ public class TabbedMainView implements MainView {
|
|
162
162
|
throw new IllegalArgumentException("'action' should be String");
|
163
163
|
|
164
164
|
String label = (String)labelObj;
|
165
|
-
String action =
|
165
|
+
String action = (String)actionObj;
|
166
166
|
String icon = null;
|
167
167
|
boolean reload = false;
|
168
168
|
|