rhodes 2.2.4.beta.1 → 2.2.5.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 +10 -0
- data/Rakefile +119 -3
- data/lib/build/jake.rb +15 -1
- data/lib/framework/dateME.rb +6 -1
- data/lib/framework/rho/render.rb +18 -15
- data/lib/framework/rho/rho.rb +105 -43
- data/lib/framework/rho/rhoapplication.rb +1 -1
- data/lib/framework/rho/rhocontact.rb +41 -13
- data/lib/framework/rho/rhocontroller.rb +10 -1
- data/lib/framework/rho/rhoevent_c.rb +6 -1
- data/lib/framework/rho/rhosupport.rb +1 -1
- data/lib/framework/rhodes.rb +1 -1
- data/lib/framework/rholang/rhomsg_de.rb +1 -1
- data/lib/framework/rholang/rhomsg_es.rb +1 -1
- data/lib/framework/rholang/rhomsg_it.rb +28 -0
- data/lib/framework/rhom/rhom.rb +6 -0
- data/lib/framework/rhom/rhom_model.rb +14 -7
- data/lib/framework/rhom/rhom_object_factory.rb +121 -56
- data/lib/framework/version.rb +1 -1
- data/lib/rhodes.rb +1 -1
- data/platform/android/Rhodes/AndroidManifest.full.xml +62 -0
- data/platform/android/Rhodes/AndroidManifest.xml +3 -34
- data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +17 -2
- data/platform/android/Rhodes/jni/src/alert.cpp +16 -0
- data/platform/android/Rhodes/jni/src/callbacks.cpp +27 -3
- data/platform/android/Rhodes/jni/src/nativebar.cpp +3 -0
- data/platform/android/Rhodes/jni/src/nativeview.cpp +131 -1
- data/platform/android/Rhodes/jni/src/phonebook.cpp +102 -41
- data/platform/android/Rhodes/jni/src/rhodes.cpp +113 -32
- data/platform/android/Rhodes/jni/src/ringtones.cpp +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +1 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +9 -8
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +184 -49
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java +49 -25
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +104 -57
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +36 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java +24 -14
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +7 -8
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +185 -3
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/nativeview/RhoNativeViewManager.java +54 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +107 -14
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +72 -24
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +22 -21
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java +91 -11
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +10 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/ChromeClientNew.java +11 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebSettingsNew.java +10 -0
- data/platform/android/build/android.rake +50 -9
- data/platform/android/build/librhocommon_build.files +1 -0
- data/platform/bb/Hsqldb/src/org/hsqldb/Parser.java +3 -2
- data/platform/bb/Hsqldb/src/org/hsqldb/SchemaManager.java +3 -1
- data/platform/bb/Hsqldb/src/org/hsqldb/Session.java +7 -0
- data/platform/bb/Hsqldb/src/org/hsqldb/Tokenizer.java +2 -2
- data/platform/bb/RubyVM/RubyVM.jdp +1 -0
- data/platform/bb/RubyVM/src/com/rho/AppBuildConfig.java +22 -0
- data/platform/bb/RubyVM/src/com/rho/RhoRuby.java +5 -0
- data/platform/bb/RubyVM/src/com/rho/net/RhoConnection.java +1 -1
- data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +51 -4
- data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +21 -10
- data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +82 -33
- data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +59 -6
- data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyFloat_Methods.java +5 -0
- data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyString_Methods.java +19 -7
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/ArrayPacker.java +1 -1
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyFloat.java +5 -0
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyString.java +55 -11
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyTime.java +18 -2
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyKernelModule.java +8 -5
- data/platform/bb/RubyVM/src/j2me/lang/CharacterMe.java +1 -1
- data/platform/bb/RubyVM/src/j2me/util/StringParser.java +2 -0
- data/platform/bb/build/RubyVM_build.files +1 -0
- data/platform/bb/build/bb.rake +21 -2
- data/platform/bb/rhodes/platform/4.7/com/rho/RhoMainScreen.java +3 -3
- data/platform/bb/rhodes/platform/common/com/rho/RhoMainScreen.java +1 -1
- data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +1 -2
- data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +15 -16
- data/platform/bb/rhodes/src/com/rho/rubyext/RhoCalendar.java +4 -0
- data/platform/bb/rhodes/src/com/rho/rubyext/System.java +58 -0
- data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +90 -4
- data/platform/iphone/Classes/AppManager/AppManager.m +43 -5
- data/platform/iphone/Classes/Event/Event.h +2 -0
- data/platform/iphone/Classes/Event/Event.m +12 -1
- data/platform/iphone/Classes/GeoLocation/LocationController.m +9 -3
- data/platform/iphone/Classes/MapView/MapViewController.m +20 -9
- data/platform/iphone/Classes/NativeBar.m +27 -0
- data/platform/iphone/Classes/Phonebook/phonebook.m +17 -0
- data/platform/iphone/Classes/RhoAlert.m +61 -1
- data/platform/iphone/Classes/RhoMainView.h +1 -0
- data/platform/iphone/Classes/Rhodes.h +2 -0
- data/platform/iphone/Classes/Rhodes.m +108 -1
- data/platform/iphone/Classes/SimpleMainView.h +4 -0
- data/platform/iphone/Classes/SimpleMainView.m +30 -3
- data/platform/iphone/Classes/SplashViewController.m +3 -1
- data/platform/iphone/Classes/TabbedMainView.h +2 -0
- data/platform/iphone/Classes/TabbedMainView.m +63 -11
- data/platform/iphone/Classes/rho/net/NetRequestImpl.m +26 -0
- data/platform/iphone/Info.plist +12 -1
- data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +8 -0
- data/platform/iphone/rbuild/iphone.rake +181 -25
- data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +5 -5
- data/platform/shared/common/IRhoThreadImpl.h +1 -1
- data/platform/shared/common/PosixThreadImpl.cpp +5 -3
- data/platform/shared/common/PosixThreadImpl.h +1 -1
- data/platform/shared/common/RhoFilePath.h +11 -0
- data/platform/shared/common/RhoNativeViewManager.h +17 -0
- data/platform/shared/common/RhoThread.h +1 -1
- data/platform/shared/common/RhodesApp.cpp +29 -8
- data/platform/shared/common/ThreadQueue.cpp +5 -3
- data/platform/shared/common/ThreadQueue.h +2 -1
- data/platform/shared/common/app_build_configs.c +25 -0
- data/platform/shared/common/app_build_configs.h +11 -0
- data/platform/shared/net/AsyncHttp.cpp +5 -5
- data/platform/shared/net/CURLNetRequest.cpp +25 -7
- data/platform/shared/net/CURLNetRequest.h +2 -1
- data/platform/shared/net/HttpServer.cpp +28 -0
- data/platform/shared/ruby/ext/nativebar/nativebar.i +3 -0
- data/platform/shared/ruby/ext/nativebar/nativebar_wrap.c +26 -1
- data/platform/shared/ruby/ext/rho/rhoruby.c +6 -0
- data/platform/shared/ruby/ext/rho/rhoruby.h +1 -0
- data/platform/shared/ruby/ext/rho/rhosupport.c +15 -2
- data/platform/shared/ruby/ext/syncengine/syncengine.i +14 -2
- data/platform/shared/ruby/ext/syncengine/syncengine_wrap.c +97 -2
- data/platform/shared/ruby/ext/system/system.i +13 -0
- data/platform/shared/ruby/ext/system/system_wrap.c +104 -1
- data/platform/shared/rubyext/RhoAppAdapter.cpp +7 -0
- data/platform/shared/sync/SyncEngine.cpp +43 -3
- data/platform/shared/sync/SyncEngine.h +13 -0
- data/platform/shared/sync/SyncNotify.cpp +41 -23
- data/platform/shared/sync/SyncNotify.h +18 -4
- data/platform/shared/sync/SyncSource.cpp +52 -14
- data/platform/shared/sync/SyncSource.h +1 -0
- data/platform/shared/sync/SyncThread.cpp +29 -9
- data/platform/shared/sync/SyncThread.h +4 -2
- data/platform/wm/RhoLib/RhoLib.vcproj +8 -0
- data/platform/wm/build/build_inf.js +15 -9
- data/platform/wm/build/wm.rake +10 -5
- data/platform/wm/rhodes/Alert.cpp +10 -0
- data/platform/wm/rhodes/Alert.h +3 -3
- data/platform/wm/rhodes/MainWindow.cpp +171 -26
- data/platform/wm/rhodes/MainWindow.h +23 -1
- data/platform/wm/rhodes/MetaHandler.cpp +192 -0
- data/platform/wm/rhodes/MetaHandler.h +31 -0
- data/platform/wm/rhodes/RhoNativeViewManager.cpp +126 -0
- data/platform/wm/rhodes/RhoNativeViewManagerWM.h +20 -0
- data/platform/wm/rhodes/Rhodes.cpp +91 -2
- data/platform/wm/rhodes/Rhodes.rc +15 -6
- data/platform/wm/rhodes/SyncStatusDlg.cpp +32 -0
- data/platform/wm/rhodes/SyncStatusDlg.h +29 -0
- data/platform/wm/rhodes/resource.h +5 -2
- data/platform/wm/rhodes/rho/common/RhoThreadImpl.cpp +3 -1
- data/platform/wm/rhodes/rho/common/RhoThreadImpl.h +1 -1
- data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +146 -14
- data/platform/wm/rhodes/rhodes.vcproj +28 -0
- data/rakefile.rb +119 -3
- data/res/build-tools/iphonesim/README +58 -0
- data/res/build-tools/iphonesim/Source/iPhoneSimulator.h +43 -0
- data/res/build-tools/iphonesim/Source/iPhoneSimulator.m +224 -0
- data/res/build-tools/iphonesim/Source/main.m +52 -0
- data/res/build-tools/iphonesim/Source/nsprintf.h +3 -0
- data/res/build-tools/iphonesim/Source/nsprintf.m +42 -0
- data/res/build-tools/iphonesim/build/Release/iphonesim +0 -0
- data/res/build-tools/iphonesim/iPhoneSimulatorRemoteClient/iPhoneSimulatorRemoteClient.h +124 -0
- data/res/build-tools/iphonesim/iphonesim.xcodeproj/project.pbxproj +261 -0
- data/res/build-tools/iphonesim/iphonesim_Prefix.pch +7 -0
- data/res/generators/rhogen.rb +5 -0
- data/res/generators/templates/application/app/layout.erb +7 -13
- data/res/generators/templates/application/app/loading.png +0 -0
- data/res/generators/templates/application/build.yml +3 -0
- data/res/generators/templates/application/icon/icon114.png +0 -0
- data/res/generators/templates/application/icon/icon57.png +0 -0
- data/res/generators/templates/application/icon/icon72.png +0 -0
- data/res/generators/templates/application/public/css/iphone.css +96 -0
- data/res/generators/templates/application/public/images/backButton.png +0 -0
- data/res/generators/templates/application/public/jqtouch/jqtouch.js +2 -1
- data/res/generators/templates/application/rhoconfig.txt +2 -0
- data/rhodes.gemspec +1 -1
- data/spec/phone_spec/app/spec/array_pack_spec.rb +108 -0
- data/spec/phone_spec/app/spec/bulksync_spec.rb +1 -0
- data/spec/phone_spec/app/spec/date_spec.rb +27 -0
- data/spec/phone_spec/app/spec/fixtures/classes.rb +91 -0
- data/spec/phone_spec/app/spec/lstrip_spec.rb +57 -0
- data/spec/phone_spec/app/spec/rho_spec.rb +50 -19
- data/spec/phone_spec/app/spec/rhom_object_spec.rb +78 -0
- data/spec/phone_spec/app/spec/rstrip_spec.rb +51 -0
- data/spec/phone_spec/app/spec/strip_spec.rb +50 -0
- data/spec/phone_spec/app/spec/syncengine_spec.rb +46 -3
- data/spec/phone_spec/app/spec_runner.rb +6 -0
- metadata +34 -4
|
@@ -6,7 +6,11 @@ module Rho
|
|
|
6
6
|
def self.find(*args)
|
|
7
7
|
if args.first == :all
|
|
8
8
|
params = {}
|
|
9
|
-
|
|
9
|
+
if args.length >= 2 and args[1].is_a? Hash
|
|
10
|
+
args[1].each do |k,v|
|
|
11
|
+
params[k.to_s] = v
|
|
12
|
+
end
|
|
13
|
+
end
|
|
10
14
|
|
|
11
15
|
params['start_date'] = MIN_TIME if params['start_date'].nil? or params['start_date'] < MIN_TIME
|
|
12
16
|
params['end_date'] = MAX_TIME if params['end_date'].nil? or params['end_date'] > MAX_TIME
|
|
@@ -30,6 +34,7 @@ module Rho
|
|
|
30
34
|
end
|
|
31
35
|
|
|
32
36
|
def self.create!(event)
|
|
37
|
+
event['id'] = nil #indicate that event should be created
|
|
33
38
|
Rho::Calendar.save(event)
|
|
34
39
|
end
|
|
35
40
|
|
|
@@ -79,7 +79,7 @@ module Rho
|
|
|
79
79
|
params.merge!(parse_query_parameters(req['request-query']))
|
|
80
80
|
end
|
|
81
81
|
unless req['headers'].nil? or req['headers']['Content-Type'].nil?
|
|
82
|
-
|
|
82
|
+
unless req['headers']['Content-Type'].index('application/x-www-form-urlencoded').nil?
|
|
83
83
|
params.merge!(parse_query_parameters(req['request-body']))
|
|
84
84
|
end
|
|
85
85
|
end
|
data/lib/framework/rhodes.rb
CHANGED
|
@@ -15,7 +15,7 @@ module Rho
|
|
|
15
15
|
'log_menu' => "Log",
|
|
16
16
|
'close_menu' => "Cerrar",
|
|
17
17
|
'get_link_menu' => "Obtener vínculo",
|
|
18
|
-
'open_link_menu' => "
|
|
18
|
+
'open_link_menu' => "Abrir vínculo",
|
|
19
19
|
'email_menu' => "Email",
|
|
20
20
|
'call_menu' => "Llamar",
|
|
21
21
|
'sms_menu' => "SMS",
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Rho
|
|
2
|
+
class RhoMessages
|
|
3
|
+
LocalMessages = {
|
|
4
|
+
'sync_failed_for' => "Sync failed for ",
|
|
5
|
+
'details' => " Details: ",
|
|
6
|
+
'sync_completed' => "Sync completed.",
|
|
7
|
+
'syncronizing' => "Synchronizing ",
|
|
8
|
+
'syncronizing_data' => "Synchronizing data...",
|
|
9
|
+
|
|
10
|
+
'home_menu' => "Home",
|
|
11
|
+
'refresh_menu' => "Refresh",
|
|
12
|
+
'back_menu' => "Back",
|
|
13
|
+
'sync_menu' => "Sync",
|
|
14
|
+
'options_menu' => "Options",
|
|
15
|
+
'log_menu' => "Log",
|
|
16
|
+
'close_menu' => "Close",
|
|
17
|
+
'get_link_menu' => "Apri collegamento",
|
|
18
|
+
'open_link_menu' => "Apri collegamento",
|
|
19
|
+
'email_menu' => "Email",
|
|
20
|
+
'call_menu' => "Call",
|
|
21
|
+
'sms_menu' => "SMS",
|
|
22
|
+
'add_contacts_menu' => "Add to Contacts",
|
|
23
|
+
|
|
24
|
+
'hide' => 'Hide'
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
end # RhoMessages
|
|
28
|
+
end # Rho
|
data/lib/framework/rhom/rhom.rb
CHANGED
|
@@ -42,6 +42,7 @@ module Rhom
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def database_client_reset
|
|
45
|
+
old_interval = SyncEngine.set_pollinterval(0)
|
|
45
46
|
SyncEngine.stop_sync
|
|
46
47
|
|
|
47
48
|
params = ["", "", 0]
|
|
@@ -59,9 +60,12 @@ module Rhom
|
|
|
59
60
|
|
|
60
61
|
hash_migrate = {}
|
|
61
62
|
::Rho::RHO.init_schema_sources(hash_migrate)
|
|
63
|
+
|
|
64
|
+
SyncEngine.set_pollinterval(old_interval)
|
|
62
65
|
end
|
|
63
66
|
|
|
64
67
|
def database_full_reset(reset_client_info=false)
|
|
68
|
+
old_interval = SyncEngine.set_pollinterval(0)
|
|
65
69
|
SyncEngine.stop_sync
|
|
66
70
|
|
|
67
71
|
::Rho::RHO.get_user_db().execute_sql("UPDATE client_info SET reset=1")
|
|
@@ -77,6 +81,8 @@ module Rhom
|
|
|
77
81
|
|
|
78
82
|
hash_migrate = {}
|
|
79
83
|
::Rho::RHO.init_schema_sources(hash_migrate)
|
|
84
|
+
|
|
85
|
+
SyncEngine.set_pollinterval(old_interval)
|
|
80
86
|
end
|
|
81
87
|
|
|
82
88
|
def database_full_reset_and_logout
|
|
@@ -8,6 +8,7 @@ module Rhom
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def get_model_params
|
|
11
|
+
init_defaults
|
|
11
12
|
BaseModel.model_params
|
|
12
13
|
end
|
|
13
14
|
|
|
@@ -19,17 +20,23 @@ module Rhom
|
|
|
19
20
|
false
|
|
20
21
|
end
|
|
21
22
|
|
|
22
|
-
def
|
|
23
|
-
if fixed_schema?
|
|
24
|
-
|
|
25
|
-
BaseModel.model_params ||= {}
|
|
26
|
-
|
|
23
|
+
def init_defaults
|
|
24
|
+
if fixed_schema?
|
|
25
|
+
BaseModel.model_params ||= {}
|
|
27
26
|
BaseModel.model_params['schema'] ||= {}
|
|
28
27
|
BaseModel.model_params['schema']['property'] ||= {}
|
|
29
|
-
BaseModel.model_params['schema']['property'][name.to_s] = [type,option]
|
|
30
28
|
else
|
|
31
|
-
|
|
29
|
+
BaseModel.model_params ||= {}
|
|
30
|
+
BaseModel.model_params ||= {}
|
|
32
31
|
BaseModel.model_params['property'] ||= {}
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def property(name,type=:string,option=nil)
|
|
36
|
+
init_defaults
|
|
37
|
+
if fixed_schema?()
|
|
38
|
+
BaseModel.model_params['schema']['property'][name.to_s] = [type,option]
|
|
39
|
+
else
|
|
33
40
|
BaseModel.model_params['property'][name.to_s] = [type,option]
|
|
34
41
|
end
|
|
35
42
|
|
|
@@ -88,31 +88,35 @@ module Rhom
|
|
|
88
88
|
end
|
|
89
89
|
end
|
|
90
90
|
|
|
91
|
-
@@metadata = {}
|
|
92
91
|
class << self
|
|
93
92
|
|
|
94
|
-
def clean_cached_metadata
|
|
95
|
-
src_name = get_source_name()
|
|
96
|
-
@@metadata[src_name] = nil
|
|
97
|
-
end
|
|
98
|
-
|
|
99
93
|
def metadata
|
|
100
94
|
src_name = get_source_name()
|
|
101
|
-
return
|
|
95
|
+
return Rho::RhoController.cached_metadata[src_name] if Rho::RhoController.cached_metadata.has_key?(src_name)
|
|
96
|
+
|
|
102
97
|
db = ::Rho::RHO.get_src_db(src_name)
|
|
103
98
|
result = db.select_from_table('sources', 'metadata', {"name"=>src_name} )
|
|
104
99
|
if result && result.length > 0 && result[0]['metadata']
|
|
105
|
-
|
|
100
|
+
Rho::RhoController.cached_metadata[src_name] = Rho::JSON.parse(result[0]['metadata'])
|
|
101
|
+
else
|
|
102
|
+
Rho::RhoController.cached_metadata[src_name] = nil
|
|
106
103
|
end
|
|
107
104
|
|
|
108
|
-
|
|
105
|
+
Rho::RhoController.cached_metadata[src_name]
|
|
109
106
|
end
|
|
110
107
|
|
|
111
108
|
def count
|
|
112
109
|
db = ::Rho::RHO.get_src_db(get_source_name)
|
|
113
110
|
|
|
114
111
|
if is_schema_source()
|
|
115
|
-
res = db.select_from_table(get_schema_table_name(),'object').length
|
|
112
|
+
#res = db.select_from_table(get_schema_table_name(),'object').length
|
|
113
|
+
db_res = db.execute_sql("SELECT COUNT(*) FROM " + get_schema_table_name())
|
|
114
|
+
#puts "db_res : #{db_res}"
|
|
115
|
+
if db_res && db_res.length() > 0
|
|
116
|
+
res = db_res[0].values[0]
|
|
117
|
+
else
|
|
118
|
+
res = 0
|
|
119
|
+
end
|
|
116
120
|
else
|
|
117
121
|
res = db.select_from_table('object_values','object', {"source_id"=>get_source_id}, {"distinct"=>true}).length
|
|
118
122
|
end
|
|
@@ -276,7 +280,7 @@ module Rhom
|
|
|
276
280
|
return sql, vals
|
|
277
281
|
end
|
|
278
282
|
|
|
279
|
-
def find_objects(condition_hash, op, limit, offset, order_attr)
|
|
283
|
+
def find_objects(condition_hash, op, limit, offset, order_attr, &block)
|
|
280
284
|
nulls_cond = {}
|
|
281
285
|
if op == 'AND'
|
|
282
286
|
condition_hash.each do |key,value|
|
|
@@ -288,7 +292,7 @@ module Rhom
|
|
|
288
292
|
end
|
|
289
293
|
|
|
290
294
|
strLimit = nil
|
|
291
|
-
if !order_attr
|
|
295
|
+
if !(block_given? || order_attr)
|
|
292
296
|
strLimit = " LIMIT " + limit.to_s + " OFFSET " + offset.to_s if limit && offset && condition_hash.length <= 1 && nulls_cond.length == 0
|
|
293
297
|
end
|
|
294
298
|
|
|
@@ -311,8 +315,8 @@ module Rhom
|
|
|
311
315
|
|
|
312
316
|
mapObjs[ rec['object'] ] = 1
|
|
313
317
|
listObjs << rec
|
|
314
|
-
|
|
315
|
-
bStop = !order_attr && limit && offset && nulls_cond.length == 0 && listObjs.length >= offset + limit
|
|
318
|
+
|
|
319
|
+
bStop = !(block_given? || order_attr) && limit && offset && nulls_cond.length == 0 && listObjs.length >= offset + limit
|
|
316
320
|
break if bStop
|
|
317
321
|
end
|
|
318
322
|
|
|
@@ -357,7 +361,7 @@ module Rhom
|
|
|
357
361
|
res = []
|
|
358
362
|
listObjs.each do |obj|
|
|
359
363
|
nIndex += 1
|
|
360
|
-
next if !order_attr && offset && nIndex < offset && !strLimit
|
|
364
|
+
next if !(block_given? || order_attr) && offset && nIndex < offset && !strLimit
|
|
361
365
|
|
|
362
366
|
bSkip = false
|
|
363
367
|
#obj_value = ::Rhom::RhomDbAdapter.get_value_for_sql_stmt(obj['object'])
|
|
@@ -383,11 +387,11 @@ module Rhom
|
|
|
383
387
|
res
|
|
384
388
|
end
|
|
385
389
|
|
|
386
|
-
def find_objects_ex(condition_ar, op, limit, offset, order_attr)
|
|
390
|
+
def find_objects_ex(condition_ar, op, limit, offset, order_attr, &block)
|
|
387
391
|
mapObjs = {}
|
|
388
392
|
listObjs = []
|
|
389
393
|
condition_ar.each do |cond|
|
|
390
|
-
res = find_objects(cond[:conditions], cond[:op], limit, offset, order_attr)
|
|
394
|
+
res = find_objects(cond[:conditions], cond[:op], limit, offset, order_attr, &block)
|
|
391
395
|
|
|
392
396
|
if listObjs.length() == 0
|
|
393
397
|
if condition_ar.length() > 1
|
|
@@ -423,7 +427,7 @@ module Rhom
|
|
|
423
427
|
end
|
|
424
428
|
|
|
425
429
|
def find_bycondhash(args, &block)
|
|
426
|
-
#puts 'find_bycondhash start'
|
|
430
|
+
#puts 'find_bycondhash start' + (block_given? ? 'with block' : "")
|
|
427
431
|
|
|
428
432
|
condition_hash = {}
|
|
429
433
|
select_arr = nil
|
|
@@ -442,7 +446,8 @@ module Rhom
|
|
|
442
446
|
offset = args[1][:offset] ? args[1][:offset].to_i : 0
|
|
443
447
|
end
|
|
444
448
|
select_arr = args[1][:select] if args[1][:select]
|
|
445
|
-
|
|
449
|
+
|
|
450
|
+
order_dir = args[1][:orderdir]
|
|
446
451
|
order_attr = args[1][:order]
|
|
447
452
|
|
|
448
453
|
op = args[1][:op].upcase if args[1][:op]
|
|
@@ -456,9 +461,14 @@ module Rhom
|
|
|
456
461
|
attribs = nil
|
|
457
462
|
if select_arr
|
|
458
463
|
attribs = select_arr
|
|
459
|
-
if order_attr
|
|
464
|
+
if order_attr
|
|
460
465
|
order_attr_arr = []
|
|
461
|
-
|
|
466
|
+
if order_attr.is_a?(Array)
|
|
467
|
+
order_attr_arr = order_attr
|
|
468
|
+
else
|
|
469
|
+
order_attr_arr.push(order_attr)
|
|
470
|
+
end
|
|
471
|
+
|
|
462
472
|
attribs = attribs | order_attr_arr
|
|
463
473
|
end
|
|
464
474
|
else
|
|
@@ -472,9 +482,9 @@ module Rhom
|
|
|
472
482
|
begin
|
|
473
483
|
listObjs = []
|
|
474
484
|
if condition_hash.is_a?(Hash)
|
|
475
|
-
listObjs = find_objects(condition_hash, op, limit, offset, order_attr)
|
|
485
|
+
listObjs = find_objects(condition_hash, op, limit, offset, order_attr, &block)
|
|
476
486
|
else
|
|
477
|
-
listObjs = find_objects_ex(condition_hash, op, limit, offset, order_attr)
|
|
487
|
+
listObjs = find_objects_ex(condition_hash, op, limit, offset, order_attr, &block)
|
|
478
488
|
end
|
|
479
489
|
|
|
480
490
|
nCount = 0;
|
|
@@ -538,24 +548,16 @@ module Rhom
|
|
|
538
548
|
#end
|
|
539
549
|
|
|
540
550
|
ret_list << new_obj
|
|
541
|
-
break if !order_attr && limit && ret_list.length >= limit
|
|
551
|
+
break if !(block_given? || order_attr) && limit && ret_list.length >= limit
|
|
542
552
|
end
|
|
543
553
|
end
|
|
544
554
|
ensure
|
|
545
555
|
db.unlock_db
|
|
546
556
|
end
|
|
547
557
|
|
|
548
|
-
|
|
549
|
-
ret_list.sort! { |x,y|
|
|
550
|
-
vx = x.vars[order_attr.to_sym()]
|
|
551
|
-
vy = y.vars[order_attr.to_sym()]
|
|
552
|
-
res = vx && vy ? (block_given? ? yield(vx,vy): vx <=> vy) : 0
|
|
553
|
-
res *= -1 if order_dir && order_dir == 'DESC'
|
|
554
|
-
res
|
|
555
|
-
}
|
|
556
|
-
end
|
|
558
|
+
order_array(ret_list, order_attr,order_dir, &block)
|
|
557
559
|
|
|
558
|
-
if order_attr && limit
|
|
560
|
+
if (block_given? || order_attr) && limit
|
|
559
561
|
ret_list = ret_list.slice(offset,limit)
|
|
560
562
|
end
|
|
561
563
|
|
|
@@ -570,6 +572,70 @@ module Rhom
|
|
|
570
572
|
ret_list
|
|
571
573
|
end
|
|
572
574
|
|
|
575
|
+
def order_array(ret_list, order_attr, order_dir, &block)
|
|
576
|
+
if order_attr
|
|
577
|
+
ret_list.sort! { |x,y|
|
|
578
|
+
|
|
579
|
+
res = 0
|
|
580
|
+
if order_attr.is_a?(Array)
|
|
581
|
+
order_attr.each_index { |i|
|
|
582
|
+
vx = x.vars[order_attr[i].to_sym()]
|
|
583
|
+
vy = y.vars[order_attr[i].to_sym()]
|
|
584
|
+
res = vx && vy ? (block_given? ? yield(vx,vy): vx <=> vy) : 0
|
|
585
|
+
|
|
586
|
+
dir = 'ASC'
|
|
587
|
+
if order_dir && order_dir.is_a?(Array) && i < order_dir.length()
|
|
588
|
+
dir = order_dir[i].upcase()
|
|
589
|
+
else
|
|
590
|
+
dir = order_dir.upcase() if order_dir && order_dir.is_a?(String)
|
|
591
|
+
end
|
|
592
|
+
|
|
593
|
+
res *= -1 if dir && dir == 'DESC'
|
|
594
|
+
break if res != 0
|
|
595
|
+
}
|
|
596
|
+
else
|
|
597
|
+
vx = x.vars[order_attr.to_sym()]
|
|
598
|
+
vy = y.vars[order_attr.to_sym()]
|
|
599
|
+
res = vx && vy ? (block_given? ? yield(vx,vy): vx <=> vy) : 0
|
|
600
|
+
res *= -1 if order_dir && order_dir == 'DESC'
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
res
|
|
604
|
+
}
|
|
605
|
+
elsif block_given?
|
|
606
|
+
ret_list.sort! { |x,y|
|
|
607
|
+
res = yield(x,y)
|
|
608
|
+
res *= -1 if order_dir && order_dir == 'DESC'
|
|
609
|
+
res
|
|
610
|
+
}
|
|
611
|
+
end
|
|
612
|
+
|
|
613
|
+
end
|
|
614
|
+
|
|
615
|
+
def make_sql_order(params)
|
|
616
|
+
order_attr = params[:order]
|
|
617
|
+
order_dir = params[:orderdir]
|
|
618
|
+
|
|
619
|
+
res = ""
|
|
620
|
+
|
|
621
|
+
if order_attr && order_attr.is_a?(Array)
|
|
622
|
+
order_attr.each_index do |i|
|
|
623
|
+
res += "," if i > 0
|
|
624
|
+
|
|
625
|
+
res += "\"#{order_attr[i]}\" "
|
|
626
|
+
if order_dir && order_dir.is_a?(Array) && i < order_dir.length()
|
|
627
|
+
res += order_dir[i].upcase()
|
|
628
|
+
else
|
|
629
|
+
res += order_dir && order_dir.is_a?(String) ? order_dir.upcase() : "ASC"
|
|
630
|
+
end
|
|
631
|
+
end
|
|
632
|
+
else
|
|
633
|
+
res = "\"#{order_attr}\" " + (order_dir ? order_dir.upcase() : "")
|
|
634
|
+
end
|
|
635
|
+
|
|
636
|
+
res
|
|
637
|
+
end
|
|
638
|
+
|
|
573
639
|
# retrieve a single record if object id provided, otherwise return
|
|
574
640
|
# full list corresponding to factory's source id
|
|
575
641
|
def find(*args, &block)
|
|
@@ -629,8 +695,9 @@ module Rhom
|
|
|
629
695
|
end
|
|
630
696
|
|
|
631
697
|
select_arr = args[1][:select] if args[1][:select]
|
|
632
|
-
order_dir = args[1][:orderdir]
|
|
698
|
+
order_dir = args[1][:orderdir]
|
|
633
699
|
order_attr = args[1][:order]
|
|
700
|
+
|
|
634
701
|
end
|
|
635
702
|
|
|
636
703
|
if args.first == :first
|
|
@@ -639,7 +706,7 @@ module Rhom
|
|
|
639
706
|
end
|
|
640
707
|
|
|
641
708
|
strLimit = nil
|
|
642
|
-
if !
|
|
709
|
+
if !block_given?
|
|
643
710
|
strLimit = " LIMIT " + limit.to_s + " OFFSET " + offset.to_s if limit && offset
|
|
644
711
|
end
|
|
645
712
|
|
|
@@ -670,10 +737,10 @@ module Rhom
|
|
|
670
737
|
objects = [ { 'object' => strip_braces(args.first.to_s) } ]
|
|
671
738
|
|
|
672
739
|
else
|
|
673
|
-
if !block_given? && order_attr
|
|
740
|
+
if !block_given? && order_attr && order_attr.is_a?(String)
|
|
674
741
|
if !args[1][:dont_ignore_missed_attribs]
|
|
675
742
|
sql << "SELECT object FROM object_values WHERE source_id=? "
|
|
676
|
-
sql << " AND attrib=? ORDER BY \"value\" " + order_dir
|
|
743
|
+
sql << " AND attrib=? ORDER BY \"value\" " + ( order_dir ? order_dir : "")
|
|
677
744
|
values << get_source_id
|
|
678
745
|
values << order_attr
|
|
679
746
|
end
|
|
@@ -753,7 +820,7 @@ module Rhom
|
|
|
753
820
|
sql << " FROM object_values ov \n"
|
|
754
821
|
sql << "where " + ::Rhom::RhomDbAdapter.where_str(where_cond) + "\n" if where_cond and where_cond.length > 0
|
|
755
822
|
sql << "group by object\n"
|
|
756
|
-
sql << "order by
|
|
823
|
+
sql << "order by " + make_sql_order(args[1]) if !block_given? && order_attr
|
|
757
824
|
#sql << ") WHERE " + ::Rhom::RhomDbAdapter.where_str(condition_hash) if condition_hash
|
|
758
825
|
sql << ") WHERE " + condition_str if condition_str
|
|
759
826
|
sql << strLimit if strLimit
|
|
@@ -775,7 +842,7 @@ module Rhom
|
|
|
775
842
|
sql << " WHERE " + condition_str if condition_str
|
|
776
843
|
end
|
|
777
844
|
|
|
778
|
-
sql << " order by
|
|
845
|
+
sql << " order by " + make_sql_order(args[1]) if !block_given? && order_attr
|
|
779
846
|
sql << strLimit if strLimit
|
|
780
847
|
|
|
781
848
|
#puts "Database query start" #: #{sql}"
|
|
@@ -804,17 +871,12 @@ module Rhom
|
|
|
804
871
|
else
|
|
805
872
|
puts "Processing rhom objects end, no attributes found."
|
|
806
873
|
end
|
|
807
|
-
|
|
808
|
-
if block_given?
|
|
809
|
-
ret_list
|
|
810
|
-
|
|
811
|
-
vy = y.vars[order_attr.to_sym()]
|
|
812
|
-
res = vx && vy ? (block_given? ? yield(vx,vy): vx <=> vy) : 0
|
|
813
|
-
res *= -1 if order_dir && order_dir == 'DESC'
|
|
814
|
-
res
|
|
815
|
-
}
|
|
874
|
+
|
|
875
|
+
if block_given?
|
|
876
|
+
order_array(ret_list, order_attr, order_dir, &block)
|
|
877
|
+
ret_list = ret_list.slice(offset,limit) if limit
|
|
816
878
|
end
|
|
817
|
-
|
|
879
|
+
|
|
818
880
|
return list.length if args.first == :count
|
|
819
881
|
if args.first == :first || args.first.is_a?(String)
|
|
820
882
|
return ret_list.length > 0 ? ret_list[0] : nil
|
|
@@ -882,8 +944,12 @@ module Rhom
|
|
|
882
944
|
|
|
883
945
|
puts "del_objects : #{del_objects}"
|
|
884
946
|
del_objects.each do |obj|
|
|
885
|
-
|
|
886
|
-
|
|
947
|
+
if is_schema_source()
|
|
948
|
+
db.delete_from_table(tableName, {'object'=>obj['object']})
|
|
949
|
+
else
|
|
950
|
+
db.delete_from_table(tableName, {'object'=>obj['object'], "source_id"=>get_source_id})
|
|
951
|
+
end
|
|
952
|
+
db.delete_from_table('changed_values', {'object'=>obj['object'], "source_id"=>get_source_id}) if is_sync_source()
|
|
887
953
|
end
|
|
888
954
|
else
|
|
889
955
|
if is_schema_source()
|
|
@@ -1016,19 +1082,18 @@ module Rhom
|
|
|
1016
1082
|
attrsList = nil
|
|
1017
1083
|
if is_inst_schema_source()
|
|
1018
1084
|
attrsList = db.select_from_table(tableName, '*', {"object"=>obj})
|
|
1085
|
+
db.delete_from_table(tableName, {"object"=>obj})
|
|
1019
1086
|
else
|
|
1020
1087
|
attrsList = db.select_from_table(tableName, '*', {"object"=>obj, "source_id"=>self.get_inst_source_id()})
|
|
1088
|
+
db.delete_from_table(tableName, {"object"=>obj, "source_id"=>self.get_inst_source_id()})
|
|
1021
1089
|
end
|
|
1022
1090
|
|
|
1023
|
-
# first delete the record from viewable list
|
|
1024
|
-
db.delete_from_table(tableName, {"object"=>obj})
|
|
1025
|
-
|
|
1026
1091
|
resUpdateType = is_inst_sync_source() ? db.select_from_table('changed_values', 'update_type', {"object"=>obj, "update_type"=>'create', "sent"=>0}) : nil
|
|
1027
1092
|
if resUpdateType && resUpdateType.length > 0
|
|
1028
1093
|
update_type = nil
|
|
1029
1094
|
end
|
|
1030
1095
|
|
|
1031
|
-
db.delete_from_table('changed_values', {"object"=>obj, "sent"=>0}) if is_inst_sync_source()
|
|
1096
|
+
db.delete_from_table('changed_values', {"object"=>obj, "source_id"=>self.get_inst_source_id(), "sent"=>0}) if is_inst_sync_source()
|
|
1032
1097
|
|
|
1033
1098
|
if is_inst_sync_source() && update_type and attrsList and attrsList.length() > 0
|
|
1034
1099
|
# now add delete operation
|
data/lib/framework/version.rb
CHANGED
data/lib/rhodes.rb
CHANGED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
package="com.rhomobile.rhodes"
|
|
4
|
+
android:installLocation="auto"
|
|
5
|
+
android:versionCode="25"
|
|
6
|
+
android:versionName="2.2.4">
|
|
7
|
+
<uses-sdk android:minSdkVersion="3" />
|
|
8
|
+
<application android:icon="@drawable/icon"
|
|
9
|
+
android:multiprocess="true"
|
|
10
|
+
android:allowTaskReparenting="true"
|
|
11
|
+
android:debuggable="true"
|
|
12
|
+
finishOnTaskLaunch="true"
|
|
13
|
+
android:label="@string/app_name">
|
|
14
|
+
<activity android:name="com.rhomobile.rhodes.Rhodes"
|
|
15
|
+
android:label="@string/app_name"
|
|
16
|
+
android:configChanges="keyboardHidden|orientation">
|
|
17
|
+
<intent-filter>
|
|
18
|
+
<action android:name="android.intent.action.MAIN" />
|
|
19
|
+
<category android:name="android.intent.category.LAUNCHER" />
|
|
20
|
+
</intent-filter>
|
|
21
|
+
</activity>
|
|
22
|
+
<activity android:name="com.rhomobile.rhodes.camera.FileList" />
|
|
23
|
+
<activity android:name="com.rhomobile.rhodes.camera.ImageCapture" android:screenOrientation="landscape" />
|
|
24
|
+
<activity android:name="com.rhomobile.rhodes.signature.ImageCapture" />
|
|
25
|
+
<activity android:name="com.rhomobile.rhodes.datetime.DateTimePickerScreen" />
|
|
26
|
+
<activity android:name="com.rhomobile.rhodes.mapview.MapView" />
|
|
27
|
+
<activity android:name="com.rhomobile.rhodes.bluetooth.RhoBluetoothDeviceListActivity" />
|
|
28
|
+
<uses-library android:name="com.google.android.maps" />
|
|
29
|
+
<receiver android:name="com.rhomobile.rhodes.PushReceiver" android:permission="com.google.android.c2dm.permission.SEND">
|
|
30
|
+
<!-- Receive the actual message -->
|
|
31
|
+
<intent-filter>
|
|
32
|
+
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
|
|
33
|
+
<category android:name="com.rhomobile.rhodes" />
|
|
34
|
+
</intent-filter>
|
|
35
|
+
<!-- Receive the registration id -->
|
|
36
|
+
<intent-filter>
|
|
37
|
+
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
|
|
38
|
+
<category android:name="com.rhomobile.rhodes" />
|
|
39
|
+
</intent-filter>
|
|
40
|
+
</receiver>
|
|
41
|
+
</application>
|
|
42
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
43
|
+
<uses-permission android:name="android.permission.CAMERA" />
|
|
44
|
+
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
|
45
|
+
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
|
|
46
|
+
<uses-permission android:name="android.permission.CALL_PHONE" />
|
|
47
|
+
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
|
48
|
+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
49
|
+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
|
50
|
+
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
|
|
51
|
+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
52
|
+
<uses-permission android:name="android.permission.VIBRATE" />
|
|
53
|
+
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
|
|
54
|
+
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
|
55
|
+
<uses-permission android:name="android.permission.BLUETOOTH" />
|
|
56
|
+
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
|
57
|
+
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
|
58
|
+
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
|
|
59
|
+
<permission android:name="com.rhomobile.rhodes.permission.C2D_MESSAGE" android:protectionLevel="signature" />
|
|
60
|
+
<uses-permission android:name="com.rhomobile.rhodes.permission.C2D_MESSAGE" />
|
|
61
|
+
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
|
|
62
|
+
</manifest>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8"?>
|
|
2
2
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
3
|
package="com.rhomobile.rhodes"
|
|
4
|
-
android:
|
|
5
|
-
android:
|
|
4
|
+
android:installLocation="auto"
|
|
5
|
+
android:versionCode="26"
|
|
6
|
+
android:versionName="2.2.5">
|
|
6
7
|
<uses-sdk android:minSdkVersion="3" />
|
|
7
8
|
<application android:icon="@drawable/icon"
|
|
8
9
|
android:multiprocess="true"
|
|
@@ -25,37 +26,5 @@
|
|
|
25
26
|
<activity android:name="com.rhomobile.rhodes.mapview.MapView" />
|
|
26
27
|
<activity android:name="com.rhomobile.rhodes.bluetooth.RhoBluetoothDeviceListActivity" />
|
|
27
28
|
<uses-library android:name="com.google.android.maps" />
|
|
28
|
-
<receiver android:name="com.rhomobile.rhodes.PushReceiver" android:permission="com.google.android.c2dm.permission.SEND">
|
|
29
|
-
<!-- Receive the actual message -->
|
|
30
|
-
<intent-filter>
|
|
31
|
-
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
|
|
32
|
-
<category android:name="com.rhomobile.rhodes" />
|
|
33
|
-
</intent-filter>
|
|
34
|
-
<!-- Receive the registration id -->
|
|
35
|
-
<intent-filter>
|
|
36
|
-
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
|
|
37
|
-
<category android:name="com.rhomobile.rhodes" />
|
|
38
|
-
</intent-filter>
|
|
39
|
-
</receiver>
|
|
40
29
|
</application>
|
|
41
|
-
<uses-permission android:name="android.permission.INTERNET" />
|
|
42
|
-
<uses-permission android:name="android.permission.CAMERA" />
|
|
43
|
-
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
|
44
|
-
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
|
|
45
|
-
<uses-permission android:name="android.permission.CALL_PHONE" />
|
|
46
|
-
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
|
47
|
-
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
48
|
-
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
|
49
|
-
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
|
|
50
|
-
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
51
|
-
<uses-permission android:name="android.permission.VIBRATE" />
|
|
52
|
-
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
|
|
53
|
-
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
|
54
|
-
<uses-permission android:name="android.permission.BLUETOOTH" />
|
|
55
|
-
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
|
56
|
-
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
|
57
|
-
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
|
|
58
|
-
<permission android:name="com.rhomobile.rhodes.permission.C2D_MESSAGE" android:protectionLevel="signature" />
|
|
59
|
-
<uses-permission android:name="com.rhomobile.rhodes.permission.C2D_MESSAGE" />
|
|
60
|
-
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
|
|
61
30
|
</manifest>
|