├── .gitignore
├── Changelog-3.9.2.txt
├── Changelog-4.4.5.txt
├── Changelog-5.0.3.txt
├── Changelog-5.0.9.txt
├── Changelog-5.1.0.txt
├── Changelog-5.1.3.txt
├── LICENSE
├── README.md
├── Trycorder-5.2.3.apk
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ ├── finalnew.ttf
│ ├── finalold.ttf
│ └── sonysketchef.ttf
│ ├── java
│ └── net
│ │ └── ddns
│ │ └── mlsoftlaberge
│ │ └── trycorder
│ │ ├── TrycorderActivity.java
│ │ ├── TrycorderFragment.java
│ │ ├── TrycorderReceiver.java
│ │ ├── TrycorderService.java
│ │ ├── TrydesktopFragment.java
│ │ ├── TrygalleryFragment.java
│ │ ├── TrysensorFragment.java
│ │ ├── TryviewerFragment.java
│ │ ├── TryviscamFragment.java
│ │ ├── TryvisionFragment.java
│ │ ├── contacts
│ │ ├── ContactAdminActivity.java
│ │ ├── ContactAdminFragment.java
│ │ ├── ContactEditMemoActivity.java
│ │ ├── ContactEditMemoFragment.java
│ │ ├── ContactEditTransActivity.java
│ │ ├── ContactEditTransFragment.java
│ │ ├── ContactsBudgetActivity.java
│ │ ├── ContactsBudgetFragment.java
│ │ ├── ContactsListActivity.java
│ │ ├── ContactsListFragment.java
│ │ ├── ImageCache.java
│ │ ├── ImageLoader.java
│ │ └── Utils.java
│ │ ├── products
│ │ ├── MyProductContentProvider.java
│ │ ├── ProductDatabaseHelper.java
│ │ ├── ProductDetailActivity.java
│ │ ├── ProductTable.java
│ │ └── ProductsListActivity.java
│ │ ├── settings
│ │ ├── SettingsActivity.java
│ │ └── SettingsFragment.java
│ │ ├── tryclient
│ │ ├── TryclientActivity.java
│ │ └── TryclientFragment.java
│ │ ├── trycorder
│ │ ├── AudSensorView.java
│ │ ├── AutoFitTextureView.java
│ │ ├── FirSensorView.java
│ │ ├── GIFView.java
│ │ ├── GraSensorView.java
│ │ ├── LogsStatView.java
│ │ ├── MagSensorView.java
│ │ ├── MotSensorView.java
│ │ ├── OriSensorView.java
│ │ ├── ShiSensorView.java
│ │ ├── TemSensorView.java
│ │ ├── TraSensorView.java
│ │ ├── TrbSensorView.java
│ │ └── VerticalSeekBar.java
│ │ └── utils
│ │ ├── Fetcher.java
│ │ └── FileUtils.java
│ └── res
│ ├── anim
│ ├── blink.xml
│ ├── clockwise.xml
│ ├── fadein.xml
│ ├── fadeinout.xml
│ ├── rotateback.xml
│ └── slidein.xml
│ ├── drawable
│ ├── app_sample_code.png
│ ├── btn_check_on.png
│ ├── btn_star_big_on.png
│ ├── call_contact.png
│ ├── earth_still.jpg
│ ├── federation_logo.jpg
│ ├── ic_action_add.png
│ ├── ic_action_check_in.png
│ ├── ic_action_edit.png
│ ├── ic_action_search.png
│ ├── ic_contact_picture.png
│ ├── ic_dialog_email.png
│ ├── ic_menu_edit.png
│ ├── ic_menu_save.png
│ ├── martin.jpg
│ ├── picture_frame.png
│ ├── reminder.png
│ ├── roddenberry_stillwell.jpg
│ ├── starship_build.jpg
│ ├── starship_plan.jpg
│ ├── starship_sideview.jpg
│ ├── starship_topview.jpg
│ ├── starship_view.png
│ ├── startrek_logo.png
│ ├── trek_bottomleft.png
│ ├── trek_bottomright.png
│ ├── trek_horizontalline.png
│ ├── trek_topleft.png
│ ├── trek_topright.png
│ ├── trek_verticalline.png
│ ├── trekbutton_blue.xml
│ ├── trekbutton_blue_center.xml
│ ├── trekbutton_blue_left.xml
│ ├── trekbutton_blue_right.xml
│ ├── trekbutton_gray.xml
│ ├── trekbutton_gray_center.xml
│ ├── trekbutton_gray_left.xml
│ ├── trekbutton_gray_right.xml
│ ├── trekbutton_green.xml
│ ├── trekbutton_green_center.xml
│ ├── trekbutton_green_left.xml
│ ├── trekbutton_green_right.xml
│ ├── trekbutton_indigo.xml
│ ├── trekbutton_indigo_center.xml
│ ├── trekbutton_indigo_left.xml
│ ├── trekbutton_indigo_right.xml
│ ├── trekbutton_mauve.xml
│ ├── trekbutton_mauve_center.xml
│ ├── trekbutton_mauve_left.xml
│ ├── trekbutton_mauve_right.xml
│ ├── trekbutton_orange.xml
│ ├── trekbutton_orange_center.xml
│ ├── trekbutton_orange_left.xml
│ ├── trekbutton_orange_right.xml
│ ├── trekbutton_pink.xml
│ ├── trekbutton_pink_center.xml
│ ├── trekbutton_pink_left.xml
│ ├── trekbutton_pink_right.xml
│ ├── trekbutton_red.xml
│ ├── trekbutton_red_center.xml
│ ├── trekbutton_red_left.xml
│ ├── trekbutton_red_right.xml
│ ├── trekbutton_vert.xml
│ ├── trekbutton_vert_center.xml
│ ├── trekbutton_vert_left.xml
│ ├── trekbutton_vert_right.xml
│ ├── trekbutton_yellow.xml
│ ├── trekbutton_yellow_center.xml
│ ├── trekbutton_yellow_left.xml
│ ├── trekbutton_yellow_right.xml
│ ├── trycorder_icon.png
│ ├── universe.jpg
│ └── warpcore.jpg
│ ├── layout
│ ├── contact_address_item.xml
│ ├── contact_admin_fragment.xml
│ ├── contact_editmemo_fragment.xml
│ ├── contact_edittrans_fragment.xml
│ ├── contact_email_item.xml
│ ├── contact_list_fragment.xml
│ ├── contact_list_item.xml
│ ├── contact_list_main.xml
│ ├── contact_phone_item.xml
│ ├── contact_transaction_item.xml
│ ├── contacts_budget_fragment.xml
│ ├── contacts_budget_item.xml
│ ├── contacts_budget_trans.xml
│ ├── gallery_activity.xml
│ ├── product_edit.xml
│ ├── product_list.xml
│ ├── product_row.xml
│ ├── tryclient_fragment.xml
│ ├── trycorder_fragment.xml
│ ├── trydesktop_fragment.xml
│ ├── trygallery_fragment.xml
│ ├── trysensor_fragment.xml
│ ├── tryviewer_fragment.xml
│ ├── tryviewer_row.xml
│ ├── tryviscam_fragment.xml
│ └── tryvision_fragment.xml
│ ├── menu
│ ├── contact_admin_menu.xml
│ ├── contact_list_menu.xml
│ ├── contacts_budget_menu.xml
│ ├── popupdel.xml
│ └── product_list_menu.xml
│ ├── raw
│ ├── alert15.mp3
│ ├── beam1a.wav
│ ├── beam1b.wav
│ ├── commclose.mp3
│ ├── commopen.wav
│ ├── computerbeep_39.mp3
│ ├── computerbeep_55.mp3
│ ├── denybeep1.mp3
│ ├── destructsequence.mp3
│ ├── donotaddressthisunitinthatmanner_clean.mp3
│ ├── earth_rotating.gif
│ ├── keyok2.mp3
│ ├── long_range_scan.mp3
│ ├── phasertype2.wav
│ ├── photorp1.wav
│ ├── scan_high.wav
│ ├── scan_low.wav
│ ├── shielddown.wav
│ ├── shieldup.mp3
│ ├── tng_red_alert1.mp3
│ ├── tng_slowwarp_clean2.mp3
│ ├── tng_tractor_clean.mp3
│ ├── tng_warp5_clean.mp3
│ ├── tricscan2.wav
│ ├── voy_core_2.mp3
│ └── warp_animation.gif
│ ├── values
│ ├── arrays.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
│ └── xml
│ └── preferences.xml
├── build.gradle
├── docs
├── Trycorder-5.0.2.odt
├── Trycorder-5.0.2.pdf
├── _config.yml
└── index.html
├── gitall.sh
├── gitchange.sh
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── initgit5.sh
├── screenshot
├── Screenshot_2016-12-23-09-44-46.png
├── Screenshot_2016-12-23-09-45-08.png
├── Screenshot_2016-12-23-09-45-29.png
├── Screenshot_2016-12-23-09-45-39.png
├── Screenshot_2016-12-23-09-45-55.png
├── Screenshot_2016-12-23-09-46-29.png
├── Screenshot_2016-12-23-09-46-45.png
├── Screenshot_2016-12-23-09-47-08.png
├── Screenshot_2016-12-23-09-47-17.png
├── Screenshot_2016-12-23-09-47-28.png
├── Screenshot_2016-12-23-09-48-04.png
├── Screenshot_2016-12-23-09-49-17.png
├── Screenshot_2016-12-23-09-49-28.png
├── Screenshot_2016-12-23-09-50-45.png
├── Screenshot_2016-12-23-09-51-10.png
├── Screenshot_2016-12-23-09-51-34.png
├── Screenshot_2016-12-23-09-51-54.png
├── Screenshot_2016-12-23-09-52-16.png
├── Screenshot_2016-12-23-09-52-28.png
├── Screenshot_2016-12-23-09-52-39.png
├── Screenshot_2016-12-23-09-53-45.png
├── Screenshot_2016-12-23-09-54-52.png
├── Screenshot_2016-12-23-09-56-08.png
├── Screenshot_2016-12-23-09-56-28.png
├── Screenshot_2016-12-23-09-56-59.png
├── Screenshot_2016-12-23-09-57-23.png
├── Screenshot_2016-12-23-09-57-47.png
└── Screenshot_2016-12-23-09-58-42.png
├── screenshot_4.png
├── screenshot_5.png
├── settings.gradle
├── tryclient
├── .kdev4
│ └── tryclient.kdev4
├── CMakeLists.txt
├── make.sh
├── tryclient
├── tryclient.c
└── tryclient.kdev4
├── trycorder.jks
├── tryserver
├── .kdev4
│ └── tryserver.kdev4
├── .sqliterc
├── CMakeLists.txt
├── make.sh
├── trydump.sh
├── trylist.sh
├── trylog.sh
├── trymodel.sh
├── trysel.sh
├── tryserver
├── tryserver.c
├── tryserver.kdev4
├── tryserver.schema
└── tryserver.sh
└── trysql
├── .kdev4
└── trysql.kdev4
├── .sqliterc
├── CMakeLists.txt
├── ip2city.sh
├── loadcity.sh
├── loadlist.sh
├── make.sh
├── old
└── loaddbip.sh
├── trycity.txt
├── trycorders.txt
├── trycount.sh
├── trycount.txt
├── trycountry.txt
├── trysql
├── trysql.c
├── trysql.kdev4
└── trysql.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | .idea
4 | /local.properties
5 | /.idea/workspace.xml
6 | /.idea/libraries
7 | .DS_Store
8 | /build
9 | /app/build
10 | /*/build
11 | /*/database
12 | /*/*.sqlite
13 | /*/*.dump
14 | /*/*.list
15 | /*/*.log
16 | /*/*.csv
17 | /*/try*.txt
18 |
--------------------------------------------------------------------------------
/Changelog-4.4.5.txt:
--------------------------------------------------------------------------------
1 | 2016-12-18: - version 4.4.5 fully connected around the planet thru the server initial working version of an international chat room and command sharing between trycorders
2 |
3 | 2016-12-11: - version 4.4.3 stabilisation of the messenger interface
4 |
5 | 2016-12-07: - Version 4.4.2 new chat function between all planetary trycorders
6 |
7 | 2016-12-02: - Version 4.3.141592
8 | this is the first version (4.Pi) who connects to a central server
9 |
10 | The tryserver directory contains the main central server who responds to the trycorders activity with a server-ok message
11 |
12 | This tryserver also logs in tryserver.log, the totality of messages received from trycorders and their ip-address
13 |
14 | 2016-11-23: - version 4.2.0 added a desktop fragment, for use with universal communicator/translator
15 |
16 | 2016-11-18: - version 4.1.3 added a global red alert to the system
17 |
18 | 2016-11-14: - version 4.1 new controls for the tractor-beam styles ajustments
19 |
20 | 2016-11-12: - Version 4.0 of the Famous Trycorder By Martin Laberge.
21 |
22 | 2016-11-12: - first commit
23 |
--------------------------------------------------------------------------------
/Changelog-5.0.3.txt:
--------------------------------------------------------------------------------
1 | 2017-01-15: - Version 5.0.3 Removed annoying sound. added some debugging scripts.
2 |
3 | 2017-01-15: - Version 5.0.3 Removed one annoying beep Prepared the tryserver to be more efficient
4 |
5 | 2017-01-12: - added to gitignore
6 |
7 | 2017-01-12: - Version 5.0.3 preparing for F-Droid repository
8 |
9 | 2017-01-08: - Version 5.0.2
10 | switched to Api 25 Nougat
11 |
12 | 2017-01-04: - remade the README.md with last texts
13 |
14 | 2017-01-04: - Merge branch 'master' of https://github.com/mlsoft/Trycorder5
15 |
16 | 2017-01-04: - renamed html doc to index.html
17 |
18 | 2017-01-04: - Set theme jekyll-theme-slate
19 |
20 | 2017-01-04: - reconverted the doc in xhtml format
21 |
22 | 2017-01-04: - modified readme
23 |
24 | 2017-01-04: - remake the index.html to be smaller
25 |
26 | 2017-01-04: - created the main index
27 |
28 | 2017-01-04: - moved files to prepare for web site
29 |
30 | 2017-01-04: - version 5.0.1 new screenshots modified manual ajusted service class
31 |
32 | 2016-12-21: - version 5.0.0 this is the first commit of the version 5 with remote ip-addr of others trycorders thru the tryserver
33 |
34 | 2016-12-19: - first commit
35 |
--------------------------------------------------------------------------------
/Changelog-5.0.9.txt:
--------------------------------------------------------------------------------
1 | 2017-02-05: - version 5.0.9 Tried to correct the camera-1 interface for newer camera-2 phones. adjusted some few things too.
2 |
3 | 2017-02-02: - version 5.0.7 updated tryserver to mirror less data updated trycorderservice to identify itself better
4 |
5 | 2017-01-19: - Version 5.0.6 minor corrections with the service
6 |
7 | 2017-01-18: - version 5.0.5 corrected the sensor-off command increased tryserver efficiency collected 500 differents machines who tested the app
8 |
9 | 2017-01-17: - version 5.0.4 minor ajustments
10 |
11 | 2017-01-15: - Updated changelog
12 |
13 | 2017-01-15: - Version 5.0.3 Removed annoying sound. added some debugging scripts.
14 |
15 | 2017-01-15: - Version 5.0.3 Removed one annoying beep Prepared the tryserver to be more efficient
16 |
17 | 2017-01-12: - added to gitignore
18 |
19 | 2017-01-12: - Version 5.0.3 preparing for F-Droid repository
20 |
21 | 2017-01-08: - Version 5.0.2
22 | switched to Api 25 Nougat
23 |
24 | 2017-01-04: - remade the README.md with last texts
25 |
26 | 2017-01-04: - Merge branch 'master' of https://github.com/mlsoft/Trycorder5
27 |
28 | 2017-01-04: - renamed html doc to index.html
29 |
30 | 2017-01-04: - Set theme jekyll-theme-slate
31 |
32 | 2017-01-04: - reconverted the doc in xhtml format
33 |
34 | 2017-01-04: - modified readme
35 |
36 | 2017-01-04: - remake the index.html to be smaller
37 |
38 | 2017-01-04: - created the main index
39 |
40 | 2017-01-04: - moved files to prepare for web site
41 |
42 | 2017-01-04: - version 5.0.1 new screenshots modified manual ajusted service class
43 |
44 | 2016-12-21: - version 5.0.0 this is the first commit of the version 5 with remote ip-addr of others trycorders thru the tryserver
45 |
46 | 2016-12-19: - first commit
47 |
--------------------------------------------------------------------------------
/Changelog-5.1.0.txt:
--------------------------------------------------------------------------------
1 | 2017-02-06: - version 5.1.0 added the apache license in every source files
2 |
3 | 2017-02-05: - updated changelog
4 |
5 | 2017-02-05: - version 5.0.9 Tried to correct the camera-1 interface for newer camera-2 phones. adjusted some few things too.
6 |
7 | 2017-02-02: - version 5.0.7 updated tryserver to mirror less data updated trycorderservice to identify itself better
8 |
9 | 2017-01-19: - Version 5.0.6 minor corrections with the service
10 |
11 | 2017-01-18: - version 5.0.5 corrected the sensor-off command increased tryserver efficiency collected 500 differents machines who tested the app
12 |
13 | 2017-01-17: - version 5.0.4 minor ajustments
14 |
15 | 2017-01-15: - Updated changelog
16 |
17 | 2017-01-15: - Version 5.0.3 Removed annoying sound. added some debugging scripts.
18 |
19 | 2017-01-15: - Version 5.0.3 Removed one annoying beep Prepared the tryserver to be more efficient
20 |
21 | 2017-01-12: - added to gitignore
22 |
23 | 2017-01-12: - Version 5.0.3 preparing for F-Droid repository
24 |
25 | 2017-01-08: - Version 5.0.2
26 | switched to Api 25 Nougat
27 |
28 | 2017-01-04: - remade the README.md with last texts
29 |
30 | 2017-01-04: - Merge branch 'master' of https://github.com/mlsoft/Trycorder5
31 |
32 | 2017-01-04: - renamed html doc to index.html
33 |
34 | 2017-01-04: - Set theme jekyll-theme-slate
35 |
36 | 2017-01-04: - reconverted the doc in xhtml format
37 |
38 | 2017-01-04: - modified readme
39 |
40 | 2017-01-04: - remake the index.html to be smaller
41 |
42 | 2017-01-04: - created the main index
43 |
44 | 2017-01-04: - moved files to prepare for web site
45 |
46 | 2017-01-04: - version 5.0.1 new screenshots modified manual ajusted service class
47 |
48 | 2016-12-21: - version 5.0.0 this is the first commit of the version 5 with remote ip-addr of others trycorders thru the tryserver
49 |
50 | 2016-12-19: - first commit
51 |
--------------------------------------------------------------------------------
/Changelog-5.1.3.txt:
--------------------------------------------------------------------------------
1 | 2017-02-25: - updated the apk
2 |
3 | 2017-02-25: - added a new statistic (by state)
4 |
5 | 2017-02-25: - version 5.1.3 refined the statistics functions adjusted the chat window
6 |
7 | 2017-02-18: - ajusted statistics for more precise values
8 |
9 | 2017-02-18: - version 5.1.2 ajusted trycorder to display statistics from the server in chat window
10 |
11 | 2017-02-15: - modified the tryserver to log in a sqlfile ajusted trysql to import old data in database
12 |
13 | 2017-02-13: - added some sql commands to trysql.c
14 |
15 | 2017-02-11: - added trysql manager (experimental)
16 |
17 | 2017-02-11: - adjusted tryclient and tryserver for database access. pre-adjustment
18 |
19 | 2017-02-09: - git ajustments
20 |
21 | 2017-02-07: - remodified readme to remove xda logo
22 |
23 | 2017-02-07: - added XDA in readme
24 |
25 | 2017-02-07: - Merge branch 'master' of https://github.com/mlsoft/Trycorder5
26 |
27 | 2017-02-07: - modified readme
28 |
29 | 2017-02-07: - Merge pull request #5 from mueller-ma/patch-1
30 | Added fdroid logo + improvements to readme
31 | 2017-02-07: - Update README.md
32 |
33 | 2017-02-06: - version 5.1.0 try to solve the bootloop on certain devices (mostly 4.x)
34 |
35 | 2017-02-06: - version 5.1.0 updated the changelog
36 |
37 | 2017-02-06: - version 5.1.0 added the apache license in every source files
38 |
39 | 2017-02-05: - updated changelog
40 |
41 | 2017-02-05: - version 5.0.9 Tried to correct the camera-1 interface for newer camera-2 phones. adjusted some few things too.
42 |
43 | 2017-02-02: - version 5.0.7 updated tryserver to mirror less data updated trycorderservice to identify itself better
44 |
45 | 2017-01-19: - Version 5.0.6 minor corrections with the service
46 |
47 | 2017-01-18: - version 5.0.5 corrected the sensor-off command increased tryserver efficiency collected 500 differents machines who tested the app
48 |
49 | 2017-01-17: - version 5.0.4 minor ajustments
50 |
51 | 2017-01-15: - Updated changelog
52 |
53 | 2017-01-15: - Version 5.0.3 Removed annoying sound. added some debugging scripts.
54 |
55 | 2017-01-15: - Version 5.0.3 Removed one annoying beep Prepared the tryserver to be more efficient
56 |
57 | 2017-01-12: - added to gitignore
58 |
59 | 2017-01-12: - Version 5.0.3 preparing for F-Droid repository
60 |
61 | 2017-01-08: - Version 5.0.2
62 | switched to Api 25 Nougat
63 |
64 | 2017-01-04: - remade the README.md with last texts
65 |
66 | 2017-01-04: - Merge branch 'master' of https://github.com/mlsoft/Trycorder5
67 |
68 | 2017-01-04: - renamed html doc to index.html
69 |
70 | 2017-01-04: - Set theme jekyll-theme-slate
71 |
72 | 2017-01-04: - reconverted the doc in xhtml format
73 |
74 | 2017-01-04: - modified readme
75 |
76 | 2017-01-04: - remake the index.html to be smaller
77 |
78 | 2017-01-04: - created the main index
79 |
80 | 2017-01-04: - moved files to prepare for web site
81 |
82 | 2017-01-04: - version 5.0.1 new screenshots modified manual ajusted service class
83 |
84 | 2016-12-21: - version 5.0.0 this is the first commit of the version 5 with remote ip-addr of others trycorders thru the tryserver
85 |
86 | 2016-12-19: - first commit
87 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 |
2 | Copyright 2016 Martin Laberge
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | #Trycorder
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Available on XDA-Developpers
10 |
11 |
12 | ##Introduction
13 |
14 | For the non-trekkies, a Trycorder is a portable measuring tool, communication tool, and remote-control tool for your Starship. It has been used a lot in many very popular Science-Fiction TV serie and Movies.
15 |
16 | This is an itch I had to scratch for a long time.
17 |
18 | I wanted a full fledged trycorder without announcements, free as a beer, and free public code.
19 |
20 | I did'nt found what i was searching for, so I made one.
21 |
22 | The wish to have a full trycorder was so strong, I had to Learn Java, Learn Android-Studio, Learn Android Programming, starting with a classic "Hello World!" program, Learn Activities, Fragments, Permissions, and the rest, and all of this Before I started a single line of my project.
23 |
24 | After 3 long and painful months, I finally started the project, and drived it to a version 1.0, where I decided to share my fun with others.
25 |
26 | With this Trycorder, You can do the following:
27 | - Look, feel, and sound like the federation trycorder.
28 | - Fits in your pocket, so you can beam out on demand.
29 | - Scan your environment, temperature, pressure, light, magnetic, gravity, orientation,...
30 | - Control the device by voice-command. (Press top left, and say "fire" or "beam me up" for example)
31 | - Take pictures and recordings from your findings on new planets.
32 | - Remote control your own starship, fire, communications, shields, transporter, viewer, ...
33 | (You have to provide the starship, and make sure it is on the wifi router that you use).
34 | - Consult logs of operations. View the pictures and recordings you got back from your away mission.
35 | - View Magnetic, Orientation, Gravity, Temperature sensors values drawn in the sensor area.
36 | - View Phaser, Torpedo, Transporter operation in your sensor screen.
37 | - View Shields, Communication Waveform, Tractor Beam sensor animation on your sensor screen.
38 | - The application is usable in space, provided your phone is space-proof, and you wear a space-suit.
39 | - The application can be adapted easily for different starships remote protocols.
40 | - For captains only: Crew Information and Evaluation module. (to be found under logs/crew) (Contacts access)
41 | - For the first time in versions following the 4.Pi (ie:4.3.141592) , The Trycorder is connecting with a central server who receive every orders from planetary trycorders. Those orders are logged, and executed on the server. (Some Text-To-Voice system here translate your action into an audible message on the bridge (the development computer area)) :-)
42 | The Main Intelligence of the central server can respond to you.
43 | - And many more to come ...
44 |
45 | ##Installation
46 | To install download the APK, and install it by clicking on it after the download (in your Download directory on your phone, using your phone file manager)
47 | or
48 | Download the sources on github and have fun with android studio. (github.org/mlsoft)
49 |
50 | ##Tested on
51 | - Samsung Galaxy Nexus (GT-I9250): CyanogenMod 6.0.1, CyanogenMod 5.1.1
52 | - Motorola Moto-G (XT-1032): CyanogenMod 6.0.1, CyanogenMod 4.4.4, CyanogenMod-7.1
53 | - Samsung Ace-II (GT-S7560M): CyanogenMod 4.4.4
54 | - LG P705g: Stock 4.0.3 (unrooted plain stock)
55 | - Tablet Datawind 7Ci, Android-4.1
56 |
57 | Please tell me of your success so i can add to the list of tested phones.
58 |
59 | Remember: Every button has a function, and every surface is used and clickable. some functions may not be obvious, like speech recognition that you activate by clicking in the top left corner in the curve. (just try "computer fire" , "computer beam me up", "computer shields" , or read the source code for a complete list of words who trigger actions.)
60 |
61 | The trycorder contains more than 100 operating buttons, 15 animations, dozens of sounds, around 8 sensors, speech recognition and voice interaction, and a captains-only crew evaluation and information module.
62 |
63 | Have FUN !!!
64 |
65 | For those who have a Force-Close on first opening, make sure your android device is setup this way.
66 | Have Google Text-to-Speech installed and running in default us-english (and more if you need)
67 | Have Google voice recognition active for us-english (and more if you need)
68 | Have Google map installed (optionnal but nice to locate yourself on the current planet)
69 | Have Location service Enabled (GPS)
70 | Have Wifi operationnal (for info about your internet connection in the info panel, and location service)
71 | Allow all six permissions that the application ask for.
72 |
73 | Developpers
74 | For those who write android code too, this trycorder is made of hundreds of differents examples
75 | in the differents forums i follow. This is a good example of over-populated buttons groups, with a lot of
76 | examples applications all mixed together, trying to look like to a useful tool.
77 |
78 | This fantastic tool, helped me learn everything (hum! almost) in android where I had an itch for.
79 |
80 | Now people on XDA have a fantastic toy, to play with, learn in, and impress friends.
81 |
--------------------------------------------------------------------------------
/Trycorder-5.2.3.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlsoft/Trycorder5/b3870f4edd166856408ed0e30a87dae1f17abb3d/Trycorder-5.2.3.apk
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 23
5 | buildToolsVersion '23.0.2'
6 |
7 | defaultConfig {
8 | applicationId "net.ddns.mlsoftlaberge.trycorder"
9 | minSdkVersion 16
10 | targetSdkVersion 23
11 | versionCode 523
12 | versionName "5.2.3"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | }
21 |
22 | dependencies {
23 | compile fileTree(include: ['*.jar'], dir: 'libs')
24 | testCompile 'junit:junit:4.12'
25 | compile 'com.android.support:support-v4:23.0.0'
26 | compile 'com.android.support:support-v13:23.0.0'
27 | compile 'com.android.support:cardview-v7:23.0.0'
28 | compile 'com.android.support:appcompat-v7:23.0.0'
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /home/mlsoft/Android/Sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/app/src/main/assets/finalnew.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlsoft/Trycorder5/b3870f4edd166856408ed0e30a87dae1f17abb3d/app/src/main/assets/finalnew.ttf
--------------------------------------------------------------------------------
/app/src/main/assets/finalold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlsoft/Trycorder5/b3870f4edd166856408ed0e30a87dae1f17abb3d/app/src/main/assets/finalold.ttf
--------------------------------------------------------------------------------
/app/src/main/assets/sonysketchef.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlsoft/Trycorder5/b3870f4edd166856408ed0e30a87dae1f17abb3d/app/src/main/assets/sonysketchef.ttf
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/TrycorderReceiver.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder;
2 |
3 | import android.content.BroadcastReceiver;
4 | import android.content.Context;
5 | import android.content.Intent;
6 | import android.content.SharedPreferences;
7 | import android.preference.PreferenceManager;
8 | import android.util.Log;
9 | import android.widget.Toast;
10 |
11 | /*
12 | * By Martin Laberge (mlsoftlaberge@gmail.com), From March 2016 to november 2016.
13 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
14 | * This is a conglomerate of examples codes found in differents public forums on internet.
15 | * I just used the public knowledge to fit a special way to use an android phone functions.
16 | */
17 |
18 | /* Copyright 2016 Martin Laberge
19 | *
20 | * Licensed under the Apache License, Version 2.0 (the "License");
21 | * you may not use this file except in compliance with the License.
22 | * You may obtain a copy of the License at
23 | *
24 | * http://www.apache.org/licenses/LICENSE-2.0
25 | *
26 | * Unless required by applicable law or agreed to in writing, software
27 | * distributed under the License is distributed on an "AS IS" BASIS,
28 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29 | * See the License for the specific language governing permissions and
30 | * limitations under the License.
31 | */
32 |
33 | public class TrycorderReceiver extends BroadcastReceiver {
34 |
35 | @Override
36 | public void onReceive(Context context, Intent intent) {
37 | Toast.makeText(context, "Trycorder Boot Detected.", Toast.LENGTH_LONG).show();
38 | Log.d("receiver", "Trycorder Boot Detected");
39 |
40 | SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
41 | boolean autoBoot = sharedPref.getBoolean("pref_key_auto_boot", true);
42 |
43 | if(autoBoot) {
44 | Log.d("receiver", "Start Trycorder Service");
45 | try {
46 | context.startService(new Intent(context, TrycorderService.class));
47 | } catch (Exception e) {
48 | Log.d("receiver", "Cant start trycorder service");
49 | }
50 | }
51 | }
52 |
53 | }
54 |
55 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/contacts/ContactAdminActivity.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.contacts;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.annotation.TargetApi;
26 | import android.app.NotificationManager;
27 | import android.app.PendingIntent;
28 | import android.content.Intent;
29 | import android.content.Context;
30 | import android.graphics.BitmapFactory;
31 | import android.net.Uri;
32 | import android.os.Build;
33 | import android.os.Bundle;
34 | import android.support.v4.app.FragmentActivity;
35 | import android.support.v4.app.FragmentTransaction;
36 | import android.support.v4.app.NavUtils;
37 | import android.support.v4.app.NotificationCompat;
38 | import android.view.MenuItem;
39 | import android.view.View;
40 | import android.widget.Toast;
41 |
42 | import net.ddns.mlsoftlaberge.trycorder.BuildConfig;
43 | import net.ddns.mlsoftlaberge.trycorder.R;
44 |
45 | /**
46 | * This class defines a simple FragmentActivity as the parent of {@link ContactAdminFragment}.
47 | */
48 | public class ContactAdminActivity extends FragmentActivity {
49 | // Defines a tag for identifying the single fragment that this activity holds
50 | private static final String TAG = "ContactAdminActivity";
51 |
52 | @TargetApi(Build.VERSION_CODES.HONEYCOMB)
53 | @Override
54 | protected void onCreate(Bundle savedInstanceState) {
55 | super.onCreate(savedInstanceState);
56 | // This activity expects to receive an intent that contains the uri of a contact
57 | if (getIntent() != null) {
58 | // Fetch the data Uri from the intent provided to this activity
59 | final Uri uri = getIntent().getData();
60 | // Checks to see if fragment has already been added, otherwise adds a new
61 | // ContactAdminFragment with the Uri provided in the intent
62 | if (getSupportFragmentManager().findFragmentByTag(TAG) == null) {
63 | final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
64 | // Adds a newly created ContactAdminFragment that is instantiated with the
65 | // data Uri
66 | ft.add(android.R.id.content, ContactAdminFragment.newInstance(uri), TAG);
67 | ft.commit();
68 | }
69 | } else {
70 | // No intent provided, nothing to do so finish()
71 | finish();
72 | }
73 | }
74 |
75 | // permits this activity to hide status and action bars, and proceed full screen
76 | @Override
77 | public void onWindowFocusChanged(boolean hasFocus) {
78 | super.onWindowFocusChanged(hasFocus);
79 | if (hasFocus) {
80 | getWindow().getDecorView().setSystemUiVisibility(
81 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
82 | | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
83 | | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
84 | | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
85 | | View.SYSTEM_UI_FLAG_FULLSCREEN
86 | | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
87 | }
88 | }
89 |
90 | }
91 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/contacts/ContactEditMemoActivity.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.contacts;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.annotation.TargetApi;
26 | import android.net.Uri;
27 | import android.os.Build;
28 | import android.os.Bundle;
29 | import android.support.v4.app.Fragment;
30 | import android.support.v4.app.FragmentActivity;
31 | import android.support.v4.app.FragmentTransaction;
32 | import android.support.v4.app.NavUtils;
33 |
34 | import android.view.MenuItem;
35 | import android.view.View;
36 |
37 | import net.ddns.mlsoftlaberge.trycorder.BuildConfig;
38 | import net.ddns.mlsoftlaberge.trycorder.R;
39 |
40 | /**
41 | * Created by mlsoft on 28/02/16.
42 | */
43 | public class ContactEditMemoActivity extends FragmentActivity {
44 | // Defines a tag for identifying the single fragment that this activity holds
45 | private static final String TAG = "ContactEditMemoActivity";
46 |
47 | @TargetApi(Build.VERSION_CODES.HONEYCOMB)
48 | @Override
49 | protected void onCreate(Bundle savedInstanceState) {
50 | super.onCreate(savedInstanceState);
51 | // This activity expects to receive an intent that contains the uri of a contact
52 | if (getIntent() != null) {
53 | // Fetch the data Uri from the intent provided to this activity
54 | final Uri uri = getIntent().getData();
55 | final String name = getIntent().getStringExtra("NAME");
56 | final String memo = getIntent().getStringExtra("MEMO");
57 | // Checks to see if fragment has already been added, otherwise adds a new
58 | // ContactEditMemoFragment with the Uri provided in the intent
59 | if (getSupportFragmentManager().findFragmentByTag(TAG) == null) {
60 | final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
61 | ft.add(android.R.id.content, ContactEditMemoFragment.newInstance(uri, name, memo), TAG);
62 | ft.commit();
63 | }
64 | } else {
65 | // No intent provided, nothing to do so finish()
66 | finish();
67 | }
68 | }
69 |
70 | // permits this activity to hide status and action bars, and proceed full screen
71 | //@Override
72 | //public void onWindowFocusChanged(boolean hasFocus) {
73 | // super.onWindowFocusChanged(hasFocus);
74 | // if (hasFocus) {
75 | // getWindow().getDecorView().setSystemUiVisibility(
76 | // View.SYSTEM_UI_FLAG_LAYOUT_STABLE
77 | // | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
78 | // | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
79 | // | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
80 | // | View.SYSTEM_UI_FLAG_FULLSCREEN
81 | // | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
82 | // }
83 | //}
84 |
85 | }
86 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/contacts/ContactsBudgetActivity.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.contacts;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.annotation.TargetApi;
26 | import android.os.Build;
27 | import android.os.Bundle;
28 | import android.support.v4.app.Fragment;
29 | import android.support.v4.app.FragmentActivity;
30 | import android.support.v4.app.FragmentTransaction;
31 | import android.support.v4.app.NavUtils;
32 |
33 | import android.view.MenuItem;
34 | import android.view.View;
35 |
36 | /**
37 | * Created by mlsoft on 28/02/16.
38 | */
39 | public class ContactsBudgetActivity extends FragmentActivity {
40 |
41 | @TargetApi(Build.VERSION_CODES.HONEYCOMB)
42 | @Override
43 | protected void onCreate(Bundle savedInstanceState) {
44 | super.onCreate(savedInstanceState);
45 | final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
46 | ft.add(android.R.id.content, new ContactsBudgetFragment());
47 | ft.commit();
48 | }
49 |
50 | // permits this activity to hide status and action bars, and proceed full screen
51 | @Override
52 | public void onWindowFocusChanged(boolean hasFocus) {
53 | super.onWindowFocusChanged(hasFocus);
54 | if (hasFocus) {
55 | getWindow().getDecorView().setSystemUiVisibility(
56 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
57 | | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
58 | | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
59 | | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
60 | | View.SYSTEM_UI_FLAG_FULLSCREEN
61 | | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
62 | }
63 | }
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/contacts/ContactsListActivity.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.contacts;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.app.SearchManager;
26 | import android.content.Intent;
27 | import android.net.Uri;
28 | import android.os.Bundle;
29 | import android.support.v4.app.FragmentActivity;
30 | import android.view.View;
31 |
32 | import net.ddns.mlsoftlaberge.trycorder.BuildConfig;
33 | import net.ddns.mlsoftlaberge.trycorder.R;
34 |
35 | /**
36 | * FragmentActivity to hold the main {@link ContactsListFragment}. On larger screen devices which
37 | * can fit two panes also load ContactAdminFragment
38 | */
39 | public class ContactsListActivity extends FragmentActivity implements
40 | ContactsListFragment.OnContactsInteractionListener {
41 |
42 | // Defines a tag for identifying log entries
43 | private static final String TAG = "ContactsListActivity";
44 |
45 | // True if this activity instance is a search result view (used on pre-HC devices that load
46 | // search results in a separate instance of the activity rather than loading results in-line
47 | // as the query is typed.
48 | private boolean isSearchResultView = false;
49 |
50 | @Override
51 | protected void onCreate(Bundle savedInstanceState) {
52 | if (BuildConfig.DEBUG) {
53 | Utils.enableStrictMode();
54 | }
55 | super.onCreate(savedInstanceState);
56 | // Set main content view. On smaller screen devices this is a single pane view with one
57 | // fragment. One larger screen devices this is a two pane view with two fragments.
58 | setContentView(R.layout.contact_list_main);
59 | }
60 |
61 | // permits this activity to hide status and action bars, and proceed full screen
62 | @Override
63 | public void onWindowFocusChanged(boolean hasFocus) {
64 | super.onWindowFocusChanged(hasFocus);
65 | if (hasFocus) {
66 | getWindow().getDecorView().setSystemUiVisibility(
67 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
68 | | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
69 | | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
70 | | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
71 | | View.SYSTEM_UI_FLAG_FULLSCREEN
72 | | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
73 | }
74 | }
75 |
76 | /**
77 | * This interface callback lets the main contacts list fragment notify
78 | * this activity that a contact has been selected.
79 | *
80 | * @param contactUri The contact Uri to the selected contact.
81 | */
82 | @Override
83 | public void onContactSelected(Uri contactUri) {
84 | // start a new ContactAdminActivity with
85 | // the contact Uri
86 | // commented out for future use
87 | Intent intent = new Intent(this, ContactAdminActivity.class);
88 | intent.setData(contactUri);
89 | startActivity(intent);
90 | }
91 |
92 | /**
93 | * This interface callback lets the main contacts list fragment notify
94 | * this activity that a contact is no longer selected.
95 | */
96 | @Override
97 | public void onSelectionCleared() {
98 |
99 | }
100 |
101 | @Override
102 | public boolean onSearchRequested() {
103 | // Don't allow another search if this activity instance is already showing
104 | // search results. Only used pre-HC.
105 | return !isSearchResultView && super.onSearchRequested();
106 | }
107 |
108 | }
109 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/contacts/Utils.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.contacts;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.annotation.TargetApi;
26 | import android.os.Build;
27 | import android.os.StrictMode;
28 |
29 | /**
30 | * This class contains static utility methods.
31 | */
32 | public class Utils {
33 |
34 | // Prevents instantiation.
35 | private Utils() {}
36 |
37 | /**
38 | * Enables strict mode. This should only be called when debugging the application and is useful
39 | * for finding some potential bugs or best practice violations.
40 | */
41 | @TargetApi(11)
42 | public static void enableStrictMode() {
43 | // Strict mode is only available on gingerbread or later
44 | if (Utils.hasGingerbread()) {
45 |
46 | // Enable all thread strict mode policies
47 | StrictMode.ThreadPolicy.Builder threadPolicyBuilder =
48 | new StrictMode.ThreadPolicy.Builder()
49 | .detectAll()
50 | .penaltyLog();
51 |
52 | // Enable all VM strict mode policies
53 | StrictMode.VmPolicy.Builder vmPolicyBuilder =
54 | new StrictMode.VmPolicy.Builder()
55 | .detectAll()
56 | .penaltyLog();
57 |
58 | // Honeycomb introduced some additional strict mode features
59 | if (Utils.hasHoneycomb()) {
60 | // Flash screen when thread policy is violated
61 | threadPolicyBuilder.penaltyFlashScreen();
62 | // For each activity class, set an instance limit of 1. Any more instances and
63 | // there could be a memory leak.
64 | vmPolicyBuilder
65 | .setClassInstanceLimit(ContactsListActivity.class, 1);
66 | //.setClassInstanceLimit(ContactAdminActivity.class, 1);
67 | }
68 |
69 | // Use builders to enable strict mode policies
70 | StrictMode.setThreadPolicy(threadPolicyBuilder.build());
71 | StrictMode.setVmPolicy(vmPolicyBuilder.build());
72 | }
73 | }
74 |
75 | /**
76 | * Uses static final constants to detect if the device's platform version is Gingerbread or
77 | * later.
78 | */
79 | public static boolean hasGingerbread() {
80 | return Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD;
81 | }
82 |
83 | /**
84 | * Uses static final constants to detect if the device's platform version is Honeycomb or
85 | * later.
86 | */
87 | public static boolean hasHoneycomb() {
88 | return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
89 | }
90 |
91 | /**
92 | * Uses static final constants to detect if the device's platform version is Honeycomb MR1 or
93 | * later.
94 | */
95 | public static boolean hasHoneycombMR1() {
96 | return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1;
97 | }
98 |
99 | /**
100 | * Uses static final constants to detect if the device's platform version is ICS or
101 | * later.
102 | */
103 | public static boolean hasICS() {
104 | return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/products/ProductDatabaseHelper.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.products;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.content.Context;
26 | import android.database.sqlite.SQLiteDatabase;
27 | import android.database.sqlite.SQLiteOpenHelper;
28 |
29 | public class ProductDatabaseHelper extends SQLiteOpenHelper {
30 |
31 | private static final String DATABASE_NAME = "productdata.db";
32 | private static final int DATABASE_VERSION = 6;
33 |
34 | public ProductDatabaseHelper(Context context) {
35 | super(context, DATABASE_NAME, null, DATABASE_VERSION);
36 | }
37 |
38 | // Method is called during creation of the database
39 | @Override
40 | public void onCreate(SQLiteDatabase database) {
41 | ProductTable.onCreate(database);
42 | }
43 |
44 | // Method is called during an upgrade of the database,
45 | // e.g. if you increase the database version
46 | @Override
47 | public void onUpgrade(SQLiteDatabase database, int oldVersion,
48 | int newVersion) {
49 | ProductTable.onUpgrade(database, oldVersion, newVersion);
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/products/ProductTable.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.products;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.database.sqlite.SQLiteDatabase;
26 | import android.util.Log;
27 |
28 | public class ProductTable {
29 |
30 | // Database table
31 | public static final String TABLE_PRODUCT = "product";
32 | public static final String COLUMN_ID = "_id";
33 | public static final String COLUMN_QUANTITY = "quantity";
34 | public static final String COLUMN_UPC = "upc";
35 | public static final String COLUMN_NAME = "name";
36 | public static final String COLUMN_DESCRIPTION = "description";
37 |
38 | // Database creation SQL statement
39 | private static final String DATABASE_CREATE = "create table "
40 | + TABLE_PRODUCT
41 | + "(" + COLUMN_ID + " integer primary key autoincrement, "
42 | + COLUMN_QUANTITY + " text not null, "
43 | + COLUMN_UPC + " text not null, "
44 | + COLUMN_NAME + " text not null,"
45 | + COLUMN_DESCRIPTION + " text not null"
46 | + ");";
47 |
48 | public static void onCreate(SQLiteDatabase database) {
49 | database.execSQL(DATABASE_CREATE);
50 | }
51 |
52 | public static void onUpgrade(SQLiteDatabase database, int oldVersion,
53 | int newVersion) {
54 | Log.w(ProductTable.class.getName(), "Upgrading database from version "
55 | + oldVersion + " to " + newVersion
56 | + ", which will destroy all old data");
57 | database.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCT);
58 | onCreate(database);
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/settings/SettingsActivity.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.settings;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.app.Activity;
26 | import android.os.Bundle;
27 | import android.preference.PreferenceManager;
28 |
29 | import net.ddns.mlsoftlaberge.trycorder.R;
30 |
31 |
32 | /**
33 | * Created by mlsoft on 15/04/16.
34 | */
35 | public class SettingsActivity extends Activity {
36 | @Override
37 | protected void onCreate(Bundle savedInstanceState) {
38 | super.onCreate(savedInstanceState);
39 | PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
40 |
41 | // Display the fragment as the main content.
42 | getFragmentManager().beginTransaction()
43 | .replace(android.R.id.content, new SettingsFragment())
44 | .commit();
45 | }
46 | }
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/settings/SettingsFragment.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.settings;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.os.Bundle;
26 | import android.preference.PreferenceFragment;
27 |
28 | import net.ddns.mlsoftlaberge.trycorder.R;
29 |
30 |
31 | /**
32 | * Created by mlsoft on 15/04/16.
33 | */
34 | public class SettingsFragment extends PreferenceFragment {
35 |
36 | @Override
37 | public void onCreate(Bundle savedInstanceState) {
38 | super.onCreate(savedInstanceState);
39 |
40 | // Load the preferences from an XML resource
41 | addPreferencesFromResource(R.xml.preferences);
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/trycorder/AutoFitTextureView.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.trycorder;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.content.Context;
26 | import android.util.AttributeSet;
27 | import android.view.TextureView;
28 |
29 | /**
30 | * A TextureView that can be adjusted to a specified aspect ratio.
31 | */
32 | public class AutoFitTextureView extends TextureView {
33 |
34 | private int mRatioWidth = 0;
35 | private int mRatioHeight = 0;
36 |
37 | public AutoFitTextureView(Context context) {
38 | this(context, null);
39 | }
40 |
41 | public AutoFitTextureView(Context context, AttributeSet attrs) {
42 | this(context, attrs, 0);
43 | }
44 |
45 | public AutoFitTextureView(Context context, AttributeSet attrs, int defStyle) {
46 | super(context, attrs, defStyle);
47 | }
48 |
49 | /**
50 | * Sets the aspect ratio for this view. The size of the view will be measured based on the ratio
51 | * calculated from the parameters. Note that the actual sizes of parameters don't matter, that
52 | * is, calling setAspectRatio(2, 3) and setAspectRatio(4, 6) make the same result.
53 | *
54 | * @param width Relative horizontal size
55 | * @param height Relative vertical size
56 | */
57 | public void setAspectRatio(int width, int height) {
58 | if (width < 0 || height < 0) {
59 | throw new IllegalArgumentException("Size cannot be negative.");
60 | }
61 | mRatioWidth = width;
62 | mRatioHeight = height;
63 | requestLayout();
64 | }
65 |
66 | @Override
67 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
68 | super.onMeasure(widthMeasureSpec, heightMeasureSpec);
69 | int width = MeasureSpec.getSize(widthMeasureSpec);
70 | int height = MeasureSpec.getSize(heightMeasureSpec);
71 | if (0 == mRatioWidth || 0 == mRatioHeight) {
72 | setMeasuredDimension(width, height);
73 | } else {
74 | if (width < height * mRatioWidth / mRatioHeight) {
75 | setMeasuredDimension(width, width * mRatioHeight / mRatioWidth);
76 | } else {
77 | setMeasuredDimension(height * mRatioWidth / mRatioHeight, height);
78 | }
79 | }
80 | }
81 |
82 | }
83 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/trycorder/GIFView.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.trycorder;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.content.Context;
26 | import android.graphics.Canvas;
27 | import android.graphics.Color;
28 | import android.graphics.Movie;
29 | import android.util.AttributeSet;
30 | import android.view.View;
31 |
32 | import java.io.InputStream;
33 | import java.util.Timer;
34 | import java.util.TimerTask;
35 |
36 | /**
37 | * Created by mlsoft on 16-06-25.
38 | */
39 | // =====================================================================================
40 | // animated gif viewer class
41 | public class GIFView extends View {
42 | public Movie mMovie=null;
43 | public long movieStart=0;
44 | private int gifId;
45 | private int position=0;
46 |
47 | public GIFView(Context context, int res) {
48 | super(context);
49 | setGIFResource(res);
50 | }
51 |
52 | public GIFView(Context context, AttributeSet attrs, int res) {
53 | super(context, attrs);
54 | setGIFResource(res);
55 | }
56 |
57 | public GIFView(Context context, AttributeSet attrs, int defStyle, int res) {
58 | super(context, attrs, defStyle);
59 | setGIFResource(res);
60 | }
61 |
62 | public void setGIFResource(int resId) {
63 | this.gifId = resId;
64 | initializeView();
65 | }
66 |
67 | public int getGIFResource() {
68 | return this.gifId;
69 | }
70 |
71 | private void initializeView() {
72 | // disable hardware acceleration
73 | setLayerType(View.LAYER_TYPE_SOFTWARE, null);
74 | // decode the movie
75 | InputStream is = getContext().getResources().openRawResource(gifId);
76 | mMovie = Movie.decodeStream(is);
77 | }
78 |
79 | // ======= timer section =======
80 | private Timer timer=null;
81 | private MyTimer myTimer;
82 |
83 | public void stop() {
84 | if(timer!=null) {
85 | timer.cancel();
86 | timer=null;
87 | }
88 | position=0;
89 | invalidate();
90 | }
91 |
92 | public void start() {
93 | // start the timer to eat this stuff and display it
94 | position=1;
95 | timer = new Timer("warp");
96 | myTimer = new MyTimer();
97 | timer.schedule(myTimer, 100L, 100L);
98 | }
99 |
100 | private class MyTimer extends TimerTask {
101 | public void run() {
102 | position++;
103 | postInvalidate();
104 | if(position>=100) {
105 | position=1;
106 | postInvalidate();
107 | }
108 | }
109 | }
110 |
111 | @Override
112 | protected void onDraw(Canvas canvas) {
113 | super.onDraw(canvas);
114 | canvas.drawColor(Color.TRANSPARENT);
115 | // compute time elapsed
116 | long now = android.os.SystemClock.uptimeMillis();
117 | if (movieStart == 0) {
118 | movieStart = now;
119 | }
120 | if (mMovie != null) {
121 | int relTime = (int) ((now - movieStart) % mMovie.duration());
122 | mMovie.setTime(relTime);
123 | //mMovie.draw(canvas, 0,0);
124 | mMovie.draw(canvas, (getWidth() - mMovie.width())/2, (getHeight() - mMovie.height())/2);
125 | this.invalidate();
126 | }
127 | }
128 |
129 | }
130 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/trycorder/VerticalSeekBar.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.trycorder;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.content.Context;
26 | import android.graphics.Canvas;
27 | import android.util.AttributeSet;
28 | import android.view.MotionEvent;
29 | import android.widget.SeekBar;
30 |
31 |
32 | public class VerticalSeekBar extends SeekBar {
33 |
34 | private OnSeekBarChangeListener myListener;
35 | public VerticalSeekBar(Context context) {
36 | super(context);
37 | }
38 |
39 | public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) {
40 | super(context, attrs, defStyle);
41 | }
42 |
43 | public VerticalSeekBar(Context context, AttributeSet attrs) {
44 | super(context, attrs);
45 | }
46 |
47 | protected void onSizeChanged(int w, int h, int oldw, int oldh) {
48 | super.onSizeChanged(h, w, oldh, oldw);
49 | }
50 |
51 | @Override
52 | protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
53 | super.onMeasure(heightMeasureSpec, widthMeasureSpec);
54 | setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
55 | }
56 |
57 | @Override
58 | public void setOnSeekBarChangeListener(OnSeekBarChangeListener mListener){
59 | this.myListener = mListener;
60 | }
61 |
62 | protected void onDraw(Canvas c) {
63 | c.rotate(-90);
64 | c.translate(-getHeight(), 0);
65 |
66 | super.onDraw(c);
67 | }
68 |
69 | @Override
70 | public boolean onTouchEvent(MotionEvent event) {
71 | if (!isEnabled()) {
72 | return false;
73 | }
74 |
75 | int progress=getMax() - (int) (getMax() * event.getY() / getHeight());
76 | if(progress<0) progress=0;
77 | if(progress>getMax()) progress=getMax();
78 |
79 | switch (event.getAction()) {
80 | case MotionEvent.ACTION_DOWN:
81 | setProgress(progress);
82 | if(myListener!=null) myListener.onStartTrackingTouch(this);
83 | break;
84 | case MotionEvent.ACTION_MOVE:
85 | setProgress(progress);
86 | onSizeChanged(getWidth(), getHeight(), 0, 0);
87 | if(myListener!=null) myListener.onProgressChanged(this, progress, true);
88 | break;
89 | case MotionEvent.ACTION_UP:
90 | setProgress(progress);
91 | if(myListener!=null) myListener.onStopTrackingTouch(this);
92 | break;
93 |
94 | case MotionEvent.ACTION_CANCEL:
95 | break;
96 | }
97 | return true;
98 | }
99 |
100 | public synchronized void setProgressAndThumb(int progress) {
101 | setProgress(progress);
102 | onSizeChanged(getWidth(), getHeight() , 0, 0);
103 | if(myListener!=null) myListener.onProgressChanged(this, progress, true);
104 | }
105 |
106 | }
107 |
108 |
--------------------------------------------------------------------------------
/app/src/main/java/net/ddns/mlsoftlaberge/trycorder/utils/FileUtils.java:
--------------------------------------------------------------------------------
1 | package net.ddns.mlsoftlaberge.trycorder.utils;
2 |
3 | /*
4 | * By Martin Laberge (mlsoft), From March 2016 to november 2016.
5 | * Licence: Can be shared with anyone, for non profit, provided my name stays in the comments.
6 | * This is a conglomerate of examples codes found in differents public forums on internet.
7 | * I just used the public knowledge to fit a special way to use an android phone functions.
8 | */
9 |
10 | /* Copyright 2016 Martin Laberge
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the "License");
13 | * you may not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * http://www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an "AS IS" BASIS,
20 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | import android.net.Uri;
26 | import android.os.Environment;
27 | import android.util.Log;
28 |
29 | import java.io.File;
30 | import java.text.SimpleDateFormat;
31 | import java.util.Date;
32 |
33 | /**
34 | * Created by mlsoft on 16/11/16.
35 | */
36 |
37 | public class FileUtils {
38 |
39 | // ===================================================================================
40 | // common functions to obtain a media uri
41 |
42 | public static final int MEDIA_TYPE_IMAGE = 1;
43 | public static final int MEDIA_TYPE_VIDEO = 2;
44 |
45 | /**
46 | * Create a file Uri for saving an image or video
47 | */
48 | public static Uri getOutputMediaFileUri(int type) {
49 | return Uri.fromFile(getOutputMediaFile(type));
50 | }
51 |
52 | /**
53 | * Create a File for saving an image or video
54 | */
55 | public static File getOutputMediaFile(int type) {
56 | // To be safe, you should check that the SDCard is mounted
57 | // using Environment.getExternalStorageState() before doing this.
58 |
59 | File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
60 | Environment.DIRECTORY_DCIM), "Camera");
61 | // This location works best if you want the created images to be shared
62 | // between applications and persist after your app has been uninstalled.
63 |
64 | // Create the storage directory if it does not exist
65 | if (!mediaStorageDir.exists()) {
66 | if (!mediaStorageDir.mkdirs()) {
67 | Log.d("Trycorder", "failed to create directory");
68 | return null;
69 | }
70 | }
71 |
72 | // Create a media file name
73 | String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
74 | File mediaFile;
75 | if (type == MEDIA_TYPE_IMAGE) {
76 | mediaFile = new File(mediaStorageDir.getPath() + File.separator +
77 | "IMG_" + timeStamp + ".jpg");
78 | } else if (type == MEDIA_TYPE_VIDEO) {
79 | mediaFile = new File(mediaStorageDir.getPath() + File.separator +
80 | "VID_" + timeStamp + ".mp4");
81 | } else {
82 | return null;
83 | }
84 |
85 | return mediaFile;
86 | }
87 |
88 |
89 |
90 | }
91 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/blink.xml:
--------------------------------------------------------------------------------
1 |
2 |