tgios 0.0.33 → 0.0.34
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile.lock +1 -1
- data/lib/tgios/beacon_manager.rb +44 -15
- data/lib/tgios/scan_qr_controller.rb +14 -20
- data/lib/tgios/ui_table_view_list_binding.rb +36 -1
- data/lib/tgios/ui_table_view_model_binding.rb +6 -2
- data/lib/tgios/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZGQxNmQ5YzAxNDM2MTUxYWRhYTc5ZmQ0YjIyYjVhZjgxYzljNDUyZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MjViMzE5MmQ0ZmI4N2Q2MzU5NTc3ZTA3OWUwY2JiZWZmMWVmODJkMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ODM3OTgyMTdjZGIzMDkxZjg0NWI4MWQzYjc4MTI1MzdhNjk2ZTE1ODEwYWVh
|
10
|
+
OTY3MmY3ZDMwNjZiZTk2N2NlNzMwYWU2YjJlZTFmMGVlMmUzMWZiZmQ2NGVh
|
11
|
+
YzY1MDFiZDgwODU5NmI3YjFiMWE5MTM0ODRiNmRlYzU4NmExZWM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZDE1YjNjMGI4ZjA0NjViOTViYjQwN2VlMGRkM2Q3NjNkN2EzZTNhZmU1ZWQ3
|
14
|
+
YjA0ZDU3OTZlNTEwN2E0OWIwMzRmYWQ3YzNhMGVlMGQyNGVjZGRiYjE4ZTQ1
|
15
|
+
NTUzOTc1NGVkZTg1MDAyZjVjOTk0NDkzMzgyZGQ4Yzc2OTI4MDI=
|
data/Gemfile.lock
CHANGED
data/lib/tgios/beacon_manager.rb
CHANGED
@@ -11,7 +11,11 @@ module Tgios
|
|
11
11
|
end
|
12
12
|
|
13
13
|
class BeaconManager < BindingBase
|
14
|
-
attr_accessor :rssi
|
14
|
+
attr_accessor :rssi, :current_beacon
|
15
|
+
|
16
|
+
BeaconFoundKey = 'Tgios::BeaconManager::BeaconFound'
|
17
|
+
EnterRegionKey = 'Tgios::BeaconManager::EnterRegion'
|
18
|
+
ExitRegionKey = 'Tgios::BeaconManager::ExitRegion'
|
15
19
|
|
16
20
|
def self.default=(val)
|
17
21
|
@default = val
|
@@ -21,9 +25,11 @@ module Tgios
|
|
21
25
|
@default
|
22
26
|
end
|
23
27
|
|
24
|
-
def initialize(uuid, rssi=-70)
|
28
|
+
def initialize(uuid, rssi=-70, background=false, tolerance=5)
|
25
29
|
@events = {}
|
26
30
|
@previous_beacons = []
|
31
|
+
@background = background
|
32
|
+
@tolerance = (tolerance || 5)
|
27
33
|
|
28
34
|
@uuid = NSUUID.alloc.initWithUUIDString(uuid)
|
29
35
|
@rssi = rssi
|
@@ -47,38 +53,45 @@ module Tgios
|
|
47
53
|
def locationManager(manager, didDetermineState: state, forRegion: region)
|
48
54
|
NSLog "didDetermineState #{state}"
|
49
55
|
if state == CLRegionStateInside
|
50
|
-
|
56
|
+
manager.startRangingBeaconsInRegion(region)
|
51
57
|
end
|
52
58
|
end
|
53
59
|
|
54
60
|
def locationManager(manager, didEnterRegion: region)
|
55
61
|
NSLog 'didEnterRegion'
|
56
62
|
if region.isKindOfClass(CLBeaconRegion)
|
57
|
-
|
63
|
+
manager.startRangingBeaconsInRegion(region)
|
58
64
|
end
|
59
65
|
end
|
60
66
|
|
61
67
|
def locationManager(manager, didExitRegion: region)
|
62
68
|
NSLog 'didExitRegion'
|
63
69
|
if region.isKindOfClass(CLBeaconRegion)
|
64
|
-
|
70
|
+
manager.stopRangingBeaconsInRegion(region)
|
71
|
+
if has_event(:exit_region)
|
72
|
+
@events[:exit_region].call(region)
|
73
|
+
end
|
65
74
|
end
|
66
75
|
end
|
67
76
|
|
68
77
|
def locationManager(manager, didRangeBeacons: beacons, inRegion: region)
|
69
78
|
if has_event(:beacons_found)
|
70
|
-
@events[:beacons_found].call(beacons.select{|b| b.proximity != CLProximityUnknown && b.rssi >= @rssi})
|
79
|
+
@events[:beacons_found].call(beacons.select{|b| b.proximity != CLProximityUnknown && b.rssi >= @rssi}, beacons)
|
71
80
|
end
|
72
|
-
if has_event(:beacon_found)
|
73
|
-
known_beacons = beacons.select{|b| b.proximity != CLProximityUnknown}.sort_by{|b| b.rssi}
|
74
|
-
if known_beacons.present?
|
75
|
-
beacon = known_beacons.last if known_beacons.last.rssi >= @rssi
|
76
|
-
beacon ||= known_beacons.last if known_beacons.length == 1 && known_beacons.last.rssi >= @rssi - 1
|
77
|
-
end
|
78
81
|
|
79
|
-
|
82
|
+
known_beacons = beacons.select{|b| b.proximity != CLProximityUnknown}.sort_by{|b| b.rssi}
|
83
|
+
if known_beacons.present?
|
84
|
+
beacon = known_beacons.last if known_beacons.last.rssi >= @rssi
|
85
|
+
beacon ||= known_beacons.last if known_beacons.length == 1 && known_beacons.last.rssi >= @rssi - 1
|
86
|
+
end
|
87
|
+
|
88
|
+
push_beacon(beacon)
|
89
|
+
|
90
|
+
if has_event(:beacon_found)
|
80
91
|
@events[:beacon_found].call(@current_beacon)
|
81
92
|
end
|
93
|
+
|
94
|
+
BeaconFoundKey.post_notification(self, {region: region, beacon: @current_beacon})
|
82
95
|
end
|
83
96
|
|
84
97
|
def location_manager
|
@@ -86,10 +99,26 @@ module Tgios
|
|
86
99
|
begin
|
87
100
|
manager = CLLocationManager.alloc.init
|
88
101
|
manager.delegate = self
|
102
|
+
request_authorization(manager)
|
89
103
|
manager
|
90
104
|
end
|
91
105
|
end
|
92
106
|
|
107
|
+
def request_authorization(manager)
|
108
|
+
if manager.respond_to?(:requestAlwaysAuthorization)
|
109
|
+
status = CLLocationManager.authorizationStatus
|
110
|
+
if status == KCLAuthorizationStatusAuthorizedWhenInUse || status == KCLAuthorizationStatusDenied
|
111
|
+
title = (status == kCLAuthorizationStatusDenied) ? "Location services are off" : "Background location is not enabled"
|
112
|
+
message = "To use background location you must turn on 'Always' in the Location Services Settings"
|
113
|
+
|
114
|
+
UIAlertView.alert(title, message: message)
|
115
|
+
else
|
116
|
+
manager.requestAlwaysAuthorization
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
93
122
|
def start_monitor
|
94
123
|
location_manager.startMonitoringForRegion(@region)
|
95
124
|
location_manager.requestStateForRegion(@region)
|
@@ -107,7 +136,7 @@ module Tgios
|
|
107
136
|
|
108
137
|
def on_enter_background(noti)
|
109
138
|
NSLog 'on_enter_background'
|
110
|
-
stop_monitor
|
139
|
+
stop_monitor unless @background
|
111
140
|
end
|
112
141
|
|
113
142
|
def has_event(event)
|
@@ -125,7 +154,7 @@ module Tgios
|
|
125
154
|
end
|
126
155
|
end
|
127
156
|
@previous_beacons << beacon
|
128
|
-
@previous_beacons.delete_at(0) if @previous_beacons.length >
|
157
|
+
@previous_beacons.delete_at(0) if @previous_beacons.length > @tolerance
|
129
158
|
end
|
130
159
|
|
131
160
|
def beacon_eqs(beacon1, beacon2)
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Tgios
|
2
2
|
class ScanQrController < UIViewController
|
3
|
+
attr_accessor :types
|
4
|
+
|
3
5
|
def viewDidLoad
|
4
6
|
super
|
5
7
|
self.view.backgroundColor = :dark_gray.uicolor
|
@@ -39,25 +41,13 @@ module Tgios
|
|
39
41
|
@output = AVCaptureMetadataOutput.alloc.init
|
40
42
|
@output.setMetadataObjectsDelegate self, queue: @queue.dispatch_object
|
41
43
|
|
42
|
-
@session.addInput @input
|
43
|
-
@session.addOutput @output
|
44
|
-
@output.metadataObjectTypes = [ AVMetadataObjectTypeQRCode ]
|
45
|
-
|
46
|
-
@isScanning = true
|
47
|
-
|
48
|
-
@session.startRunning
|
49
|
-
#NSLog "session running: #{@session.running?}"
|
50
|
-
|
51
|
-
|
52
|
-
|
53
44
|
camera_size = layerRect.size
|
54
45
|
sq_size = 240
|
55
46
|
sq_border = 20
|
56
47
|
line_length = 60
|
48
|
+
border_color = :white.cgcolor(0.8)
|
57
49
|
sq_x = (camera_size.width - sq_size) / 2
|
58
50
|
sq_y = (camera_size.height - sq_size) / 2
|
59
|
-
v_height = sq_size - sq_border * 2
|
60
|
-
border_color = :white.cgcolor(0.8)
|
61
51
|
|
62
52
|
square = Base.style(CALayer.layer, {frame: [[sq_x, sq_y],[sq_size, sq_size]]})
|
63
53
|
|
@@ -81,25 +71,30 @@ module Tgios
|
|
81
71
|
|
82
72
|
self.view.layer.addSublayer square
|
83
73
|
|
74
|
+
@output.rectOfInterest = [[sq_y / camera_size.height, sq_x / camera_size.width], [sq_size / camera_size.height, sq_size / camera_size.width]]
|
75
|
+
|
76
|
+
@session.addInput @input
|
77
|
+
@session.addOutput @output
|
78
|
+
@output.metadataObjectTypes = ( @types || [AVMetadataObjectTypeQRCode] )
|
79
|
+
|
80
|
+
@isScanning = true
|
81
|
+
|
82
|
+
@session.startRunning
|
83
|
+
|
84
84
|
true
|
85
85
|
end
|
86
86
|
|
87
87
|
def captureOutput(captureOutput, didOutputMetadataObjects: metadataObjects, fromConnection: connection)
|
88
|
-
|
89
88
|
metadataObject = metadataObjects[0]
|
90
89
|
|
91
|
-
if !@scanned && metadataObject.present?
|
90
|
+
if !@scanned && metadataObject.present?
|
92
91
|
@scanned = true
|
93
|
-
#NSLog "#{metadataObjects[0].stringValue}"
|
94
|
-
|
95
92
|
|
96
93
|
self.performSelectorOnMainThread('openQRCode:', withObject: metadataObject.stringValue, waitUntilDone: false)
|
97
94
|
end
|
98
95
|
end
|
99
96
|
|
100
97
|
def openQRCode(result)
|
101
|
-
#NSLog "openQRCode()"
|
102
|
-
|
103
98
|
stop_scanning
|
104
99
|
|
105
100
|
@events[:result_scanned].call(result)
|
@@ -114,7 +109,6 @@ module Tgios
|
|
114
109
|
@isScanning = false
|
115
110
|
|
116
111
|
@session.stopRunning
|
117
|
-
#NSLog "session running: #{@session.running?}"
|
118
112
|
|
119
113
|
@previewLayer.removeFromSuperlayer
|
120
114
|
@previewLayer = nil
|
@@ -66,6 +66,15 @@ module Tgios
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def tableView(tableView, heightForRowAtIndexPath: index_path)
|
69
|
+
height = if @events.has_key?(:cell_height)
|
70
|
+
record = @list[index_path.row]
|
71
|
+
@events[:cell_height].call(index_path, record)
|
72
|
+
end
|
73
|
+
return height if height.is_a?(Numeric)
|
74
|
+
cell_height
|
75
|
+
end
|
76
|
+
|
77
|
+
def cell_height
|
69
78
|
return @options[:height] unless @options[:height].nil?
|
70
79
|
if @options[:lines]
|
71
80
|
26 + 19 * (@options[:lines] || 2)
|
@@ -88,6 +97,32 @@ module Tgios
|
|
88
97
|
end
|
89
98
|
end
|
90
99
|
end
|
100
|
+
|
101
|
+
def tableView(tableView, commitEditingStyle: editingStyle, forRowAtIndexPath: index_path)
|
102
|
+
if editingStyle == UITableViewCellEditingStyleDelete
|
103
|
+
if @events[:delete_row].present?
|
104
|
+
@events[:delete_row].call(@list[index_path.row], {tableView: tableView, commitEditingStyle: editingStyle, forRowAtIndexPath:index_path}) do |success|
|
105
|
+
tableView.deleteRowsAtIndexPaths([index_path], withRowAnimation: UITableViewRowAnimationFade) if success
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def tableView(tableView, canEditRowAtIndexPath: index_path)
|
112
|
+
can_edit = false
|
113
|
+
|
114
|
+
if @events[:delete_row].present?
|
115
|
+
if @events[:can_edit].present?
|
116
|
+
@events[:can_edit].call(tableView, index_path) do |success|
|
117
|
+
can_edit = success
|
118
|
+
end
|
119
|
+
else
|
120
|
+
can_edit = true
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
can_edit
|
125
|
+
end
|
91
126
|
|
92
127
|
def onPrepareForRelease
|
93
128
|
@events=nil
|
@@ -103,4 +138,4 @@ module Tgios
|
|
103
138
|
|
104
139
|
end
|
105
140
|
|
106
|
-
end
|
141
|
+
end
|
@@ -45,10 +45,14 @@ module Tgios
|
|
45
45
|
bindings_prepare_release
|
46
46
|
@bindings={}
|
47
47
|
@tv_bindings={}
|
48
|
-
self.model=model
|
49
48
|
@tableView.dataSource=self
|
50
49
|
@tableView.delegate=self
|
51
|
-
|
50
|
+
self.model=model
|
51
|
+
if @table_utility_binding.nil?
|
52
|
+
@table_utility_binding = UITableViewUtilityBinding.new.bind(@tableView)
|
53
|
+
else
|
54
|
+
@table_utility_binding.bind(@tableView)
|
55
|
+
end
|
52
56
|
self
|
53
57
|
end
|
54
58
|
|
data/lib/tgios/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tgios
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.34
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- April Tsang
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-11-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sugarcube
|