rhodes 2.1.0 → 2.2.0.beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|