rhodes 2.0.2 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +10 -0
- data/lib/framework/rho/rhoerror.rb +4 -0
- data/lib/framework/rhodes.rb +2 -2
- data/lib/framework/rhom/rhom.rb +21 -1
- data/lib/framework/version.rb +2 -2
- data/lib/rhodes.rb +2 -2
- data/platform/android/Rhodes/AndroidManifest.xml +2 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +21 -6
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesInstance.java +1 -1
- data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +10 -0
- data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +1 -1
- data/platform/bb/rhodes/src/com/rho/rubyext/GeoLocation.java +2 -2
- data/platform/bb/rhodes/src/rhomobile/PushListeningThread.java +4 -2
- data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +52 -11
- data/platform/iphone/Classes/NativeBar.m +37 -18
- data/platform/iphone/Classes/Rhodes.h +2 -0
- data/platform/iphone/Classes/Rhodes.m +27 -8
- data/platform/iphone/Classes/SimpleMainView.h +7 -5
- data/platform/iphone/Classes/SimpleMainView.m +155 -36
- data/platform/iphone/Classes/TabbedMainView.h +2 -4
- data/platform/iphone/Classes/TabbedMainView.m +12 -10
- data/platform/iphone/Classes/WebView.m +1 -0
- data/platform/iphone/Info.plist +7 -1
- data/platform/iphone/icon114.png +0 -0
- data/platform/iphone/icon57.png +0 -0
- data/platform/iphone/icon72.png +0 -0
- data/platform/iphone/rbuild/iphone.rake +102 -16
- data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +12 -0
- data/platform/shared/common/IRhoThreadImpl.h +1 -1
- data/platform/shared/common/PosixThreadImpl.cpp +17 -22
- data/platform/shared/common/PosixThreadImpl.h +1 -1
- data/platform/shared/common/RhoThread.cpp +7 -3
- data/platform/shared/common/RhoThread.h +21 -7
- data/platform/shared/common/RhodesApp.cpp +13 -9
- data/platform/shared/common/RhodesApp.h +1 -1
- data/platform/shared/common/ThreadQueue.cpp +6 -4
- data/platform/shared/rubyJVM/src/com/rho/IRhoRubyHelper.java +2 -0
- data/platform/shared/rubyJVM/src/com/rho/RhoThread.java +18 -8
- data/platform/shared/rubyJVM/src/com/rho/RhodesApp.java +70 -2
- data/platform/shared/rubyJVM/src/com/rho/ThreadQueue.java +143 -0
- data/platform/shared/rubyJVM/src/com/rho/sync/ClientRegister.java +15 -5
- data/platform/shared/rubyJVM/src/com/rho/sync/SyncEngine.java +42 -36
- data/platform/shared/rubyJVM/src/com/rho/sync/SyncNotify.java +63 -20
- data/platform/shared/rubyJVM/src/com/rho/sync/SyncSource.java +4 -4
- data/platform/shared/rubyJVM/src/com/rho/sync/SyncThread.java +12 -2
- data/platform/shared/rubyJVM/src/com/xruby/runtime/lang/RhoSupport.java +9 -3
- data/platform/shared/sync/ClientRegister.cpp +11 -3
- data/platform/shared/sync/ClientRegister.h +1 -0
- data/platform/shared/sync/SyncEngine.cpp +38 -35
- data/platform/shared/sync/SyncEngine.h +2 -1
- data/platform/shared/sync/SyncNotify.cpp +53 -20
- data/platform/shared/sync/SyncNotify.h +9 -2
- data/platform/shared/sync/SyncSource.cpp +3 -3
- data/platform/shared/sync/SyncSource.h +1 -1
- data/platform/shared/sync/SyncThread.cpp +9 -2
- data/platform/wm/rhodes/Alert.cpp +35 -21
- data/platform/wm/rhodes/Alert.h +11 -2
- data/platform/wm/rhodes/rho/common/RhoThreadImpl.cpp +11 -12
- data/platform/wm/rhodes/rho/common/RhoThreadImpl.h +2 -0
- data/res/generators/templates/application/build.yml +1 -1
- data/rhodes.gemspec +2 -2
- data/spec/framework_spec/rhoconfig.txt +1 -0
- data/spec/phone_spec/rhoconfig.txt +2 -0
- metadata +8 -5
- data/Manifest.txt +0 -5333
data/platform/iphone/Info.plist
CHANGED
@@ -10,6 +10,12 @@
|
|
10
10
|
<string>${EXECUTABLE_NAME}</string>
|
11
11
|
<key>CFBundleIconFile</key>
|
12
12
|
<string>icon.png</string>
|
13
|
+
<key>CFBundleIconFiles</key>
|
14
|
+
<array>
|
15
|
+
<string>icon57</string>
|
16
|
+
<string>icon72</string>
|
17
|
+
<string>icon114</string>
|
18
|
+
</array>
|
13
19
|
<key>CFBundleIdentifier</key>
|
14
20
|
<string>com.rhomobile.rhosyncclient</string>
|
15
21
|
<key>CFBundleInfoDictionaryVersion</key>
|
@@ -21,7 +27,7 @@
|
|
21
27
|
<key>CFBundleSignature</key>
|
22
28
|
<string>????</string>
|
23
29
|
<key>CFBundleVersion</key>
|
24
|
-
<string>2.0.
|
30
|
+
<string>2.0.3</string>
|
25
31
|
<key>LSRequiresIPhoneOS</key>
|
26
32
|
<true/>
|
27
33
|
</dict>
|
Binary file
|
Binary file
|
Binary file
|
@@ -23,6 +23,38 @@ def set_app_name(newname)
|
|
23
23
|
|
24
24
|
end
|
25
25
|
|
26
|
+
ICONS = ['icon', 'icon57', 'icon72', 'icon114']
|
27
|
+
|
28
|
+
def restore_app_icon
|
29
|
+
puts "restore icon"
|
30
|
+
ipath = $config["build"]["iphonepath"]
|
31
|
+
ICONS.each do |name|
|
32
|
+
ibak = File.join(ipath, name + '.bak')
|
33
|
+
icon = File.join(ipath, name + '.png')
|
34
|
+
next if !File.exists? ibak
|
35
|
+
rm_f icon
|
36
|
+
cp ibak, icon
|
37
|
+
rm_f ibak
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def set_app_icon
|
42
|
+
puts "set icon"
|
43
|
+
ipath = $config["build"]["iphonepath"]
|
44
|
+
begin
|
45
|
+
ICONS.each do |name|
|
46
|
+
ibak = File.join(ipath, name + '.bak')
|
47
|
+
icon = File.join(ipath, name + '.png')
|
48
|
+
appicon = File.join($app_path, 'icon', name + '.png')
|
49
|
+
cp icon, ibak unless File.exists? ibak
|
50
|
+
cp appicon, ipath
|
51
|
+
end
|
52
|
+
rescue => e
|
53
|
+
puts "WARNING!!! Can not change icon: #{e.to_s}"
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
26
58
|
def set_signing_identity(identity,profile,entitlements)
|
27
59
|
fname = $config["build"]["iphonepath"] + "/rhorunner.xcodeproj/project.pbxproj"
|
28
60
|
buf = ""
|
@@ -76,6 +108,8 @@ namespace "config" do
|
|
76
108
|
$excludelib = ['**/builtinME.rb','**/ServeME.rb','**/TestServe.rb']
|
77
109
|
$tmpdir = $bindir +"/tmp"
|
78
110
|
|
111
|
+
$devroot = '/Developer' if $devroot.nil?
|
112
|
+
|
79
113
|
$homedir = ENV['HOME']
|
80
114
|
$simdir = "#{$homedir}/Library/Application Support/iPhone Simulator/"
|
81
115
|
$sim="/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications"
|
@@ -97,6 +131,14 @@ namespace "config" do
|
|
97
131
|
$sdk = $app_config["iphone"]["sdk"]
|
98
132
|
end
|
99
133
|
|
134
|
+
if $sdk =~ /iphonesimulator/
|
135
|
+
$sdkroot = $devroot + "/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator" +
|
136
|
+
$sdk.gsub(/iphonesimulator/,"") + ".sdk"
|
137
|
+
else
|
138
|
+
$sdkroot = $devroot + "/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS" +
|
139
|
+
$sdk.gsub(/iphoneos/,"") + ".sdk"
|
140
|
+
end
|
141
|
+
|
100
142
|
unless File.exists? $homedir + "/.profile"
|
101
143
|
File.open($homedir + "/.profile","w") {|f| f << "#" }
|
102
144
|
chmod 0744, $homedir + "/.profile"
|
@@ -138,14 +180,11 @@ namespace "build" do
|
|
138
180
|
simulator = $sdk =~ /iphonesimulator/
|
139
181
|
ENV["PLATFORM_DEVELOPER_BIN_DIR"] ||= "/Developer/Platforms/" + ( simulator ? "iPhoneSimulator" : "iPhoneOS" ) +
|
140
182
|
".platform/Developer/usr/bin"
|
183
|
+
ENV["SDKROOT"] = $sdkroot
|
184
|
+
|
185
|
+
#ENV["SDKROOT"] = $xcode_sdk_dir if not $xcode_sdk_dir.nil?
|
186
|
+
|
141
187
|
|
142
|
-
if simulator
|
143
|
-
ENV["SDKROOT"] ||= "/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator" +
|
144
|
-
$sdk.gsub(/iphonesimulator/,"") + ".sdk"
|
145
|
-
else
|
146
|
-
ENV["SDKROOT"] ||= "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS" +
|
147
|
-
$sdk.gsub(/iphoneos/,"") + ".sdk"
|
148
|
-
end
|
149
188
|
ENV["BUILD_DIR"] ||= $startdir + "/platform/iphone/build"
|
150
189
|
ENV["TARGET_TEMP_DIR"] ||= $startdir + "/platform/iphone/build/rhorunner.build/#{$configuration}-" +
|
151
190
|
( simulator ? "iphonesimulator" : "iphoneos") + "/rhorunner.build"
|
@@ -171,9 +210,7 @@ namespace "build" do
|
|
171
210
|
task :rhodes => ["config:iphone", "build:iphone:rhobundle"] do
|
172
211
|
|
173
212
|
set_app_name($app_config["name"]) unless $app_config["name"].nil?
|
174
|
-
|
175
|
-
cp File.join(ipath, 'icon.png'), File.join(ipath, 'icon.png.bak') unless File.exists? File.join(ipath, 'icon.png.bak')
|
176
|
-
cp $app_path + "/icon/icon.png", ipath
|
213
|
+
set_app_icon
|
177
214
|
|
178
215
|
set_signing_identity($signidentity,$provisionprofile,$entitlements.to_s) if $signidentity.to_s != ""
|
179
216
|
|
@@ -185,9 +222,7 @@ namespace "build" do
|
|
185
222
|
|
186
223
|
chdir $startdir
|
187
224
|
set_app_name("Rhodes") unless $app_config["name"].nil?
|
188
|
-
|
189
|
-
cp File.join(ipath, 'icon.png.bak'), File.join(ipath, 'icon.png')
|
190
|
-
rm_f File.join(ipath, 'icon.png.bak')
|
225
|
+
restore_app_icon
|
191
226
|
|
192
227
|
unless ret == 0
|
193
228
|
puts "Error cleaning"
|
@@ -208,15 +243,66 @@ namespace "run" do
|
|
208
243
|
end
|
209
244
|
`killall "iPhone Simulator"`
|
210
245
|
|
211
|
-
puts "sdk: #{$sdk.inspect.to_s}"
|
212
246
|
sdkver = $sdk.gsub(/^iphonesimulator/, '')
|
213
|
-
|
247
|
+
|
248
|
+
elements = []
|
249
|
+
binplist = File.join(ENV['HOME'], 'Library', 'Preferences', 'com.apple.iphonesimulator.plist')
|
250
|
+
xmlplist = '/tmp/iphone.plist'
|
251
|
+
if File.exists? binplist
|
252
|
+
`plutil -convert xml1 -o #{xmlplist} #{binplist}`
|
253
|
+
|
254
|
+
elements = []
|
255
|
+
doc = REXML::Document.new(File.new(xmlplist))
|
256
|
+
nextignore = false
|
257
|
+
doc.elements.each('plist/dict/*') do |element|
|
258
|
+
if nextignore
|
259
|
+
nextignore = false
|
260
|
+
next
|
261
|
+
end
|
262
|
+
if element.name == 'key'
|
263
|
+
if element.text == 'currentSDKRoot' or element.text == 'SimulateDevice'
|
264
|
+
nextignore = true
|
265
|
+
next
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
elements << element
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
e = REXML::Element.new 'key'
|
274
|
+
e.text = 'SimulateDevice'
|
275
|
+
elements << e
|
276
|
+
e = REXML::Element.new 'string'
|
277
|
+
e.text = sdkver == '3.2' ? 'iPad' : 'iPhone'
|
278
|
+
elements << e
|
279
|
+
e = REXML::Element.new 'key'
|
280
|
+
e.text = 'currentSDKRoot'
|
281
|
+
elements << e
|
282
|
+
e = REXML::Element.new 'string'
|
283
|
+
e.text = $sdkroot
|
284
|
+
elements << e
|
285
|
+
|
286
|
+
File.open(xmlplist, 'w') do |f|
|
287
|
+
f.puts "<?xml version=\"1.0\" encoding=\"UTF-8'\"?>"
|
288
|
+
f.puts "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">"
|
289
|
+
f.puts "<plist version=\"1.0\">"
|
290
|
+
f.puts "<dict>"
|
291
|
+
elements.each do |e|
|
292
|
+
f.puts "\t#{e.to_s}"
|
293
|
+
end
|
294
|
+
f.puts "</dict>"
|
295
|
+
f.puts "</plist>"
|
296
|
+
end
|
297
|
+
|
298
|
+
`plutil -convert binary1 -o #{binplist} #{xmlplist}`
|
299
|
+
|
214
300
|
rhorunner = $config["build"]["iphonepath"] + "/build/#{$configuration}-iphonesimulator/rhorunner.app"
|
215
301
|
puts "rhorunner: #{rhorunner}"
|
216
302
|
|
217
|
-
|
218
303
|
puts "our app name: #{$app_config['name']}"
|
219
304
|
puts "simdir: #{$simdir}"
|
305
|
+
|
220
306
|
Dir.glob(File.join($simdir, sdkver, "Applications", "*")).each do |simapppath|
|
221
307
|
need_rm = true if File.directory? simapppath
|
222
308
|
if File.exists?(File.join(simapppath, 'rhorunner.app', 'name'))
|
@@ -37,6 +37,9 @@
|
|
37
37
|
BDB15ED510B2EC8700003DFA /* librhorubylib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F59F16000E9449B8004103B4 /* librhorubylib.a */; };
|
38
38
|
BDB373661144220F006EA6DA /* SimpleMainView.m in Sources */ = {isa = PBXBuildFile; fileRef = BDB373651144220F006EA6DA /* SimpleMainView.m */; };
|
39
39
|
BDB373C511444A8F006EA6DA /* Rhodes.m in Sources */ = {isa = PBXBuildFile; fileRef = BDB373C411444A8F006EA6DA /* Rhodes.m */; };
|
40
|
+
BDC6F34911F4ABBF0056C1C3 /* icon57.png in Resources */ = {isa = PBXBuildFile; fileRef = BDC6F34611F4ABBF0056C1C3 /* icon57.png */; };
|
41
|
+
BDC6F34A11F4ABBF0056C1C3 /* icon72.png in Resources */ = {isa = PBXBuildFile; fileRef = BDC6F34711F4ABBF0056C1C3 /* icon72.png */; };
|
42
|
+
BDC6F34B11F4ABBF0056C1C3 /* icon114.png in Resources */ = {isa = PBXBuildFile; fileRef = BDC6F34811F4ABBF0056C1C3 /* icon114.png */; };
|
40
43
|
BDE35A7A107F900A009941C7 /* RhoFileImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = BDE35A79107F900A009941C7 /* RhoFileImpl.m */; };
|
41
44
|
BDFBD99610B1B99A00BAAFAB /* Entitlements.plist in Resources */ = {isa = PBXBuildFile; fileRef = BDFBD99510B1B99A00BAAFAB /* Entitlements.plist */; };
|
42
45
|
BDFBD99A10B1B9A900BAAFAB /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = BDFBD99910B1B9A900BAAFAB /* Settings.bundle */; };
|
@@ -183,6 +186,9 @@
|
|
183
186
|
BDB373651144220F006EA6DA /* SimpleMainView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleMainView.m; sourceTree = "<group>"; };
|
184
187
|
BDB373C3114449B6006EA6DA /* Rhodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Rhodes.h; sourceTree = "<group>"; };
|
185
188
|
BDB373C411444A8F006EA6DA /* Rhodes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Rhodes.m; sourceTree = "<group>"; };
|
189
|
+
BDC6F34611F4ABBF0056C1C3 /* icon57.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon57.png; sourceTree = SOURCE_ROOT; };
|
190
|
+
BDC6F34711F4ABBF0056C1C3 /* icon72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon72.png; sourceTree = SOURCE_ROOT; };
|
191
|
+
BDC6F34811F4ABBF0056C1C3 /* icon114.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon114.png; sourceTree = SOURCE_ROOT; };
|
186
192
|
BDE35A79107F900A009941C7 /* RhoFileImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RhoFileImpl.m; sourceTree = "<group>"; };
|
187
193
|
BDFBD99510B1B99A00BAAFAB /* Entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Entitlements.plist; sourceTree = "<group>"; };
|
188
194
|
BDFBD99910B1B9A900BAAFAB /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
|
@@ -258,6 +264,9 @@
|
|
258
264
|
080E96DDFE201D6D7F000001 /* Classes */ = {
|
259
265
|
isa = PBXGroup;
|
260
266
|
children = (
|
267
|
+
BDC6F34611F4ABBF0056C1C3 /* icon57.png */,
|
268
|
+
BDC6F34711F4ABBF0056C1C3 /* icon72.png */,
|
269
|
+
BDC6F34811F4ABBF0056C1C3 /* icon114.png */,
|
261
270
|
BDFBD9A610B1BA2000BAAFAB /* icon.png */,
|
262
271
|
BD97AC1E1160EE7A006960F9 /* Alert */,
|
263
272
|
F579170F0E8AB2A200BBC54D /* AppManager */,
|
@@ -682,6 +691,9 @@
|
|
682
691
|
BDFBD9A410B1B9E500BAAFAB /* forward_btn.png in Resources */,
|
683
692
|
BDFBD9A510B1B9E500BAAFAB /* home_btn.png in Resources */,
|
684
693
|
BDFBD9A710B1BA2000BAAFAB /* icon.png in Resources */,
|
694
|
+
BDC6F34911F4ABBF0056C1C3 /* icon57.png in Resources */,
|
695
|
+
BDC6F34A11F4ABBF0056C1C3 /* icon72.png in Resources */,
|
696
|
+
BDC6F34B11F4ABBF0056C1C3 /* icon114.png in Resources */,
|
685
697
|
);
|
686
698
|
runOnlyForDeploymentPostprocessing = 0;
|
687
699
|
};
|
@@ -14,27 +14,7 @@ namespace common
|
|
14
14
|
IMPLEMENT_LOGCLASS(CPosixThreadImpl, "RhoThread");
|
15
15
|
|
16
16
|
CPosixThreadImpl::CPosixThreadImpl()
|
17
|
-
:m_started(false)
|
18
|
-
{}
|
19
|
-
|
20
|
-
void *runProc(void *pv)
|
21
17
|
{
|
22
|
-
IRhoRunnable *p = static_cast<IRhoRunnable *>(pv);
|
23
|
-
void *pData = rho_nativethread_start();
|
24
|
-
p->run();
|
25
|
-
rho_nativethread_end(pData);
|
26
|
-
return 0;
|
27
|
-
}
|
28
|
-
|
29
|
-
void CPosixThreadImpl::start(IRhoRunnable *pRunnable, IRhoRunnable::EPriority ePriority)
|
30
|
-
{
|
31
|
-
{
|
32
|
-
common::CMutexLock lock(m_mxSync);
|
33
|
-
if (m_started)
|
34
|
-
return;
|
35
|
-
m_started = true;
|
36
|
-
}
|
37
|
-
|
38
18
|
#if defined(OS_ANDROID)
|
39
19
|
// Android has no pthread_condattr_xxx API
|
40
20
|
pthread_cond_init(&m_condSync, NULL);
|
@@ -44,7 +24,24 @@ void CPosixThreadImpl::start(IRhoRunnable *pRunnable, IRhoRunnable::EPriority eP
|
|
44
24
|
pthread_cond_init(&m_condSync, &sync_details);
|
45
25
|
pthread_condattr_destroy(&sync_details);
|
46
26
|
#endif
|
27
|
+
}
|
28
|
+
|
29
|
+
CPosixThreadImpl::~CPosixThreadImpl()
|
30
|
+
{
|
31
|
+
pthread_cond_destroy(&m_condSync);
|
32
|
+
}
|
47
33
|
|
34
|
+
void *runProc(void *pv)
|
35
|
+
{
|
36
|
+
IRhoRunnable *p = static_cast<IRhoRunnable *>(pv);
|
37
|
+
void *pData = rho_nativethread_start();
|
38
|
+
p->runObject();
|
39
|
+
rho_nativethread_end(pData);
|
40
|
+
return 0;
|
41
|
+
}
|
42
|
+
|
43
|
+
void CPosixThreadImpl::start(IRhoRunnable *pRunnable, IRhoRunnable::EPriority ePriority)
|
44
|
+
{
|
48
45
|
pthread_attr_t attr;
|
49
46
|
int return_val = pthread_attr_init(&attr);
|
50
47
|
//return_val = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
@@ -71,8 +68,6 @@ void CPosixThreadImpl::stop(unsigned int nTimeoutToKill)
|
|
71
68
|
//TODO: wait for nTimeoutToKill and kill thread
|
72
69
|
void* status;
|
73
70
|
pthread_join(m_thread,&status);
|
74
|
-
|
75
|
-
pthread_cond_destroy(&m_condSync);
|
76
71
|
}
|
77
72
|
|
78
73
|
void CPosixThreadImpl::wait(unsigned int nTimeout)
|
@@ -14,6 +14,7 @@ class CPosixThreadImpl : public IRhoThreadImpl
|
|
14
14
|
DEFINE_LOGCLASS;
|
15
15
|
public:
|
16
16
|
CPosixThreadImpl();
|
17
|
+
~CPosixThreadImpl();
|
17
18
|
|
18
19
|
void start(IRhoRunnable *pRunnable, IRhoRunnable::EPriority ePriority);
|
19
20
|
void stop(unsigned int nTimeoutToKill);
|
@@ -25,7 +26,6 @@ private:
|
|
25
26
|
pthread_cond_t m_condSync;
|
26
27
|
common::CMutex m_mxSync;
|
27
28
|
pthread_t m_thread;
|
28
|
-
bool m_started;
|
29
29
|
};
|
30
30
|
|
31
31
|
} // namespace common
|
@@ -6,14 +6,18 @@ namespace common {
|
|
6
6
|
|
7
7
|
CRhoThread::CRhoThread(IRhoClassFactory* factory)
|
8
8
|
{
|
9
|
-
|
10
|
-
m_bStop = false;
|
9
|
+
m_nState = TS_NONE;
|
11
10
|
m_pImpl = factory->createThreadImpl();
|
12
11
|
}
|
13
12
|
|
14
13
|
void CRhoThread::start(EPriority ePriority)
|
15
14
|
{
|
16
|
-
|
15
|
+
if ( !isRunning() )
|
16
|
+
{
|
17
|
+
m_pImpl->start(this, ePriority);
|
18
|
+
|
19
|
+
m_nState = TS_RUNNING;
|
20
|
+
}
|
17
21
|
}
|
18
22
|
|
19
23
|
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
|
+
#include "RhoStd.h"
|
3
4
|
#include "IRhoThreadImpl.h"
|
4
5
|
#include "AutoPointer.h"
|
5
6
|
|
@@ -10,20 +11,33 @@ struct IRhoClassFactory;
|
|
10
11
|
class CRhoThread : public IRhoRunnable
|
11
12
|
{
|
12
13
|
CAutoPtr<IRhoThreadImpl> m_pImpl;
|
13
|
-
|
14
|
-
|
14
|
+
static const int TS_NONE = 0;
|
15
|
+
static const int TS_WAIT = 1;
|
16
|
+
static const int TS_STOPPING = 2;
|
17
|
+
static const int TS_RUNNING = 4;
|
18
|
+
|
19
|
+
int m_nState;
|
15
20
|
public:
|
16
21
|
|
17
22
|
CRhoThread(IRhoClassFactory* factory);
|
18
|
-
virtual ~CRhoThread(void){}
|
23
|
+
virtual ~CRhoThread(void){};
|
19
24
|
|
20
25
|
virtual void start(EPriority ePriority);
|
21
|
-
virtual void stop(unsigned int nTimeoutToKill){
|
22
|
-
virtual void wait(unsigned int nTimeout){
|
23
|
-
virtual void stopWait(){ if (
|
26
|
+
virtual void stop(unsigned int nTimeoutToKill){ m_nState |= TS_STOPPING; m_pImpl->stop(nTimeoutToKill); m_nState &= ~TS_STOPPING; }
|
27
|
+
virtual void wait(unsigned int nTimeout){ m_nState |= TS_WAIT; m_pImpl->wait(nTimeout); m_nState &= ~TS_WAIT; }
|
28
|
+
virtual void stopWait(){ if (isWaiting()) m_pImpl->stopWait(); }
|
24
29
|
virtual void sleep(unsigned int nTimeout){ m_pImpl->sleep(nTimeout); }
|
30
|
+
virtual void run() = 0;
|
31
|
+
virtual void runObject()
|
32
|
+
{
|
33
|
+
run();
|
34
|
+
m_nState = TS_NONE;
|
35
|
+
}
|
36
|
+
|
37
|
+
boolean isStopping(){return (m_nState&TS_STOPPING) != 0;}
|
38
|
+
boolean isWaiting(){return (m_nState&TS_WAIT) != 0;}
|
39
|
+
boolean isRunning(){return (m_nState&TS_RUNNING) != 0;}
|
25
40
|
|
26
|
-
bool isStopped(){return m_bStop;}
|
27
41
|
};
|
28
42
|
|
29
43
|
}
|
@@ -465,9 +465,15 @@ void CRhodesApp::keepLastVisitedUrl(String strUrl)
|
|
465
465
|
void CRhodesApp::setAppBackUrl(const String& url)
|
466
466
|
{
|
467
467
|
if ( url.length() > 0 )
|
468
|
+
{
|
469
|
+
m_strAppBackUrlOrig = url;
|
468
470
|
m_strAppBackUrl = canonicalizeRhoUrl(url);
|
471
|
+
}
|
469
472
|
else
|
473
|
+
{
|
474
|
+
m_strAppBackUrlOrig = "";
|
470
475
|
m_strAppBackUrl = "";
|
476
|
+
}
|
471
477
|
}
|
472
478
|
|
473
479
|
String CRhodesApp::getAppTitle()
|
@@ -502,7 +508,7 @@ const String& CRhodesApp::getOptionsUrl()
|
|
502
508
|
return m_strOptionsUrl;
|
503
509
|
}
|
504
510
|
|
505
|
-
const String& CRhodesApp::getCurrentUrl(int index)
|
511
|
+
const String& CRhodesApp::getCurrentUrl(int /*index*/)
|
506
512
|
{
|
507
513
|
return m_currentUrls[m_currentTabIndex];
|
508
514
|
}
|
@@ -533,10 +539,10 @@ void CRhodesApp::navigateToUrl( const String& strUrl)
|
|
533
539
|
|
534
540
|
void CRhodesApp::navigateBack()
|
535
541
|
{
|
536
|
-
rho::String strAppUrl = getAppBackUrl();
|
542
|
+
//rho::String strAppUrl = getAppBackUrl();
|
537
543
|
|
538
|
-
if (
|
539
|
-
|
544
|
+
if ( m_strAppBackUrlOrig.length() > 0 )
|
545
|
+
loadUrl(m_strAppBackUrlOrig);
|
540
546
|
else if ( strcasecmp(getCurrentUrl().c_str(),getStartUrl().c_str()) != 0 )
|
541
547
|
rho_webview_navigate_back();
|
542
548
|
}
|
@@ -700,18 +706,16 @@ void CRhodesApp::callScreenRotationCallback(int width, int height, int degrees)
|
|
700
706
|
void CRhodesApp::loadUrl(String url)
|
701
707
|
{
|
702
708
|
boolean callback = false;
|
703
|
-
if (
|
709
|
+
if (String_startsWith(url, "callback:") )
|
704
710
|
{
|
705
711
|
callback = true;
|
706
712
|
url = url.substr(9);
|
707
713
|
}
|
708
|
-
|
709
|
-
url = s;
|
710
|
-
free(s);
|
714
|
+
url = canonicalizeRhoUrl(url);
|
711
715
|
if (callback)
|
712
716
|
{
|
713
717
|
common::CAutoPtr<net::INetRequest> pNetRequest = m_ptrFactory->createNetRequest();
|
714
|
-
NetResponse(resp, pNetRequest->
|
718
|
+
NetResponse(resp, pNetRequest->pushData( url, "rho_callback=1", null ));
|
715
719
|
(void)resp;
|
716
720
|
}
|
717
721
|
else
|