yesyoucam 0.1 → 0.3
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 +4 -4
- data/README.md +92 -6
- data/lib/project/yesyoucam.rb +92 -1
- data/lib/yesyoucam.rb +12 -2
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9208f8d396f559090d26d908e11e5ccdd19723da
|
4
|
+
data.tar.gz: 9b46dba729b433f48a0f0dcc49338957eef8fea7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 167482ff74f823b2367e142522621e81147e4abf79526174bd8f30f6579bdf1e0c51ea7d49b9f58bfe618c59a199fe47a144c7df28741e001b792cc3c886d2dc
|
7
|
+
data.tar.gz: 2de83e738c72c798c8e031ae127c98edba689e4f1f8ab9f66dc1cb5ad184e4aebf62e123956632023e55e6d855acdabcb9a4cd125278ae31da42b259b044fa0c
|
data/README.md
CHANGED
@@ -2,6 +2,91 @@
|
|
2
2
|
## A **Ridiculous**ly Simple BluePotion Camera Library to help you achieve your dreams...
|
3
3
|

|
4
4
|
|
5
|
+
## Usage ("Nothing is impossible")
|
6
|
+
|
7
|
+
### Take a Photo
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
# Fire off a photo taking request
|
11
|
+
# Returns true if camera intent is presented to the user.
|
12
|
+
# Depends on camera existence (YesYouCam.camera_exists?)
|
13
|
+
YesYouCam.capture_photo
|
14
|
+
```
|
15
|
+
|
16
|
+
### On Take a Photo Completion - Get Photo
|
17
|
+
```ruby
|
18
|
+
# called in BluePotion when the photo has been taken (or any activity is completed actually)
|
19
|
+
# If you're not using a PMActivity you should capture the onActivityResult method.
|
20
|
+
def activity_result(request_code, result_code, data)
|
21
|
+
# Verify this activity was for us!
|
22
|
+
if (request_code == YesYouCam::CAPTURE_IMAGE_RC)
|
23
|
+
if (result_code == YesYouCam::OK) # OR Android::App::Activity::RESULT_OK
|
24
|
+
# Photo success!
|
25
|
+
mp "Full sized photo located at #{YesYouCam.photo_path}"
|
26
|
+
# now you can do find!(:some_image_view).imageBitmap = YesYouCam.bmp_data
|
27
|
+
else
|
28
|
+
# Photo failed or was cancelled
|
29
|
+
app.toast "No Photo"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
### Want a PNG?
|
36
|
+
```ruby
|
37
|
+
# Did you need a PNG instead of a JPG?
|
38
|
+
YesYouCam.photo_path # Some JPG path
|
39
|
+
YesYouCam.pic_to_png
|
40
|
+
YesYouCam.photo_path # Some new PNG path
|
41
|
+
```
|
42
|
+
|
43
|
+
### Need the photo discoverable by Photo Libraries and other Apps?
|
44
|
+
```ruby
|
45
|
+
# Run this and the current photo (YesYouCam.photo_path) will be
|
46
|
+
# added to the user's Photo Gallery, and accessible by all apps.
|
47
|
+
YesYouCam.add_to_gallery
|
48
|
+
```
|
49
|
+
|
50
|
+
### Let the user select a photo from their library?
|
51
|
+
```ruby
|
52
|
+
# Fire off a photo choose request
|
53
|
+
YesYouCam.choose_photo
|
54
|
+
```
|
55
|
+
|
56
|
+
### Kitchen Sink Example
|
57
|
+
```ruby
|
58
|
+
app.alert(title: "Update Photo", message: "How would you like to update your photo?", positive_button: "Take Photo", negative_button: "Choose from Library") do |choice|
|
59
|
+
case choice
|
60
|
+
when "Take Photo"
|
61
|
+
YesYouCam.capture_photo
|
62
|
+
when "Choose from Library"
|
63
|
+
YesYouCam.choose_photo
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def activity_result(request_code, result_code, data)
|
68
|
+
if request_code == YesYouCam::CAPTURE_IMAGE_RC
|
69
|
+
if result_code == YesYouCam::OK
|
70
|
+
# Photo success!
|
71
|
+
mp "Full sized photo located at #{YesYouCam.photo_path}"
|
72
|
+
find!(:some_image_view).imageBitmap = YesYouCam.bmp_data
|
73
|
+
else
|
74
|
+
# Photo failed or was cancelled
|
75
|
+
app.toast "No Photo"
|
76
|
+
end
|
77
|
+
elsif request_code == YesYouCam::CHOOSE_IMAGE_RC
|
78
|
+
# the chosen photo
|
79
|
+
selected_uri = data.getData
|
80
|
+
# Did you want the path?
|
81
|
+
photo_path = YesYouCam.pic_path_from_uri(selected_uri)
|
82
|
+
# Did you want the BMP data?
|
83
|
+
bmp_data = YesYouCam.bmp_data(photo_path)
|
84
|
+
# Nope, the uri is fine...
|
85
|
+
find!(:some_image_view).imageURI = selected_uri
|
86
|
+
end
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
5
90
|
## Installation
|
6
91
|
|
7
92
|
Add this line to your application's Gemfile:
|
@@ -12,13 +97,13 @@ And then execute:
|
|
12
97
|
|
13
98
|
$ bundle
|
14
99
|
|
15
|
-
|
16
|
-
|
17
|
-
$ gem install yesyoucam
|
100
|
+
Now make sure your `Rakefile` has camera permissions and features needed:
|
18
101
|
|
19
|
-
|
102
|
+
# This gem will try to add permissions, but it's best that you assure they are set!
|
103
|
+
app.permissions += [:write_external_storage]
|
104
|
+
# This gem will add this feature, but it's safest for you to also set it!
|
105
|
+
app.features = ["android.hardware.camera"]
|
20
106
|
|
21
|
-
TODO: Write usage instructions here
|
22
107
|
|
23
108
|
## Contributing
|
24
109
|
|
@@ -26,4 +111,5 @@ TODO: Write usage instructions here
|
|
26
111
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
112
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
113
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
-
5.
|
114
|
+
5. Order some mexican food and beat a piñata
|
115
|
+
6. Create new Pull Request
|
data/lib/project/yesyoucam.rb
CHANGED
@@ -1,4 +1,95 @@
|
|
1
|
-
class
|
1
|
+
class YesYouCam
|
2
|
+
OK = Android::App::Activity::RESULT_OK
|
3
|
+
CAPTURE_IMAGE_RC = 100
|
4
|
+
CHOOSE_IMAGE_RC = 101
|
5
|
+
DATA = "_data" # MediaStore.Images.Media.DATA
|
2
6
|
|
7
|
+
class << self
|
8
|
+
|
9
|
+
|
10
|
+
@current_photo_path = nil
|
11
|
+
|
12
|
+
|
13
|
+
# Returns true or false on success of firing a photo intent
|
14
|
+
def capture_photo
|
15
|
+
success = false
|
16
|
+
if camera_exists?
|
17
|
+
# Performing this check is important because if you call startActivityForResult
|
18
|
+
# using an intent that no app can handle, your app will crash.
|
19
|
+
# So as long as the result is not nil, it's safe to use the intent.
|
20
|
+
take_picture_intent = Potion::Intent.new(Potion::MediaStore::ACTION_IMAGE_CAPTURE)
|
21
|
+
if take_picture_intent.resolveActivity(app.package_manager)
|
22
|
+
# create place for photo to go
|
23
|
+
photo_file = create_image_file
|
24
|
+
|
25
|
+
if photo_file
|
26
|
+
take_picture_intent.putExtra(Potion::MediaStore::EXTRA_OUTPUT, Potion::Uri.fromFile(photo_file))
|
27
|
+
find.activity.startActivityForResult(take_picture_intent, YesYouCam::CAPTURE_IMAGE_RC)
|
28
|
+
success = true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
success
|
33
|
+
end
|
34
|
+
|
35
|
+
def choose_photo
|
36
|
+
choose_pic = Potion::Intent.new(Potion::Intent::ACTION_PICK, Potion::INTERNAL_CONTENT_URI)
|
37
|
+
find.activity.startActivityForResult(choose_pic, YesYouCam::CHOOSE_IMAGE_RC)
|
38
|
+
end
|
39
|
+
|
40
|
+
def pic_to_png(quality=100)
|
41
|
+
bmp = Potion::BitmapFactory.decodeFile(@current_photo_path)
|
42
|
+
# NOTE the instance var for current photo changes with this command
|
43
|
+
create_image_file("png")
|
44
|
+
image = Potion::File.new(@current_photo_path)
|
45
|
+
out_stream = Potion::FileOutputStream.new(image)
|
46
|
+
bmp.compress(Android::Graphics::Bitmap::CompressFormat::PNG, quality, out_stream)
|
47
|
+
out_stream.flush
|
48
|
+
out_stream.close
|
49
|
+
end
|
50
|
+
|
51
|
+
def photo_path
|
52
|
+
@current_photo_path
|
53
|
+
end
|
54
|
+
|
55
|
+
def bmp_data(optional_path=nil)
|
56
|
+
file_path = optional_path ? optional_path : photo_path
|
57
|
+
Android::Graphics::BitmapFactory.decodeFile(file_path)
|
58
|
+
end
|
59
|
+
|
60
|
+
def camera_exists?
|
61
|
+
find.app.package_manager.hasSystemFeature("android.hardware.camera")
|
62
|
+
end
|
63
|
+
|
64
|
+
def add_to_gallery
|
65
|
+
media_scan_intent = Potion::Intent.new(Potion::Intent::ACTION_MEDIA_SCANNER_SCAN_FILE)
|
66
|
+
photo_file = Potion::File.new(photo_path)
|
67
|
+
content_uri = Potion::Uri.fromFile(photo_file)
|
68
|
+
media_scan_intent.setData(content_uri)
|
69
|
+
find.app.context.sendBroadcast(media_scan_intent)
|
70
|
+
end
|
71
|
+
|
72
|
+
def pic_path_from_uri (content_uri)
|
73
|
+
cursor = find.app.context.contentResolver.query(content_uri, nil, nil, nil, nil)
|
74
|
+
column_index = cursor.getColumnIndexOrThrow(YesYouCam::DATA)
|
75
|
+
cursor.moveToFirst
|
76
|
+
path = cursor.getString(column_index)
|
77
|
+
cursor.close
|
78
|
+
|
79
|
+
path
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def create_image_file(extension="jpg")
|
85
|
+
file_name = "#{app.name}_#{Time.now.to_i}"
|
86
|
+
storage_dir = Potion::Environment.getExternalStoragePublicDirectory(Potion::Environment::DIRECTORY_PICTURES)
|
87
|
+
image_file = Potion::File.createTempFile(file_name, ".#{extension}", storage_dir)
|
88
|
+
|
89
|
+
@current_photo_path = "#{image_file.getAbsolutePath}"
|
90
|
+
image_file
|
91
|
+
end
|
92
|
+
|
93
|
+
end # close eigenclass
|
3
94
|
end
|
4
95
|
|
data/lib/yesyoucam.rb
CHANGED
@@ -4,7 +4,17 @@ unless defined?(Motion::Project::Config)
|
|
4
4
|
raise "This file must be required within a RubyMotion project Rakefile."
|
5
5
|
end
|
6
6
|
|
7
|
+
require 'bluepotion'
|
8
|
+
|
7
9
|
lib_dir_path = File.dirname(File.expand_path(__FILE__))
|
8
10
|
Motion::Project::App.setup do |app|
|
9
|
-
|
10
|
-
|
11
|
+
# Add camera feature
|
12
|
+
app.permissions += ["android.permission.WRITE_EXTERNAL_STORAGE"]
|
13
|
+
app.features << "android.hardware.camera"
|
14
|
+
# Find insert point
|
15
|
+
insert_point = app.files.find_index { |file| file =~ /^(?:\.\/)?app\// } || 0
|
16
|
+
|
17
|
+
Dir.glob(File.join(lib_dir_path, "project/**/*.rb")).reverse.each do |file|
|
18
|
+
app.files.insert(insert_point, file)
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yesyoucam
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gant
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bluepotion
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
description: Quickly and easily implment camera functions in RubyMotion Android
|
28
42
|
email:
|
29
43
|
- GantMan@gmail.com
|
@@ -38,7 +52,7 @@ homepage: https://github.com/GantMan/yesyoucam
|
|
38
52
|
licenses:
|
39
53
|
- MIT
|
40
54
|
metadata: {}
|
41
|
-
post_install_message:
|
55
|
+
post_install_message:
|
42
56
|
rdoc_options: []
|
43
57
|
require_paths:
|
44
58
|
- lib
|