tgios 0.0.33 → 0.0.34
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.
- 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
|