├── .editorconfig
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ └── feature_request.yml
├── dependabot.yml
└── workflows
│ ├── foss-release.yml
│ ├── gplay-release.yml
│ ├── image-minimizer.yml
│ ├── no-response.yml
│ ├── pr-labeler.yml
│ ├── pr.yml
│ ├── release-commenter.yml
│ └── testing-build.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Gemfile
├── Gemfile.lock
├── LICENSE
├── README.md
├── app
├── .gitignore
├── build.gradle.kts
├── detekt-baseline.xml
├── lint-baseline.xml
├── proguard-rules.pro
└── src
│ ├── debug
│ └── res
│ │ └── values
│ │ └── strings.xml
│ ├── foss
│ └── res
│ │ └── values
│ │ └── bools.xml
│ ├── gplay
│ └── res
│ │ └── values
│ │ └── bools.xml
│ └── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-playstore.png
│ ├── kotlin
│ └── org
│ │ └── fossify
│ │ └── camera
│ │ ├── activities
│ │ ├── MainActivity.kt
│ │ ├── SettingsActivity.kt
│ │ ├── SimpleActivity.kt
│ │ └── SplashActivity.kt
│ │ ├── extensions
│ │ ├── CameraSelector.kt
│ │ ├── Context.kt
│ │ ├── Int.kt
│ │ ├── MaterialButton.kt
│ │ ├── Quality.kt
│ │ └── View.kt
│ │ ├── helpers
│ │ ├── BitmapUtils.kt
│ │ ├── CameraErrorHandler.kt
│ │ ├── Config.kt
│ │ ├── Constants.kt
│ │ ├── GestureDetectorListener.java
│ │ ├── ImageQualityManager.kt
│ │ ├── ImageSaver.kt
│ │ ├── ImageUtil.kt
│ │ ├── MediaActionSound.kt
│ │ ├── MediaOutputHelper.kt
│ │ ├── MediaSizeStore.kt
│ │ ├── MediaSoundHelper.kt
│ │ ├── PhotoProcessor.kt
│ │ ├── PinchToZoomOnScaleGestureListener.kt
│ │ ├── SimpleLocationManager.kt
│ │ ├── TabSelectedListener.kt
│ │ ├── VideoQualityManager.kt
│ │ └── ZoomCalculator.kt
│ │ ├── implementations
│ │ ├── CameraXInitializer.kt
│ │ ├── CameraXPreview.kt
│ │ └── CameraXPreviewListener.kt
│ │ ├── interfaces
│ │ └── MyPreview.kt
│ │ ├── models
│ │ ├── CameraSelectorImageQualities.kt
│ │ ├── CameraSelectorVideoQualities.kt
│ │ ├── CaptureMode.kt
│ │ ├── MediaOutput.kt
│ │ ├── MySize.kt
│ │ ├── ResolutionOption.kt
│ │ ├── TimerMode.kt
│ │ └── VideoQuality.kt
│ │ ├── receivers
│ │ └── HardwareShutterReceiver.kt
│ │ └── views
│ │ ├── FocusCircleView.kt
│ │ └── ShadowDrawable.kt
│ └── res
│ ├── color
│ ├── camera_option_color.xml
│ └── tab_color.xml
│ ├── drawable
│ ├── ic_camera_front_vector.xml
│ ├── ic_camera_rear_vector.xml
│ ├── ic_flash_auto_vector.xml
│ ├── ic_flash_off_vector.xml
│ ├── ic_flash_on_vector.xml
│ ├── ic_flashlight_vector.xml
│ ├── ic_launcher_foreground.xml
│ ├── ic_launcher_monochrome.xml
│ ├── ic_photo_16x9_vector.xml
│ ├── ic_photo_1x1_vector.xml
│ ├── ic_photo_4x3_vector.xml
│ ├── ic_photo_full_vector.xml
│ ├── ic_settings_vector.xml
│ ├── ic_shutter_animated.xml
│ ├── ic_shutter_timer_cancel.xml
│ ├── ic_shutter_vector.xml
│ ├── ic_timer_10_vector.xml
│ ├── ic_timer_3_vector.xml
│ ├── ic_timer_5_vector.xml
│ ├── ic_timer_off_vector.xml
│ ├── ic_video_fhd_vector.xml
│ ├── ic_video_hd_vector.xml
│ ├── ic_video_rec_animated.xml
│ ├── ic_video_rec_vector.xml
│ ├── ic_video_sd_vector.xml
│ ├── ic_video_uhd_vector.xml
│ ├── shutter_pressed_to_unpressed.xml
│ ├── shutter_unpressed_to_pressed.xml
│ ├── tab_indicator.xml
│ ├── video_rec_idle_to_record.xml
│ ├── video_rec_pressed_to_unpressed.xml
│ ├── video_rec_record_to_idle.xml
│ └── video_rec_unpressed_to_pressed.xml
│ ├── layout
│ ├── activity_main.xml
│ ├── activity_settings.xml
│ ├── layout_button.xml
│ ├── layout_flash.xml
│ ├── layout_timer.xml
│ ├── layout_top.xml
│ └── timer_text.xml
│ ├── menu
│ └── menu.xml
│ ├── mipmap-anydpi-v26
│ ├── ic_launcher.xml
│ ├── ic_launcher_amber.xml
│ ├── ic_launcher_blue.xml
│ ├── ic_launcher_blue_grey.xml
│ ├── ic_launcher_brown.xml
│ ├── ic_launcher_cyan.xml
│ ├── ic_launcher_deep_orange.xml
│ ├── ic_launcher_deep_purple.xml
│ ├── ic_launcher_grey_black.xml
│ ├── ic_launcher_indigo.xml
│ ├── ic_launcher_light_blue.xml
│ ├── ic_launcher_light_green.xml
│ ├── ic_launcher_lime.xml
│ ├── ic_launcher_orange.xml
│ ├── ic_launcher_pink.xml
│ ├── ic_launcher_purple.xml
│ ├── ic_launcher_red.xml
│ ├── ic_launcher_teal.xml
│ └── ic_launcher_yellow.xml
│ ├── raw
│ ├── beep.mp3
│ └── beep_2_secs.mp3
│ ├── values-ar
│ └── strings.xml
│ ├── values-az
│ └── strings.xml
│ ├── values-b+es+419
│ └── strings.xml
│ ├── values-be
│ └── strings.xml
│ ├── values-bg
│ └── strings.xml
│ ├── values-bn-rBD
│ └── strings.xml
│ ├── values-bn
│ └── strings.xml
│ ├── values-br
│ └── strings.xml
│ ├── values-bs
│ └── strings.xml
│ ├── values-ca
│ └── strings.xml
│ ├── values-ckb
│ └── strings.xml
│ ├── values-cr
│ └── strings.xml
│ ├── values-cs
│ └── strings.xml
│ ├── values-cy
│ └── strings.xml
│ ├── values-da
│ └── strings.xml
│ ├── values-de
│ └── strings.xml
│ ├── values-el
│ └── strings.xml
│ ├── values-en-rGB
│ └── strings.xml
│ ├── values-en-rIN
│ └── strings.xml
│ ├── values-eo
│ └── strings.xml
│ ├── values-es-rUS
│ └── strings.xml
│ ├── values-es
│ └── strings.xml
│ ├── values-et
│ └── strings.xml
│ ├── values-eu
│ └── strings.xml
│ ├── values-fa
│ └── strings.xml
│ ├── values-fi
│ └── strings.xml
│ ├── values-fil
│ └── strings.xml
│ ├── values-fr
│ └── strings.xml
│ ├── values-ga
│ └── strings.xml
│ ├── values-gl
│ └── strings.xml
│ ├── values-hi
│ └── strings.xml
│ ├── values-hr
│ └── strings.xml
│ ├── values-hu
│ └── strings.xml
│ ├── values-ia
│ └── strings.xml
│ ├── values-in
│ └── strings.xml
│ ├── values-is
│ └── strings.xml
│ ├── values-it
│ └── strings.xml
│ ├── values-iw
│ └── strings.xml
│ ├── values-ja
│ └── strings.xml
│ ├── values-kn
│ └── strings.xml
│ ├── values-ko
│ └── strings.xml
│ ├── values-kr
│ └── strings.xml
│ ├── values-lt
│ └── strings.xml
│ ├── values-ltg
│ └── strings.xml
│ ├── values-lv
│ └── strings.xml
│ ├── values-mk
│ └── strings.xml
│ ├── values-ml
│ └── strings.xml
│ ├── values-ms
│ └── strings.xml
│ ├── values-my
│ └── strings.xml
│ ├── values-nb-rNO
│ └── strings.xml
│ ├── values-ne
│ └── strings.xml
│ ├── values-nl
│ └── strings.xml
│ ├── values-nn
│ └── strings.xml
│ ├── values-or
│ └── strings.xml
│ ├── values-pa-rPK
│ └── strings.xml
│ ├── values-pa
│ └── strings.xml
│ ├── values-pl
│ └── strings.xml
│ ├── values-pt-rBR
│ └── strings.xml
│ ├── values-pt-rPT
│ └── strings.xml
│ ├── values-pt
│ └── strings.xml
│ ├── values-ro
│ └── strings.xml
│ ├── values-ru
│ └── strings.xml
│ ├── values-sat
│ └── strings.xml
│ ├── values-si
│ └── strings.xml
│ ├── values-sk
│ └── strings.xml
│ ├── values-sl
│ └── strings.xml
│ ├── values-sr
│ └── strings.xml
│ ├── values-sv
│ └── strings.xml
│ ├── values-sw600dp
│ └── dimens.xml
│ ├── values-ta
│ └── strings.xml
│ ├── values-te
│ └── strings.xml
│ ├── values-th
│ └── strings.xml
│ ├── values-tr
│ └── strings.xml
│ ├── values-uk
│ └── strings.xml
│ ├── values-vi
│ └── strings.xml
│ ├── values-zgh
│ └── strings.xml
│ ├── values-zh-rCN
│ └── strings.xml
│ ├── values-zh-rHK
│ └── strings.xml
│ ├── values-zh-rTW
│ └── strings.xml
│ ├── values
│ ├── attrs.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── donottranslate.xml
│ ├── ids.xml
│ ├── integers.xml
│ ├── strings.xml
│ └── styles.xml
│ └── xml
│ └── provider_paths.xml
├── build.gradle.kts
├── fastlane
├── Appfile
├── Fastfile
├── README.md
└── metadata
│ └── android
│ ├── ca
│ ├── full_description.txt
│ └── short_description.txt
│ ├── cs-CZ
│ ├── full_description.txt
│ └── short_description.txt
│ ├── de-DE
│ ├── full_description.txt
│ └── short_description.txt
│ ├── en-US
│ ├── changelogs
│ │ ├── 1.txt
│ │ ├── 2.txt
│ │ └── 3.txt
│ ├── full_description.txt
│ ├── images
│ │ ├── featureGraphic.png
│ │ ├── icon.png
│ │ ├── phoneScreenshots
│ │ │ ├── 1_en-US.png
│ │ │ ├── 2_en-US.png
│ │ │ ├── 3_en-US.png
│ │ │ ├── 4_en-US.png
│ │ │ ├── 5_en-US.png
│ │ │ └── 6_en-US.png
│ │ └── tenInchScreenshots
│ │ │ ├── 1_en-US.png
│ │ │ ├── 2_en-US.png
│ │ │ ├── 3_en-US.png
│ │ │ ├── 4_en-US.png
│ │ │ ├── 5_en-US.png
│ │ │ └── 6_en-US.png
│ ├── short_description.txt
│ └── title.txt
│ ├── eo
│ └── short_description.txt
│ ├── es-ES
│ ├── full_description.txt
│ └── short_description.txt
│ ├── et
│ ├── full_description.txt
│ └── short_description.txt
│ ├── fr-FR
│ ├── full_description.txt
│ └── short_description.txt
│ ├── gl-ES
│ ├── full_description.txt
│ └── short_description.txt
│ ├── it-IT
│ ├── full_description.txt
│ └── short_description.txt
│ ├── iw-IL
│ ├── full_description.txt
│ └── short_description.txt
│ ├── pl-PL
│ ├── full_description.txt
│ └── short_description.txt
│ ├── pt-BR
│ ├── full_description.txt
│ └── short_description.txt
│ ├── ru-RU
│ ├── full_description.txt
│ └── short_description.txt
│ ├── sv-SE
│ └── short_description.txt
│ ├── tr-TR
│ ├── full_description.txt
│ └── short_description.txt
│ ├── uk
│ ├── full_description.txt
│ └── short_description.txt
│ ├── zh-CN
│ ├── full_description.txt
│ └── short_description.txt
│ └── zh-TW
│ └── short_description.txt
├── gradle.properties
├── gradle
├── libs.versions.toml
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── graphics
├── foreground.svg
├── icon.svg
└── icon.webp
├── keystore.properties_sample
└── settings.gradle.kts
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig
2 | # http://EditorConfig.org
3 |
4 | # top-most EditorConfig file
5 | root = true
6 |
7 | # LF end-of-line, insert an empty new line and UTF-8
8 | [*]
9 | end_of_line = lf
10 | insert_final_newline = true
11 | charset = utf-8
12 | indent_style = space
13 | indent_size = 4
14 | continuation_indent_size = 4
15 | max_line_length = 160
16 |
17 | [*.xml]
18 | continuation_indent_size = 4
19 |
20 | [*.kt]
21 | ij_kotlin_name_count_to_use_star_import = 5
22 | ij_kotlin_name_count_to_use_star_import_for_members = 5
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Questions
4 | url: https://github.com/FossifyOrg/Camera/discussions
5 | about: Please ask and answer questions here.
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: Feature request
2 | description: Suggest an idea for this project
3 | labels: [ "feature request", "needs triage" ]
4 | body:
5 | - type: markdown
6 | attributes:
7 | value: |
8 | ## Hi there 👋
9 | Thanks for helping us improve Fossify Camera by suggesting a feature!
10 | Please fill in as much information as possible about your feature request to avoid unnecessary and time-consuming back-and-forth communication.
11 |
12 | - type: checkboxes
13 | id: checklist
14 | attributes:
15 | label: "Checklist"
16 | options:
17 | - label: "I made sure that there are **no existing issues** - [open](https://github.com/FossifyOrg/Camera/issues) or [closed](https://github.com/FossifyOrg/Camera/issues?q=is%3Aissue+is%3Aclosed) - to which I could contribute my information."
18 | required: true
19 | - label: "I made sure that there are **no existing discussions** - [open](https://github.com/FossifyOrg/Camera/discussions) or [closed](https://github.com/FossifyOrg/Camera/discussions?discussions_q=is%3Aclosed) - to which I could contribute my information."
20 | required: true
21 | - label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
22 | required: true
23 | - label: "**I have taken the time to fill in all the required details. I understand that the request will be dismissed otherwise.**"
24 | required: true
25 | - label: "This issue contains only one feature request."
26 | required: true
27 | - label: "I have read and understood the [contribution guidelines](https://github.com/FossifyOrg/Camera/blob/master/CONTRIBUTING.md)."
28 | required: true
29 |
30 | - type: textarea
31 | id: feature-description
32 | attributes:
33 | label: Feature description
34 | description: |
35 | Explain how you want the app's look or behavior to change to suit your needs.
36 |
37 | ⚠️ Please **DO NOT** add links to SimpleMobileTools issues as they can be deleted at any time. Instead, copy-paste any useful information manually.
38 | validations:
39 | required: true
40 |
41 | - type: textarea
42 | id: why-is-the-feature-requested
43 | attributes:
44 | label: Why do you want this feature?
45 | description: |
46 | Describe any problem or limitation you come across while using the app which would be solved by this feature.
47 | validations:
48 | required: true
49 |
50 | - type: textarea
51 | id: additional-information
52 | attributes:
53 | label: Additional information
54 | description: Any other information you'd like to include, for instance sketches, mockups, pictures of rabbits, etc.
55 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 |
3 | registries:
4 | maven-google:
5 | type: maven-repository
6 | url: "https://dl.google.com/dl/android/maven2/"
7 |
8 | maven-central:
9 | type: maven-repository
10 | url: "https://repo.maven.apache.org/maven2"
11 |
12 | jitpack:
13 | type: maven-repository
14 | url: "https://jitpack.io"
15 |
16 | updates:
17 | - package-ecosystem: "bundler"
18 | directory: "/"
19 | schedule:
20 | interval: "weekly"
21 | commit-message:
22 | prefix: "chore"
23 | prefix-development: "chore"
24 | include: "scope"
25 | assignees:
26 | - "naveensingh"
27 |
28 | - package-ecosystem: "gradle"
29 | directory: "/"
30 | registries:
31 | - maven-central
32 | - maven-google
33 | - jitpack
34 | schedule:
35 | interval: "weekly"
36 | commit-message:
37 | prefix: "chore"
38 | prefix-development: "chore"
39 | include: "scope"
40 | assignees:
41 | - "naveensingh"
42 |
43 | - package-ecosystem: "github-actions"
44 | directory: "/"
45 | schedule:
46 | interval: "weekly"
47 | commit-message:
48 | prefix: "chore"
49 | prefix-development: "chore"
50 | include: "scope"
51 | assignees:
52 | - "naveensingh"
53 |
--------------------------------------------------------------------------------
/.github/workflows/foss-release.yml:
--------------------------------------------------------------------------------
1 | name: Github Release
2 |
3 | on:
4 | push:
5 | tags:
6 | - "*.*.*"
7 |
8 | jobs:
9 | call-release-workflow:
10 | uses: FossifyOrg/.github/.github/workflows/release.yml@main
11 | with:
12 | tag: ${{ github.ref_name }}
13 | flavor: "foss"
14 | package_name: "org.fossify.camera"
15 | secrets: inherit
--------------------------------------------------------------------------------
/.github/workflows/gplay-release.yml:
--------------------------------------------------------------------------------
1 | name: Google Play Release
2 |
3 | on:
4 | workflow_dispatch:
5 | inputs:
6 | track:
7 | description: "Google Play Store release track"
8 | required: false
9 | type: choice
10 | default: "beta"
11 | options:
12 | - internal
13 | - alpha
14 | - beta
15 | - production
16 | rollout:
17 | description: "Rollout fraction (0.0-1.0)"
18 | required: false
19 | type: string
20 | default: "0.05"
21 | validate_only:
22 | description: "Fastlane dry-run?"
23 | required: false
24 | type: boolean
25 | default: false
26 |
27 | jobs:
28 | call-release-workflow:
29 | uses: FossifyOrg/.github/.github/workflows/release.yml@main
30 | with:
31 | flavor: "gplay"
32 | package_name: "org.fossify.camera"
33 | track: ${{ github.event.inputs.track }}
34 | rollout: ${{ github.event.inputs.rollout }}
35 | validate_only: ${{ github.event.inputs.validate_only == 'true' }}
36 | secrets: inherit
37 |
--------------------------------------------------------------------------------
/.github/workflows/image-minimizer.yml:
--------------------------------------------------------------------------------
1 | name: Image Minimizer
2 |
3 | on:
4 | issue_comment:
5 | types: [created, edited]
6 | issues:
7 | types: [opened, edited]
8 | pull_request_target:
9 | types: [opened, edited]
10 |
11 | jobs:
12 | call-image-minimizer-workflow:
13 | uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main
14 | secrets: inherit
15 |
--------------------------------------------------------------------------------
/.github/workflows/no-response.yml:
--------------------------------------------------------------------------------
1 | name: No Response
2 |
3 | on:
4 | schedule:
5 | - cron: "0 12 * * *" # Runs daily at noon
6 | workflow_dispatch:
7 |
8 | jobs:
9 | call-no-response-workflow:
10 | uses: FossifyOrg/.github/.github/workflows/no-response.yml@main
11 | secrets: inherit
12 |
--------------------------------------------------------------------------------
/.github/workflows/pr-labeler.yml:
--------------------------------------------------------------------------------
1 | name: PR Labeler
2 |
3 | on:
4 | pull_request_target:
5 | types: [opened]
6 |
7 | jobs:
8 | call-pr-labeler-workflow:
9 | uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main
10 | secrets: inherit
11 |
--------------------------------------------------------------------------------
/.github/workflows/pr.yml:
--------------------------------------------------------------------------------
1 | name: PR
2 |
3 | on:
4 | pull_request:
5 | branches: [ master ]
6 |
7 | jobs:
8 | call-pr-workflow:
9 | uses: FossifyOrg/.github/.github/workflows/pr.yml@main
10 |
--------------------------------------------------------------------------------
/.github/workflows/release-commenter.yml:
--------------------------------------------------------------------------------
1 | name: Release Commenter
2 |
3 | on:
4 | release:
5 | types: [published]
6 |
7 | jobs:
8 | call-release-commenter:
9 | uses: FossifyOrg/.github/.github/workflows/release-commenter.yml@main
10 | secrets: inherit
11 |
--------------------------------------------------------------------------------
/.github/workflows/testing-build.yml:
--------------------------------------------------------------------------------
1 | name: Testing build (on PR)
2 |
3 | on:
4 | pull_request:
5 | branches: [ master ]
6 | types: [ labeled, opened, synchronize, reopened ]
7 |
8 | jobs:
9 | call-testing-build-workflow:
10 | uses: FossifyOrg/.github/.github/workflows/testing-build.yml@main
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | *.aab
3 | .gradle
4 | /local.properties
5 | /.idea/
6 | .DS_Store
7 | /build
8 | /captures
9 | keystore.jks
10 | keystore.properties
11 | fastlane/fastlane.json
12 | fastlane/report.xml
13 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7 |
8 | ## [Unreleased]
9 |
10 | ### Fixed
11 |
12 | - Fixed loud shutter sound on some devices ([#97])
13 |
14 | ## [1.0.2] - 2025-05-28
15 |
16 | ### Changed
17 |
18 | - Updated translations
19 | - Marked app as beta
20 |
21 | ### Fixed
22 |
23 | - All camera buttons now rotate properly on device rotation
24 | - Buttons are now properly updated switching between photo and video modes
25 |
26 | ## [1.0.1] - 2024-10-19
27 |
28 | ### Fixed
29 |
30 | - Fix app name in metadata
31 |
32 | ## [1.0.0] - 2024-10-19
33 |
34 | ### Added
35 |
36 | - Initial release
37 |
38 | [Unreleased]: https://github.com/FossifyOrg/Camera/compare/1.0.2...HEAD
39 | [1.0.2]: https://github.com/FossifyOrg/Camera/compare/1.0.1...1.0.2
40 | [1.0.1]: https://github.com/FossifyOrg/Camera/compare/1.0.0...1.0.1
41 | [1.0.0]: https://github.com/FossifyOrg/Camera/releases/tag/1.0.0
42 |
43 | [#97]: https://github.com/FossifyOrg/Camera/issues/97
44 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | ### Reporting
2 | Before you report something, read the reporting rules [here](https://github.com/FossifyOrg/General-Discussion#how-do-i-suggest-an-improvement-ask-a-question-or-report-an-issue) please.
3 |
4 | ### Contributing as a developer
5 | Some instructions about code style and everything that has to be done to increase the chance of your code getting accepted can be found at the [General Discussion](https://github.com/FossifyOrg/General-Discussion#contribution-rules-for-developers) section.
6 |
7 | ### Contributing as a non developer
8 | In case you just want to for example improve a translation, you can find the way of doing it [here](https://github.com/FossifyOrg/General-Discussion#how-can-i-suggest-an-edit-to-a-file).
9 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | gem "fastlane"
4 | gem "fastlane-plugin-fossify", "~> 1.0"
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Fossify Camera
2 |
3 |
4 |
5 |
6 |
7 | Fossify Camera is your go-to app for capturing life’s moments with precision and privacy. Whether
8 | you’re snapping photos or recording videos, this fully customizable, privacy-respecting camera app
9 | is designed to meet your needs.
10 |
11 | **📸 YOUR PRIVACY, OUR PRIORITY:**
12 | With the Fossify Camera app, your data remains private. Enjoy a camera that works without internet
13 | access or intrusive permissions, ensuring your photos and videos stay secure.
14 |
15 | **🚀 SEAMLESS PERFORMANCE:**
16 | Fossify Camera provides a fluid and responsive interface. Switch between photo and video modes,
17 | adjust zoom, and toggle between front and rear cameras instantly. Capture moments with zero lag and
18 | experience smooth performance at all times.
19 |
20 | **🖼️ COMPLETE CUSTOMIZATION:**
21 | Personalize every aspect of your camera experience. Adjust the output quality, customize the save
22 | path, and set the resolution to suit your needs. You can even customize colors and themes to match
23 | your style.
24 |
25 | **⚡ DYNAMIC CONTROLS:**
26 | Toggle settings with ease—control flash, aspect ratio, and zoom directly from the camera view. The
27 | app is designed for quick access, letting you capture moments efficiently, with intuitive controls.
28 |
29 | **🖼️ MATERIAL DESIGN:**
30 | Enjoy a sleek, user-friendly interface with material design and a dynamic theme that adapts to your
31 | preferences. Whether you're using the app during the day or at night, Fossify Camera provides a
32 | smooth and intuitive experience.
33 |
34 | **🌐 OPEN-SOURCE ASSURANCE:**
35 | Fossify Camera is built on an open-source foundation. With our commitment to transparency, you can
36 | review the code on GitHub and be part of a community that values privacy and trust.
37 |
38 | Fossify Camera offers everything you need to capture moments effortlessly while respecting your
39 | privacy.
40 |
41 | ➡️ Explore more Fossify apps: https://www.fossify.org
42 | ➡️ Open-Source Code: https://www.github.com/FossifyOrg
43 | ➡️ Join the community on Reddit: https://www.reddit.com/r/Fossify
44 | ➡️ Connect on Telegram: https://t.me/Fossify
45 |
46 |
51 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /foss
3 | /gplay
4 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/app/proguard-rules.pro
--------------------------------------------------------------------------------
/app/src/debug/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Camera_debug
4 |
5 |
--------------------------------------------------------------------------------
/app/src/foss/res/values/bools.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | true
4 | true
5 | true
6 |
7 |
--------------------------------------------------------------------------------
/app/src/gplay/res/values/bools.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | false
4 | false
5 | true
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/activities/SimpleActivity.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.activities
2 |
3 | import org.fossify.camera.R
4 | import org.fossify.commons.activities.BaseSimpleActivity
5 |
6 | open class SimpleActivity : BaseSimpleActivity() {
7 | override fun getAppIconIDs() = arrayListOf(
8 | R.mipmap.ic_launcher_red,
9 | R.mipmap.ic_launcher_pink,
10 | R.mipmap.ic_launcher_purple,
11 | R.mipmap.ic_launcher_deep_purple,
12 | R.mipmap.ic_launcher_indigo,
13 | R.mipmap.ic_launcher_blue,
14 | R.mipmap.ic_launcher_light_blue,
15 | R.mipmap.ic_launcher_cyan,
16 | R.mipmap.ic_launcher_teal,
17 | R.mipmap.ic_launcher,
18 | R.mipmap.ic_launcher_light_green,
19 | R.mipmap.ic_launcher_lime,
20 | R.mipmap.ic_launcher_yellow,
21 | R.mipmap.ic_launcher_amber,
22 | R.mipmap.ic_launcher_orange,
23 | R.mipmap.ic_launcher_deep_orange,
24 | R.mipmap.ic_launcher_brown,
25 | R.mipmap.ic_launcher_blue_grey,
26 | R.mipmap.ic_launcher_grey_black
27 | )
28 |
29 | override fun getAppLauncherName() = getString(R.string.app_launcher_name)
30 |
31 | override fun getRepositoryName() = "Camera"
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/activities/SplashActivity.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.activities
2 |
3 | import android.content.Intent
4 | import org.fossify.commons.activities.BaseSplashActivity
5 |
6 | class SplashActivity : BaseSplashActivity() {
7 | override fun initActivity() {
8 | startActivity(Intent(this, MainActivity::class.java))
9 | finish()
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/extensions/CameraSelector.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.extensions
2 |
3 | import androidx.camera.core.CameraSelector
4 |
5 | fun CameraSelector.toLensFacing(): Int {
6 | return if (this == CameraSelector.DEFAULT_FRONT_CAMERA) {
7 | CameraSelector.LENS_FACING_FRONT
8 | } else {
9 | CameraSelector.LENS_FACING_BACK
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/extensions/Context.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.extensions
2 |
3 | import android.content.Context
4 | import org.fossify.camera.helpers.Config
5 | import org.fossify.commons.extensions.hasPermission
6 | import org.fossify.commons.helpers.PERMISSION_ACCESS_COARSE_LOCATION
7 | import org.fossify.commons.helpers.PERMISSION_ACCESS_FINE_LOCATION
8 | import java.io.File
9 | import java.text.SimpleDateFormat
10 | import java.util.Date
11 | import java.util.Locale
12 |
13 | val Context.config: Config get() = Config.newInstance(applicationContext)
14 |
15 | fun Context.getOutputMediaFilePath(isPhoto: Boolean): String {
16 | val mediaStorageDir = File(config.savePhotosFolder)
17 |
18 | if (!mediaStorageDir.exists()) {
19 | if (!mediaStorageDir.mkdirs()) {
20 | return ""
21 | }
22 | }
23 |
24 | val mediaName = getRandomMediaName(isPhoto)
25 | return if (isPhoto) {
26 | "${mediaStorageDir.path}/$mediaName.jpg"
27 | } else {
28 | "${mediaStorageDir.path}/$mediaName.mp4"
29 | }
30 | }
31 |
32 | fun Context.getOutputMediaFileName(isPhoto: Boolean): String {
33 | val mediaName = getRandomMediaName(isPhoto)
34 | return if (isPhoto) {
35 | "$mediaName.jpg"
36 | } else {
37 | "$mediaName.mp4"
38 | }
39 | }
40 |
41 | fun getRandomMediaName(isPhoto: Boolean): String {
42 | val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
43 | return if (isPhoto) {
44 | "IMG_$timestamp"
45 | } else {
46 | "VID_$timestamp"
47 | }
48 | }
49 |
50 | fun Context.checkLocationPermission(): Boolean {
51 | return hasPermission(PERMISSION_ACCESS_FINE_LOCATION) || hasPermission(
52 | PERMISSION_ACCESS_COARSE_LOCATION
53 | )
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/extensions/Int.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.extensions
2 |
3 | import androidx.camera.core.CameraSelector
4 | import androidx.camera.core.ImageCapture
5 | import org.fossify.camera.R
6 | import org.fossify.camera.helpers.FLASH_ALWAYS_ON
7 | import org.fossify.camera.helpers.FLASH_AUTO
8 | import org.fossify.camera.helpers.FLASH_OFF
9 | import org.fossify.camera.helpers.FLASH_ON
10 |
11 | fun Int.toCameraXFlashMode(): Int {
12 | return when (this) {
13 | FLASH_ON -> ImageCapture.FLASH_MODE_ON
14 | FLASH_OFF -> ImageCapture.FLASH_MODE_OFF
15 | FLASH_AUTO -> ImageCapture.FLASH_MODE_AUTO
16 | FLASH_ALWAYS_ON -> ImageCapture.FLASH_MODE_OFF
17 | else -> throw IllegalArgumentException("Unknown mode: $this")
18 | }
19 | }
20 |
21 | fun Int.toAppFlashMode(): Int {
22 | return when (this) {
23 | ImageCapture.FLASH_MODE_ON -> FLASH_ON
24 | ImageCapture.FLASH_MODE_OFF -> FLASH_OFF
25 | ImageCapture.FLASH_MODE_AUTO -> FLASH_AUTO
26 | else -> throw IllegalArgumentException("Unknown mode: $this")
27 | }
28 | }
29 |
30 | fun Int.toFlashModeId(): Int {
31 | return when (this) {
32 | FLASH_ON -> R.id.flash_on
33 | FLASH_OFF -> R.id.flash_off
34 | FLASH_AUTO -> R.id.flash_auto
35 | FLASH_ALWAYS_ON -> R.id.flash_always_on
36 | else -> throw IllegalArgumentException("Unknown mode: $this")
37 | }
38 | }
39 |
40 | fun Int.toCameraSelector(): CameraSelector {
41 | return if (this == CameraSelector.LENS_FACING_FRONT) {
42 | CameraSelector.DEFAULT_FRONT_CAMERA
43 | } else {
44 | CameraSelector.DEFAULT_BACK_CAMERA
45 | }
46 | }
47 |
48 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/extensions/MaterialButton.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.extensions
2 |
3 | import androidx.annotation.DrawableRes
4 | import com.google.android.material.button.MaterialButton
5 | import org.fossify.camera.R
6 | import org.fossify.camera.views.ShadowDrawable
7 |
8 | fun MaterialButton.setShadowIcon(@DrawableRes drawableResId: Int) {
9 | icon = ShadowDrawable(context, drawableResId, R.style.TopIconShadow)
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/extensions/Quality.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.extensions
2 |
3 | import androidx.camera.video.Quality
4 | import org.fossify.camera.models.VideoQuality
5 |
6 | fun Quality.toVideoQuality(): VideoQuality {
7 | return when (this) {
8 | Quality.UHD -> VideoQuality.UHD
9 | Quality.FHD -> VideoQuality.FHD
10 | Quality.HD -> VideoQuality.HD
11 | Quality.SD -> VideoQuality.SD
12 | else -> throw IllegalArgumentException("Unsupported quality: $this")
13 | }
14 | }
15 |
16 | fun VideoQuality.toCameraXQuality(): Quality {
17 | return when (this) {
18 | VideoQuality.UHD -> Quality.UHD
19 | VideoQuality.FHD -> Quality.FHD
20 | VideoQuality.HD -> Quality.HD
21 | VideoQuality.SD -> Quality.SD
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/extensions/View.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.extensions
2 |
3 | import android.view.View
4 | import org.fossify.commons.helpers.SHORT_ANIMATION_DURATION
5 |
6 | fun View.fadeIn() {
7 | animate().alpha(1f).setDuration(SHORT_ANIMATION_DURATION).withStartAction { isClickable = true }
8 | .start()
9 | }
10 |
11 | fun View.fadeOut() {
12 | animate().alpha(0f).setDuration(SHORT_ANIMATION_DURATION).withEndAction { isClickable = false }
13 | .start()
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/BitmapUtils.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers
2 |
3 | import android.graphics.Bitmap
4 | import android.graphics.BitmapFactory
5 | import kotlin.math.ceil
6 | import kotlin.math.floor
7 | import kotlin.math.sqrt
8 |
9 | //inspired by https://android.googlesource.com/platform/packages/apps/Camera2/+/refs/heads/master/src/com/android/camera/util/CameraUtil.java#244
10 | object BitmapUtils {
11 | private const val INLINE_BITMAP_MAX_PIXEL_NUM = 50 * 1024
12 |
13 | fun makeBitmap(
14 | jpegData: ByteArray,
15 | maxNumOfPixels: Int = INLINE_BITMAP_MAX_PIXEL_NUM
16 | ): Bitmap? {
17 | return try {
18 | val options = BitmapFactory.Options()
19 | options.inJustDecodeBounds = true
20 |
21 | BitmapFactory.decodeByteArray(jpegData, 0, jpegData.size, options)
22 |
23 | if (options.mCancel || options.outWidth == -1 || options.outHeight == -1) {
24 | return null
25 | }
26 | options.inSampleSize = computeSampleSize(options, -1, maxNumOfPixels)
27 | options.inJustDecodeBounds = false
28 | options.inDither = false
29 | options.inPreferredConfig = Bitmap.Config.ARGB_8888
30 | BitmapFactory.decodeByteArray(
31 | jpegData, 0, jpegData.size,
32 | options
33 | )
34 | } catch (ex: OutOfMemoryError) {
35 | null
36 | }
37 | }
38 |
39 | private fun computeSampleSize(
40 | options: BitmapFactory.Options,
41 | minSideLength: Int,
42 | maxNumOfPixels: Int
43 | ): Int {
44 | val initialSize = computeInitialSampleSize(
45 | options, minSideLength,
46 | maxNumOfPixels
47 | )
48 | var roundedSize: Int
49 | if (initialSize <= 8) {
50 | roundedSize = 1
51 | while (roundedSize < initialSize) {
52 | roundedSize = roundedSize shl 1
53 | }
54 | } else {
55 | roundedSize = (initialSize + 7) / 8 * 8
56 | }
57 | return roundedSize
58 | }
59 |
60 | private fun computeInitialSampleSize(
61 | options: BitmapFactory.Options,
62 | minSideLength: Int,
63 | maxNumOfPixels: Int
64 | ): Int {
65 | val w = options.outWidth.toDouble()
66 | val h = options.outHeight.toDouble()
67 | val lowerBound = if (maxNumOfPixels < 0) 1 else ceil(sqrt(w * h / maxNumOfPixels)).toInt()
68 | val upperBound =
69 | if (minSideLength < 0) 128 else floor(w / minSideLength).coerceAtMost(floor(h / minSideLength))
70 | .toInt()
71 | if (upperBound < lowerBound) {
72 | // return the larger one when there is no overlapping zone.
73 | return lowerBound
74 | }
75 | return if (maxNumOfPixels < 0 && minSideLength < 0) {
76 | 1
77 | } else if (minSideLength < 0) {
78 | lowerBound
79 | } else {
80 | upperBound
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/CameraErrorHandler.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers
2 |
3 | import android.content.Context
4 | import android.widget.Toast
5 | import androidx.camera.core.CameraState
6 | import androidx.camera.core.ImageCapture
7 | import androidx.camera.video.VideoRecordEvent
8 | import org.fossify.camera.R
9 | import org.fossify.commons.extensions.toast
10 |
11 | class CameraErrorHandler(
12 | private val context: Context,
13 | ) {
14 |
15 | fun handleCameraError(error: CameraState.StateError?) {
16 | when (error?.code) {
17 | CameraState.ERROR_MAX_CAMERAS_IN_USE,
18 | CameraState.ERROR_CAMERA_IN_USE -> context.toast(
19 | id = R.string.camera_in_use_error,
20 | length = Toast.LENGTH_LONG
21 | )
22 |
23 | CameraState.ERROR_CAMERA_FATAL_ERROR -> context.toast(R.string.camera_unavailable)
24 | CameraState.ERROR_STREAM_CONFIG -> context.toast(R.string.camera_configure_error)
25 | CameraState.ERROR_CAMERA_DISABLED -> context.toast(R.string.camera_disabled_by_admin_error)
26 | CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED -> context.toast(
27 | id = R.string.camera_dnd_error,
28 | length = Toast.LENGTH_LONG
29 | )
30 |
31 | CameraState.ERROR_OTHER_RECOVERABLE_ERROR -> {}
32 | }
33 | }
34 |
35 | fun handleImageCaptureError(imageCaptureError: Int) {
36 | when (imageCaptureError) {
37 | ImageCapture.ERROR_FILE_IO -> context.toast(R.string.photo_not_saved)
38 | else -> context.toast(R.string.photo_capture_failed)
39 | }
40 | }
41 |
42 | fun handleVideoRecordingError(error: Int) {
43 | when (error) {
44 | VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE -> context.toast(R.string.video_capture_insufficient_storage_error)
45 | VideoRecordEvent.Finalize.ERROR_NONE -> {}
46 | else -> context.toast(R.string.video_recording_failed)
47 | }
48 | }
49 |
50 | fun showSaveToInternalStorage() {
51 | context.toast(R.string.save_error_internal_storage)
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/Constants.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers
2 |
3 | const val ORIENT_PORTRAIT = 0
4 | const val ORIENT_LANDSCAPE_LEFT = 1
5 | const val ORIENT_LANDSCAPE_RIGHT = 2
6 |
7 | // shared preferences
8 | const val SAVE_PHOTOS = "save_photos"
9 | const val SOUND = "sound"
10 | const val VOLUME_BUTTONS_AS_SHUTTER = "volume_buttons_as_shutter"
11 | const val FLIP_PHOTOS = "flip_photos"
12 | const val LAST_USED_CAMERA = "last_used_camera_3"
13 | const val LAST_USED_CAMERA_LENS = "last_used_camera_lens"
14 | const val FLASHLIGHT_STATE = "flashlight_state"
15 | const val INIT_PHOTO_MODE = "init_photo_mode"
16 | const val BACK_PHOTO_RESOLUTION_INDEX = "back_photo_resolution_index_3"
17 | const val BACK_VIDEO_RESOLUTION_INDEX = "back_video_resolution_index_3"
18 | const val FRONT_PHOTO_RESOLUTION_INDEX = "front_photo_resolution_index_3"
19 | const val FRONT_VIDEO_RESOLUTION_INDEX = "front_video_resolution_index_3"
20 | const val SAVE_PHOTO_METADATA = "save_photo_metadata"
21 | const val SAVE_PHOTO_VIDEO_LOCATION = "save_photo_video_location"
22 | const val PHOTO_QUALITY = "photo_quality"
23 | const val CAPTURE_MODE = "capture_mode"
24 | const val TIMER_MODE = "timer_mode"
25 |
26 | const val FLASH_OFF = 0
27 | const val FLASH_ON = 1
28 | const val FLASH_AUTO = 2
29 | const val FLASH_ALWAYS_ON = 3
30 |
31 | fun compensateDeviceRotation(orientation: Int) = when (orientation) {
32 | ORIENT_LANDSCAPE_LEFT -> 270
33 | ORIENT_LANDSCAPE_RIGHT -> 90
34 | else -> 0
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/GestureDetectorListener.java:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers;
2 |
3 | import android.view.GestureDetector;
4 | import android.view.MotionEvent;
5 |
6 | import androidx.annotation.Nullable;
7 |
8 | public class GestureDetectorListener extends GestureDetector.SimpleOnGestureListener {
9 | @Override
10 | public boolean onFling(@Nullable MotionEvent e1, @Nullable MotionEvent e2, float velocityX, float velocityY) {
11 | return super.onFling(e1, e2, velocityX, velocityY);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/MediaSizeStore.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers
2 |
3 | class MediaSizeStore(private val config: Config) {
4 |
5 | fun storeSize(isPhotoCapture: Boolean, isFrontCamera: Boolean, currentIndex: Int) {
6 | if (isPhotoCapture) {
7 | if (isFrontCamera) {
8 | config.frontPhotoResIndex = currentIndex
9 | } else {
10 | config.backPhotoResIndex = currentIndex
11 | }
12 | } else {
13 | if (isFrontCamera) {
14 | config.frontVideoResIndex = currentIndex
15 | } else {
16 | config.backVideoResIndex = currentIndex
17 | }
18 | }
19 | }
20 |
21 | fun getCurrentSizeIndex(isPhotoCapture: Boolean, isFrontCamera: Boolean): Int {
22 | return if (isPhotoCapture) {
23 | if (isFrontCamera) {
24 | config.frontPhotoResIndex
25 | } else {
26 | config.backPhotoResIndex
27 | }
28 | } else {
29 | if (isFrontCamera) {
30 | config.frontVideoResIndex
31 | } else {
32 | config.backVideoResIndex
33 | }
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/MediaSoundHelper.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers
2 |
3 | import android.content.Context
4 |
5 | class MediaSoundHelper(context: Context) {
6 | private val mediaActionSound = MediaActionSound(context)
7 |
8 | fun loadSounds() {
9 | mediaActionSound.load(MediaActionSound.START_VIDEO_RECORDING)
10 | mediaActionSound.load(MediaActionSound.STOP_VIDEO_RECORDING)
11 | mediaActionSound.load(MediaActionSound.SHUTTER_CLICK)
12 | mediaActionSound.load(MediaActionSound.TIMER_COUNTDOWN)
13 | mediaActionSound.load(MediaActionSound.TIMER_COUNTDOWN_2_SECONDS)
14 | }
15 |
16 | fun playShutterSound() {
17 | mediaActionSound.play(MediaActionSound.SHUTTER_CLICK)
18 | }
19 |
20 | fun playStartVideoRecordingSound(onPlayComplete: () -> Unit) {
21 | mediaActionSound.play(MediaActionSound.START_VIDEO_RECORDING, onPlayComplete)
22 | }
23 |
24 | fun playStopVideoRecordingSound() {
25 | mediaActionSound.play(MediaActionSound.STOP_VIDEO_RECORDING)
26 | }
27 |
28 | fun playTimerCountdownSound() {
29 | mediaActionSound.play(MediaActionSound.TIMER_COUNTDOWN)
30 | }
31 |
32 | fun playTimerCountdown2SecondsSound() {
33 | mediaActionSound.play(MediaActionSound.TIMER_COUNTDOWN_2_SECONDS)
34 | }
35 |
36 | fun stopTimerCountdown2SecondsSound() {
37 | mediaActionSound.stop(MediaActionSound.TIMER_COUNTDOWN_2_SECONDS)
38 | }
39 |
40 | fun release() {
41 | mediaActionSound.release()
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/PinchToZoomOnScaleGestureListener.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers
2 |
3 | import android.view.ScaleGestureDetector
4 | import androidx.camera.core.CameraControl
5 | import androidx.camera.core.CameraInfo
6 |
7 | class PinchToZoomOnScaleGestureListener(
8 | private val cameraInfo: CameraInfo,
9 | private val cameraControl: CameraControl,
10 | ) : ScaleGestureDetector.SimpleOnScaleGestureListener() {
11 | private val zoomCalculator = ZoomCalculator()
12 |
13 | override fun onScale(detector: ScaleGestureDetector): Boolean {
14 | val zoomState = cameraInfo.zoomState.value ?: return false
15 | val zoomRatio = zoomCalculator.calculateZoomRatio(zoomState, detector.scaleFactor)
16 | cameraControl.setZoomRatio(zoomRatio)
17 | return true
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/SimpleLocationManager.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers
2 |
3 | import android.Manifest
4 | import android.location.Location
5 | import android.location.LocationListener
6 | import android.location.LocationManager
7 | import androidx.annotation.RequiresPermission
8 | import org.fossify.camera.extensions.checkLocationPermission
9 | import org.fossify.commons.activities.BaseSimpleActivity
10 |
11 | class SimpleLocationManager(private val activity: BaseSimpleActivity) {
12 |
13 | companion object {
14 | private const val LOCATION_UPDATE_MIN_TIME_INTERVAL_MS = 5000L
15 | private const val LOCATION_UPDATE_MIN_DISTANCE_M = 10F
16 | }
17 |
18 | private val locationManager = activity.getSystemService(LocationManager::class.java)!!
19 | private val locationListener = LocationListener { location ->
20 | this@SimpleLocationManager.location = location
21 | }
22 |
23 | private var location: Location? = null
24 |
25 | fun getLocation(): Location? {
26 | if (location == null) {
27 | location = getLastKnownLocation()
28 | }
29 |
30 | return location
31 | }
32 |
33 | private fun getLastKnownLocation(): Location? {
34 | return if (activity.checkLocationPermission()) {
35 | var accurateLocation: Location? = null
36 | for (provider in locationManager.allProviders) {
37 | val location = locationManager.getLastKnownLocation(provider) ?: continue
38 | if (accurateLocation == null || location.accuracy < accurateLocation.accuracy) {
39 | accurateLocation = location
40 | }
41 | }
42 | accurateLocation
43 | } else {
44 | null
45 | }
46 | }
47 |
48 | @RequiresPermission(anyOf = [Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION])
49 | fun requestLocationUpdates() {
50 | locationManager.allProviders.forEach { provider ->
51 | locationManager.requestLocationUpdates(
52 | provider,
53 | LOCATION_UPDATE_MIN_TIME_INTERVAL_MS,
54 | LOCATION_UPDATE_MIN_DISTANCE_M,
55 | locationListener
56 | )
57 | }
58 | }
59 |
60 | fun dropLocationUpdates() {
61 | locationManager.removeUpdates(locationListener)
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/TabSelectedListener.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers
2 |
3 | import com.google.android.material.tabs.TabLayout
4 |
5 | interface TabSelectedListener : TabLayout.OnTabSelectedListener {
6 | override fun onTabReselected(tab: TabLayout.Tab?) {}
7 |
8 | override fun onTabUnselected(tab: TabLayout.Tab?) {}
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/VideoQualityManager.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers
2 |
3 | import androidx.appcompat.app.AppCompatActivity
4 | import androidx.camera.core.CameraSelector
5 | import androidx.camera.lifecycle.ProcessCameraProvider
6 | import androidx.camera.video.Quality
7 | import androidx.camera.video.QualitySelector
8 | import org.fossify.camera.extensions.config
9 | import org.fossify.camera.extensions.toVideoQuality
10 | import org.fossify.camera.models.CameraSelectorVideoQualities
11 | import org.fossify.camera.models.VideoQuality
12 | import org.fossify.commons.extensions.showErrorToast
13 |
14 | class VideoQualityManager(
15 | private val activity: AppCompatActivity,
16 | ) {
17 | companion object {
18 | private val QUALITIES = listOf(Quality.UHD, Quality.FHD, Quality.HD, Quality.SD)
19 | private val CAMERA_SELECTORS =
20 | arrayOf(CameraSelector.DEFAULT_BACK_CAMERA, CameraSelector.DEFAULT_FRONT_CAMERA)
21 | }
22 |
23 | private val videoQualities = mutableListOf()
24 | private val mediaSizeStore = MediaSizeStore(activity.config)
25 |
26 | fun initSupportedQualities(cameraProvider: ProcessCameraProvider) {
27 | if (videoQualities.isEmpty()) {
28 | for (camSelector in CAMERA_SELECTORS) {
29 | cameraProvider.unbindAll()
30 | val camera = cameraProvider.bindToLifecycle(activity, camSelector)
31 | try {
32 | if (cameraProvider.hasCamera(camSelector)) {
33 | QualitySelector.getSupportedQualities(camera.cameraInfo)
34 | .filter(QUALITIES::contains)
35 | .also { allQualities ->
36 | val qualities = allQualities.map { it.toVideoQuality() }
37 | videoQualities.add(
38 | CameraSelectorVideoQualities(
39 | camSelector,
40 | qualities
41 | )
42 | )
43 | }
44 | }
45 | } catch (e: Exception) {
46 | activity.showErrorToast(e)
47 | }
48 | }
49 | }
50 | }
51 |
52 | fun getUserSelectedQuality(cameraSelector: CameraSelector): VideoQuality {
53 | val isFrontCamera = cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA
54 | val selectionIndex = mediaSizeStore.getCurrentSizeIndex(
55 | isPhotoCapture = false,
56 | isFrontCamera = isFrontCamera
57 | ).coerceAtLeast(0)
58 | return getSupportedQualities(cameraSelector).getOrElse(selectionIndex) { VideoQuality.HD }
59 | }
60 |
61 | fun getSupportedQualities(cameraSelector: CameraSelector): List {
62 | return videoQualities.filter { it.camSelector == cameraSelector }
63 | .flatMap { it.qualities }
64 | .sortedByDescending { it.pixels }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/helpers/ZoomCalculator.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.helpers
2 |
3 | import androidx.camera.core.ZoomState
4 |
5 | class ZoomCalculator {
6 |
7 | fun calculateZoomRatio(zoomState: ZoomState, pinchToZoomScale: Float): Float {
8 | val clampedRatio = zoomState.zoomRatio * speedUpZoomBy2X(pinchToZoomScale)
9 | // Clamp the ratio with the zoom range.
10 | return clampedRatio.coerceAtLeast(zoomState.minZoomRatio)
11 | .coerceAtMost(zoomState.maxZoomRatio)
12 | }
13 |
14 | private fun speedUpZoomBy2X(scaleFactor: Float): Float {
15 | return if (scaleFactor > 1f) {
16 | 1.0f + (scaleFactor - 1.0f) * 2
17 | } else {
18 | 1.0f - (1.0f - scaleFactor) * 2
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/implementations/CameraXInitializer.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.implementations
2 |
3 | import android.net.Uri
4 | import androidx.camera.view.PreviewView
5 | import org.fossify.camera.helpers.CameraErrorHandler
6 | import org.fossify.camera.helpers.MediaOutputHelper
7 | import org.fossify.camera.helpers.MediaSoundHelper
8 | import org.fossify.commons.activities.BaseSimpleActivity
9 |
10 | class CameraXInitializer(private val activity: BaseSimpleActivity) {
11 |
12 | fun createCameraXPreview(
13 | previewView: PreviewView,
14 | listener: CameraXPreviewListener,
15 | mediaSoundHelper: MediaSoundHelper,
16 | outputUri: Uri?,
17 | isThirdPartyIntent: Boolean,
18 | initInPhotoMode: Boolean,
19 | ): CameraXPreview {
20 | val cameraErrorHandler = newCameraErrorHandler()
21 | val mediaOutputHelper =
22 | newMediaOutputHelper(cameraErrorHandler, outputUri, isThirdPartyIntent)
23 | return CameraXPreview(
24 | activity,
25 | previewView,
26 | mediaSoundHelper,
27 | mediaOutputHelper,
28 | cameraErrorHandler,
29 | listener,
30 | isThirdPartyIntent = isThirdPartyIntent,
31 | initInPhotoMode = initInPhotoMode,
32 | )
33 | }
34 |
35 | private fun newMediaOutputHelper(
36 | cameraErrorHandler: CameraErrorHandler,
37 | outputUri: Uri?,
38 | isThirdPartyIntent: Boolean,
39 | ): MediaOutputHelper {
40 | return MediaOutputHelper(
41 | activity,
42 | cameraErrorHandler,
43 | outputUri,
44 | isThirdPartyIntent,
45 | )
46 | }
47 |
48 | private fun newCameraErrorHandler(): CameraErrorHandler {
49 | return CameraErrorHandler(activity)
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/implementations/CameraXPreviewListener.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.implementations
2 |
3 | import android.graphics.Bitmap
4 | import android.net.Uri
5 | import org.fossify.camera.models.ResolutionOption
6 |
7 | interface CameraXPreviewListener {
8 | fun onInitPhotoMode()
9 | fun onInitVideoMode()
10 | fun setCameraAvailable(available: Boolean) {}
11 | fun setHasFrontAndBackCamera(hasFrontAndBack: Boolean)
12 | fun setFlashAvailable(available: Boolean)
13 | fun onChangeCamera(frontCamera: Boolean)
14 | fun shutterAnimation()
15 | fun onMediaSaved(uri: Uri)
16 | fun onImageCaptured(bitmap: Bitmap)
17 | fun onChangeFlashMode(flashMode: Int)
18 | fun onPhotoCaptureStart()
19 | fun onPhotoCaptureEnd()
20 | fun onVideoRecordingStarted()
21 | fun onVideoRecordingStopped()
22 | fun onVideoDurationChanged(durationNanos: Long)
23 | fun onFocusCamera(xPos: Float, yPos: Float)
24 | fun onTouchPreview()
25 | fun displaySelectedResolution(resolutionOption: ResolutionOption)
26 | fun showImageSizes(
27 | selectedResolution: ResolutionOption,
28 | resolutions: List,
29 | isPhotoCapture: Boolean,
30 | isFrontCamera: Boolean,
31 | onSelect: (index: Int, changed: Boolean) -> Unit,
32 | )
33 |
34 | fun showFlashOptions(photoCapture: Boolean)
35 | fun adjustPreviewView(requiresCentering: Boolean)
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/interfaces/MyPreview.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.interfaces
2 |
3 | interface MyPreview {
4 |
5 | fun isInPhotoMode(): Boolean
6 |
7 | fun setFlashlightState(state: Int)
8 |
9 | fun toggleFrontBackCamera()
10 |
11 | fun handleFlashlightClick()
12 |
13 | fun tryTakePicture()
14 |
15 | fun toggleRecording()
16 |
17 | fun initPhotoMode()
18 |
19 | fun initVideoMode()
20 |
21 | fun showChangeResolution()
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/models/CameraSelectorImageQualities.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.models
2 |
3 | import androidx.camera.core.CameraSelector
4 |
5 | data class CameraSelectorImageQualities(
6 | val camSelector: CameraSelector,
7 | val qualities: List,
8 | )
9 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/models/CameraSelectorVideoQualities.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.models
2 |
3 | import androidx.camera.core.CameraSelector
4 |
5 | data class CameraSelectorVideoQualities(
6 | val camSelector: CameraSelector,
7 | val qualities: List,
8 | )
9 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/models/CaptureMode.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.models
2 |
3 | import androidx.annotation.StringRes
4 | import org.fossify.camera.R
5 |
6 | enum class CaptureMode(@StringRes val stringResId: Int) {
7 | MINIMIZE_LATENCY(R.string.minimize_latency),
8 | MAXIMIZE_QUALITY(R.string.maximize_quality)
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/models/MediaOutput.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.models
2 |
3 | import android.content.ContentValues
4 | import android.net.Uri
5 | import android.os.ParcelFileDescriptor
6 | import java.io.File
7 | import java.io.OutputStream
8 |
9 | sealed class MediaOutput(
10 | open val uri: Uri?,
11 | ) {
12 | sealed interface ImageCaptureOutput
13 | sealed interface VideoCaptureOutput
14 |
15 | data class MediaStoreOutput(
16 | val contentValues: ContentValues,
17 | val contentUri: Uri,
18 | ) : MediaOutput(null), ImageCaptureOutput, VideoCaptureOutput
19 |
20 | data class OutputStreamMediaOutput(
21 | val outputStream: OutputStream,
22 | override val uri: Uri,
23 | ) : MediaOutput(uri), ImageCaptureOutput
24 |
25 | data class FileDescriptorMediaOutput(
26 | val fileDescriptor: ParcelFileDescriptor,
27 | override val uri: Uri,
28 | ) : MediaOutput(uri), VideoCaptureOutput
29 |
30 | data class FileMediaOutput(
31 | val file: File,
32 | override val uri: Uri,
33 | ) : MediaOutput(uri), VideoCaptureOutput, ImageCaptureOutput
34 |
35 | object BitmapOutput : MediaOutput(null), ImageCaptureOutput
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/models/MySize.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.models
2 |
3 | import android.content.Context
4 | import androidx.annotation.DrawableRes
5 | import androidx.annotation.IdRes
6 | import org.fossify.camera.R
7 |
8 | data class MySize(val width: Int, val height: Int, val isFullScreen: Boolean = false) {
9 | companion object {
10 | private const val ONE_MEGA_PIXEL = 1000000
11 | private const val ZERO_MEGA_PIXEL = "0.0"
12 | }
13 |
14 | private val ratio = width / height.toFloat()
15 |
16 | val pixels: Int = width * height
17 |
18 | val megaPixels: String = String.format("%.1f", (width * height.toFloat()) / ONE_MEGA_PIXEL)
19 |
20 | fun requiresCentering(): Boolean {
21 | return !isFullScreen && (isFourToThree() || isThreeToTwo() || isSquare())
22 | }
23 |
24 | fun isSixteenToNine() = ratio == 16 / 9f
25 |
26 | private fun isFiveToThree() = ratio == 5 / 3f
27 |
28 | private fun isFourToThree() = ratio == 4 / 3f
29 |
30 | private fun isTwoToOne() = ratio == 2f
31 |
32 | private fun isThreeToFour() = ratio == 3 / 4f
33 |
34 | private fun isThreeToTwo() = ratio == 3 / 2f
35 |
36 | private fun isSixToFive() = ratio == 6 / 5f
37 |
38 | private fun isNineteenToNine() = ratio == 19 / 9f
39 |
40 | private fun isNineteenToEight() = ratio == 19 / 8f
41 |
42 | private fun isOneNineToOne() = ratio == 1.9f
43 |
44 | private fun isSquare() = width == height
45 |
46 | fun isSupported(isFullScreenSize16x9: Boolean): Boolean {
47 | return if (isFullScreenSize16x9) {
48 | isFourToThree() || isSquare()
49 | } else {
50 | isFourToThree() || isSixteenToNine() || isSquare()
51 | } && megaPixels != ZERO_MEGA_PIXEL
52 | }
53 |
54 | fun getAspectRatio(context: Context) = when {
55 | isSixteenToNine() -> "16:9"
56 | isFiveToThree() -> "5:3"
57 | isFourToThree() -> "4:3"
58 | isThreeToFour() -> "3:4"
59 | isThreeToTwo() -> "3:2"
60 | isSixToFive() -> "6:5"
61 | isOneNineToOne() -> "1.9:1"
62 | isNineteenToNine() -> "19:9"
63 | isNineteenToEight() -> "19:8"
64 | isSquare() -> "1:1"
65 | isTwoToOne() -> "2:1"
66 | else -> context.resources.getString(org.fossify.commons.R.string.other)
67 | }
68 |
69 | @DrawableRes
70 | fun getImageResId(): Int = when {
71 | isFullScreen -> R.drawable.ic_photo_full_vector
72 | isSixteenToNine() -> R.drawable.ic_photo_16x9_vector
73 | isFourToThree() -> R.drawable.ic_photo_4x3_vector
74 | isSquare() -> R.drawable.ic_photo_1x1_vector
75 | else -> throw UnsupportedOperationException("This size $this is not supported")
76 | }
77 |
78 | @IdRes
79 | fun getButtonId(): Int = when {
80 | isFullScreen -> R.id.photo_full
81 | isSixteenToNine() -> R.id.photo_16x9
82 | isFourToThree() -> R.id.photo_4x3
83 | isSquare() -> R.id.photo_1x1
84 | else -> throw UnsupportedOperationException("This size $this is not supported")
85 | }
86 |
87 | fun toResolutionOption(): ResolutionOption {
88 | return ResolutionOption(buttonViewId = getButtonId(), imageDrawableResId = getImageResId())
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/models/ResolutionOption.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.models
2 |
3 | import androidx.annotation.DrawableRes
4 | import androidx.annotation.IdRes
5 |
6 | data class ResolutionOption(
7 | @IdRes val buttonViewId: Int,
8 | @DrawableRes val imageDrawableResId: Int,
9 | )
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/models/TimerMode.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.models
2 |
3 | import org.fossify.camera.R
4 |
5 | enum class TimerMode(val millisInFuture: Long) {
6 | OFF(0),
7 | TIMER_3(3000),
8 | TIMER_5(5000),
9 | TIMER_10(10000);
10 |
11 | fun getTimerModeResId(): Int {
12 | return when (this) {
13 | OFF -> R.id.timer_off
14 | TIMER_3 -> R.id.timer_3s
15 | TIMER_5 -> R.id.timer_5s
16 | TIMER_10 -> R.id.timer_10_s
17 | }
18 | }
19 |
20 | fun getTimerModeDrawableRes(): Int {
21 | return when (this) {
22 | OFF -> R.drawable.ic_timer_off_vector
23 | TIMER_3 -> R.drawable.ic_timer_3_vector
24 | TIMER_5 -> R.drawable.ic_timer_5_vector
25 | TIMER_10 -> R.drawable.ic_timer_10_vector
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/models/VideoQuality.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.models
2 |
3 | import android.content.Context
4 | import androidx.annotation.DrawableRes
5 | import androidx.annotation.IdRes
6 | import org.fossify.camera.R
7 |
8 | private const val ONE_MEGA_PIXEL = 1000000
9 |
10 | enum class VideoQuality(val width: Int, val height: Int) {
11 | UHD(3840, 2160),
12 | FHD(1920, 1080),
13 | HD(1280, 720),
14 | SD(720, 480);
15 |
16 | val pixels: Int = width * height
17 |
18 | val megaPixels: String =
19 | String.format("%.1f", (width * height.toFloat()) / ONE_MEGA_PIXEL)
20 |
21 | val ratio = width / height.toFloat()
22 |
23 | private fun isSixteenToNine() = ratio == 16 / 9f
24 |
25 | private fun isFiveToThree() = ratio == 5 / 3f
26 |
27 | private fun isFourToThree() = ratio == 4 / 3f
28 |
29 | private fun isTwoToOne() = ratio == 2f
30 |
31 | private fun isThreeToFour() = ratio == 3 / 4f
32 |
33 | private fun isThreeToTwo() = ratio == 3 / 2f
34 |
35 | private fun isSixToFive() = ratio == 6 / 5f
36 |
37 | private fun isNineteenToNine() = ratio == 19 / 9f
38 |
39 | private fun isNineteenToEight() = ratio == 19 / 8f
40 |
41 | private fun isOneNineToOne() = ratio == 1.9f
42 |
43 | private fun isSquare() = width == height
44 |
45 | fun getAspectRatio(context: Context) = when {
46 | isSixteenToNine() -> "16:9"
47 | isFiveToThree() -> "5:3"
48 | isFourToThree() -> "4:3"
49 | isThreeToFour() -> "3:4"
50 | isThreeToTwo() -> "3:2"
51 | isSixToFive() -> "6:5"
52 | isOneNineToOne() -> "1.9:1"
53 | isNineteenToNine() -> "19:9"
54 | isNineteenToEight() -> "19:8"
55 | isSquare() -> "1:1"
56 | isTwoToOne() -> "2:1"
57 | else -> context.resources.getString(org.fossify.commons.R.string.other)
58 | }
59 |
60 | @DrawableRes
61 | fun getImageResId(): Int = when (this) {
62 | UHD -> R.drawable.ic_video_uhd_vector
63 | FHD -> R.drawable.ic_video_fhd_vector
64 | HD -> R.drawable.ic_video_hd_vector
65 | SD -> R.drawable.ic_video_sd_vector
66 | }
67 |
68 | @IdRes
69 | fun getButtonId(): Int = when (this) {
70 | UHD -> R.id.video_uhd
71 | FHD -> R.id.video_fhd
72 | HD -> R.id.video_hd
73 | SD -> R.id.video_sd
74 | }
75 |
76 | fun toResolutionOption(): ResolutionOption {
77 | return ResolutionOption(buttonViewId = getButtonId(), imageDrawableResId = getImageResId())
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/receivers/HardwareShutterReceiver.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.receivers
2 |
3 | import android.content.BroadcastReceiver
4 | import android.content.Context
5 | import android.content.Intent
6 | import org.fossify.camera.activities.MainActivity
7 |
8 | class HardwareShutterReceiver : BroadcastReceiver() {
9 |
10 | override fun onReceive(context: Context, intent: Intent) {
11 | Intent(context.applicationContext, MainActivity::class.java).apply {
12 | addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
13 | context.startActivity(this)
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/camera/views/FocusCircleView.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.camera.views
2 |
3 | import android.content.Context
4 | import android.graphics.Canvas
5 | import android.graphics.Paint
6 | import android.os.Handler
7 | import android.view.ViewGroup
8 | import org.fossify.commons.extensions.getProperPrimaryColor
9 |
10 | class FocusCircleView(context: Context) : ViewGroup(context) {
11 | private val CIRCLE_RADIUS = 50f
12 | private val CIRCLE_DURATION = 500L
13 |
14 | private var mDrawCircle = false
15 | private var mHandler: Handler
16 | private var mPaint: Paint
17 | private var mLastCenterX = 0f
18 | private var mLastCenterY = 0f
19 |
20 | init {
21 | setWillNotDraw(false)
22 | mHandler = Handler()
23 | mPaint = Paint().apply {
24 | style = Paint.Style.STROKE
25 | color = context.getProperPrimaryColor()
26 | strokeWidth = 2f
27 | }
28 | }
29 |
30 | fun setStrokeColor(color: Int) {
31 | mPaint.color = color
32 | }
33 |
34 | fun drawFocusCircle(x: Float, y: Float) {
35 | mLastCenterX = x
36 | mLastCenterY = y
37 | toggleCircle(true)
38 |
39 | mHandler.removeCallbacksAndMessages(null)
40 | mHandler.postDelayed({
41 | toggleCircle(false)
42 | }, CIRCLE_DURATION)
43 | }
44 |
45 | private fun toggleCircle(show: Boolean) {
46 | mDrawCircle = show
47 | invalidate()
48 | }
49 |
50 | override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {}
51 |
52 | override fun onDraw(canvas: Canvas) {
53 | super.onDraw(canvas)
54 | if (mDrawCircle) {
55 | canvas.drawCircle(mLastCenterX, mLastCenterY, CIRCLE_RADIUS, mPaint)
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/app/src/main/res/color/camera_option_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/color/tab_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_camera_front_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_camera_rear_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_flash_auto_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_flash_off_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_flash_on_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_flashlight_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_monochrome.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_photo_1x1_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_photo_4x3_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_photo_full_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_settings_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_shutter_animated.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
13 |
14 |
18 |
19 |
22 |
23 |
27 |
28 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_shutter_timer_cancel.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
11 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_shutter_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_timer_10_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_timer_3_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_timer_5_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_timer_off_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_video_fhd_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_video_hd_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_video_rec_animated.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
11 |
12 |
16 |
17 |
20 |
21 |
25 |
26 |
30 |
31 |
35 |
36 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_video_rec_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_video_sd_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_video_uhd_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shutter_pressed_to_unpressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
16 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shutter_unpressed_to_pressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
16 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tab_indicator.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/video_rec_idle_to_record.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
16 |
17 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/video_rec_pressed_to_unpressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
16 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/video_rec_record_to_idle.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
16 |
17 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/video_rec_unpressed_to_pressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
16 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_flash.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
20 |
21 |
28 |
29 |
36 |
37 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_timer.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
20 |
21 |
28 |
29 |
36 |
37 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_top.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
19 |
20 |
29 |
30 |
39 |
40 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/timer_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_amber.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue_grey.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_brown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_cyan.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_orange.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_purple.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_grey_black.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_indigo.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_green.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_lime.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_orange.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_pink.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_purple.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_red.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_teal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_yellow.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/beep.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/app/src/main/res/raw/beep.mp3
--------------------------------------------------------------------------------
/app/src/main/res/raw/beep_2_secs.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/app/src/main/res/raw/beep_2_secs.mp3
--------------------------------------------------------------------------------
/app/src/main/res/values-az/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Kamera
4 | Kamera əlçatan deyil
5 | Kameranı açarkən xəta baş verdi
6 | Video faylını yaradarkən xəta baş verdi
7 | Video moduna keçərkən xəta baş verdi
8 | Xəta baş verdi, saxlama qovluğu daxili yaddaşa keçdi
9 | Kameranı dəyişərkən xəta baş verdi
10 | Önbaxışa davam etmək üçün şəkilə toxun
11 | Şəkli yaddaşa salmaq olmur
12 | Uyğun görüntü imkanını seçmək olmur
13 | Video yazmaq olmur, xahiş olunur görüntü imkanını dəyişin
14 | Şəkli hansı keyfiyyətdə yaddaşa salmalıyam?
15 | Ümumiyyətlə, özünüzdən asılıdır. Gündəlik istifadə üçün çoxları 75%-80%\'i tövsiyyə edir, hansı ki, bu parametrdə şəkil hələ də yaxşı görünür, amma fayl ölçüsü 100%\'ə nəzərən kiçilmişdir.
16 | Şəkil və videoları burda saxla
17 | Çəkdikdən sonra şəklə önbaxış et
18 | Çəkilmə səsi
19 | Arxa kamera görüntü imkanı
20 | Ön kamera görüntü imkanı
21 | Şəkil
22 | Çəkməzdən əvvəl fokuslan
23 | Səs düymələri ilə çək
24 | Başlanğıcda fənəri söndür
25 | Ön kamera şəkillərini üfüqi döndür
26 | Parametrlər düyməsini göstər
27 | Tətbiqi həmişə Arxa kamerada başlat
28 | Şəklin haqqında əlavələri saxla
29 | Şəkil sıxışdırma keyfiyyəti
30 | Çəkən
31 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/values-b+es+419/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-be/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Камера недаступная
4 | Адбылася памылка доступу да камеры
5 | Адбылася памылка пры стварэнні відэафайла
6 | Не атрымалася пераключыцца ў рэжым відэа
7 | Адбылася памылка, папка захавання зменена на ўнутраную памяць
8 | Збой пераключэння камеры
9 | Націсніце на малюнак, каб аднавіць папярэдні прагляд
10 | Не ўдалося захаваць фота
11 | Не ўдалося задаць правільнае разрозненне
12 | Збой запісу відэа, паспрабуйце выкарыстаць іншае раздзяленне
13 | Камера выкарыстоўваецца іншай праграмай, зачыніце праграму і паўтарыце спробу
14 | Адбылася памылка падчас канфігурацыі камеры
15 | Камера адключана адміністратарам
16 | Уключаны рэжым «Не турбаваць». Адключыце і паўтарыце спробу
17 | Збой фотаздымкі
18 | Збой запісу відэа з-за недахопу памяці
19 | Якую якасць сціску фатаграфій трэба ўсталяваць\?
20 | Гэта залежыць ад вашай мэты. Для агульных мэтаў большасць людзей раяць выкарыстоўваць 75% -80%, калі малюнак па-ранейшаму сапраўды добрага якасці, але Памер файла рэзка памяншаецца ў параўнанні са 100%.
21 | Захаваць фатаграфіі і відэа ў
22 | Паказаць папярэдні прагляд фота пасля здымкі
23 | Гук затвора
24 | Разрозненні задняй камеры
25 | Разрозненні пярэдняй камеры
26 | Фота
27 | Відэа
28 | Сфакусіруйце перад здымкай
29 | Спускаць затвор націсканнем кнопак гучнасці
30 | Уключаць успышку пры запуску
31 | Перавярнуць фатаграфіі франтальнай камеры па гарызанталі
32 | Трымайце кнопкі налад бачнымі
33 | Заўсёды адкрывайце праграму з задняй камерай
34 | Захоўваць метаданые EXIF
35 | Якасць сціску фота
36 | Затвор
37 |
38 |
--------------------------------------------------------------------------------
/app/src/main/res/values-bn-rBD/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-bn/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-br/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Kamera
4 | Mod pakañ
5 | Uc\'hekaat ar berzhded
6 | Bihanaat ar gortozvezh
7 | Dihegerz eo ar c\'hamera
8 | Degouezhet ez eus bet ur fazi en ur haeziñ ar c\'hamera
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values-bs/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ckb/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-cr/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-cy/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Mwyhau ansawdd
4 | Camera dim ar gael
5 | Bu gwall wrth gael at y camera
6 | Bu gwall wrth greu\'r ffeil fideo
7 | Methodd ceisio newid i modd fideo
8 | Bu gwall; newidiwyd y ffolder cadw i\'r storfa fewnol
9 | Methwyd newid camera
10 | Clicia ar y llun i barhau i ddangos
11 | Methwyd â chadw\'r llun
12 | Methwyd â gosod y cydraniad cywir
13 | Methwyd â recordio fideo; rho gynnig ar gydraniad gwahanol
14 | Pa ansawdd cywasgu llun dylwn ei osod?
15 | Mae\'n dibynnu ar dy bwrpas. Ar gyfer defnydd cyffredin, argymhellir defnyddio 75%-80% fel bod safon y llun yn dal i fod yn dda iawn ond bydd maint y ffeil yn dipyn llai na 100%.
16 | Cadw lluniau a fideos i
17 | Dangos rhagolwg o lun ar ôl ei dynnu
18 | Sain caead
19 | Cydraniad y camera cefn
20 | Cydraniad y camera blaen
21 | Llun
22 | Fideo
23 | Ffocysu cyn tynnu\'r llun
24 | Defnyddio botymau sain i dynnu lluniau
25 | Troi\'r fflach i ffwrdd wrth ddechrau
26 | Fflipio lluniau\'r camera blaen yn llorweddol
27 | Cadw\'r botymau gosodiadau mewn golwg
28 | Agor yr ap gyda\'r camera cefn bob tro
29 | Cadw metaddata lluniau
30 | Ansawdd cywasgiad lluniau
31 | Caead
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/values-da/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Kamera
4 | Kamera ikke tilgængeligt
5 | Kunne ikke få adgang til kameraet
6 | Kunne ikke oprette videofilen
7 | Kunne ikke skifte til videotilstand
8 | Der opstod en fejl, fordi lagringsmappen blev ændret til intern lagring
9 | Kunne ikke skifte kamera
10 | Klik på billedet for at genoptage forhåndsvisning
11 | Fotoet kunne ikke gemmes
12 | Indstilling af korrekt opløsning mislykkedes
13 | Videooptagelse mislykkedes. Prøv at bruge en anden opløsning
14 | Kameraet er i brug af en anden app, luk venligst appen og prøv igen
15 | Der opstod en fejl under konfigurationen af kameraet
16 | Kameraet er deaktiveret af administratoren
17 | Tilstanden for ikke forstyrre er aktiveret. Deaktiver den og prøv igen
18 | Fotooptagelse mislykkedes
19 | Videooptagelse mislykkedes på grund af utilstrækkelig lagerplads
20 | Hvilken fotokomprimeringskvalitet skal jeg anvende\?
21 | Det afhænger af dit mål. Til almindelige formål anbefaler de fleste at bruge 75-80 %, hvor billedet stadig har en rigtig god kvalitet, men hvor filstørrelsen er reduceret drastisk i forhold til 100 %.
22 | Gem fotos og videoer til
23 | Vis en forhåndsvisning af et foto efter optagelse
24 | Lukkerlyd
25 | Opløsninger for kamera på bagsiden
26 | Opløsninger for kamera på forsiden
27 | Foto
28 | Fokuser før optagelse
29 | Brug lydstyrkeknapperne som lukker
30 | Slå blitz fra ved opstart
31 | Vend billeder fra frontkameraet vandret
32 | Lad indstillingsknapperne være synlige
33 | Åbn altid appen med kameraet på bagsiden
34 | Gem Exif-metadata i fotos
35 | Fotokomprimeringskvalitet
36 | Lukker
37 | Minimér ventetid
38 | Maksimér kvalitet
39 | Skift mellem foto- og videotilstand
40 | Skift opløsning
41 |
--------------------------------------------------------------------------------
/app/src/main/res/values-en-rGB/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-en-rIN/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-es-rUS/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-eu/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Kamara
4 | Kaptura-modua
5 | Kalitatea maximizatu
6 | Latentzia minimizatu
7 | Kamera ez dago erabilgarri
8 | Errore bat gertatu da kamerara sartzean
9 | Errore bat gertatu da bideoa sortzean
10 | Bideo-modura aldatzeak huts egin du
11 | Errore bat gertatu da, karpeta gordetzea barne-biltegiratzera aldatu da
12 | Kamera aldaketak huts egin du
13 | Egin klik irudian aurrebista berrabiarazteko
14 | Argazkia ezin izan da gorde
15 | Bereizmen egokia ezartzeak huts egin du
16 | Bideo-grabazioak huts egin du, saiatu beste bereizmen bat erabiltzen
17 | Kamera beste aplikazio bat erabiltzen ari da, mesedez, itxi aplikazioa eta saiatu berriro
18 |
--------------------------------------------------------------------------------
/app/src/main/res/values-fa/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-fil/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ia/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Camera
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-is/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ja/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | カメラ
4 | 撮影モード
5 | 品質の最大化
6 | 遅延時間の最小化
7 | カメラは利用できません
8 | カメラへのアクセス時にエラーが発生しました
9 | 動画ファイルの作成時にエラーが発生しました
10 | 動画モードへの切り替えに失敗しました
11 | エラーが発生しました。保存フォルダは内部ストレージに変更されました
12 | カメラの切り替えに失敗しました
13 | プレビューを再開するには画像をタップ
14 | 写真を保存できませんでした
15 | 適切な解像度の設定に失敗しました
16 | 動画の記録に失敗しました。別の解像度を試してください
17 | カメラは別のアプリで使用されています。アプリを閉じて、もう一度やり直してください
18 | カメラの設定中にエラーが発生しました
19 | カメラは管理者によって無効にされています
20 | サイレントモードが有効になっています。 無効にしてから、もう一度やり直してください
21 | 写真の撮影に失敗しました
22 | ストレージが不足しているため、動画の記録に失敗しました
23 | 写真/動画モードの切り替え
24 | 解像度の変更
25 | 最後に撮影したメディアを表示
26 | 前面/背面カメラの切り替え
27 | フラッシュライトモードへ切り替え
28 | タイマーモードへ切り替え
29 | 写真の圧縮品質はどのくらいに設定すればよいですか?
30 | これはあなたの求める目標によります。一般的な用途には、75%~80%の使用をおすすめします。この設定でも画像は十分に良い品質で、100%と比べてファイルサイズを大幅に削減することができます。
31 | 写真と動画の保存先
32 | 撮影後に写真のプレビューを表示
33 | シャッター音
34 | 背面カメラ解像度
35 | 前面カメラ解像度
36 | 写真
37 | 動画
38 | 撮影前に再度焦点を合わせる
39 | 音量ボタンで撮影
40 | 起動時にライトをオンにする
41 | 前面カメラの写真を左右に反転
42 | 設定ボタンを表示したままにする
43 | 常に背面カメラでアプリを開く
44 | 写真のEXIFデータを保存する
45 | 写真の圧縮品質
46 | シャッター
47 | 写真と動画の位置情報を保存
48 |
--------------------------------------------------------------------------------
/app/src/main/res/values-kn/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ko/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 카메라
4 | 카메라를 사용할 수 없습니다
5 | 카메라에 액세스하는 중에 오류가 발생했습니다
6 | 비디오 파일을 만드는 중 오류가 발생했습니다
7 | 비디오 모드로 전환하지 못했습니다
8 | 오류가 발생하여 저장폴더를 내부 저장소로 변경하였습니다
9 | 카메라 전환에 실패했습니다
10 | 미리보기를 다시 시작하려면 이미지를 클릭하십시오
11 | 사진을 저장할 수 없습니다
12 | 해상도 설정에 실패했습니다
13 | 다른 앱에서 카메라를 사용 중입니다. 앱을 닫고 다시 시도하십시오
14 | 카메라를 구성하는 동안 오류가 발생했습니다
15 | 관리자가 카메라를 비활성화했습니다
16 | 방해 금지 모드가 활성화되었습니다. 비활성화한 후 다시 시도하십시오
17 | 사진 캡처 실패
18 | 저장 공간이 부족하여 비디오 녹화에 실패했습니다
19 | 사진 압축품질을 무엇으로 설정해야 하나요?
20 | 압축품질은 촬영용도에 따라 달라질 수 있지만, 일반적으로 75% -80%를 사용하도록 권고합니다. 75% -80%로 압축 품질을 설정하면 파일 크기는 100%에 비해 크게 줄어듭니다.
21 | 사진 및 비디오 저장 위치
22 | 캡처 후 사진 미리보기 표시
23 | 셔터 소리
24 | 후면 카메라 해상도
25 | 전면 카메라 해상도
26 | 사진
27 | 비디오
28 | 캡처 전에 초점 맞추기
29 | 볼륨 버튼을 셔터로 사용
30 | 시작시 플래시 끄기
31 | 전면 카메라 좌우 반전
32 | 설정 버튼 표시 유지
33 | 항상 후면카메라로 실행
34 | 사진 exif 메타 데이터 저장
35 | 사진 압축 품질
36 | 지연 시간 최소화
37 | 사진/비디오 모드 전환
38 | 플래시 모드 전환
39 | 캡처 모드
40 | 최고 품질
41 | 비디오 녹화에 실패했습니다. 다른 해상도를 사용해보십시오
42 | 해상도 변경
43 | 전면/후면 카메라 전환
44 | 마지막으로 캡처한 미디어 보기
45 | 타이머 모드 전환
46 | 사진과 비디오 위치 저장
47 | 셔터
48 |
--------------------------------------------------------------------------------
/app/src/main/res/values-kr/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ltg/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-lv/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-mk/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ms/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-my/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-nb-rNO/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Kamera
4 | Kamera utilgjengelig
5 | Fikk ikke tilgang til kameraet
6 | Kunne ikke opprette videofilen
7 | Kunne ikke bytte til videomodus
8 | En feil oppstod fordi lagringsmappen ble endret til internlager
9 | Kunne ikke bytte kamera
10 | Klikk på bildet for å gjenoppta forhåndsvisning
11 | Kunne ikke lagre bildet
12 | Kunne ikke sette riktig oppløsning
13 | Videoopptak mislyktes. Prøv å bruke en annen oppløsning.
14 | Kameraet er i bruk av en annen app, lukk appen og prøv igjen
15 | Det oppstod en feil under innstilling av kameraet
16 | Kameraet er deaktivert av administratoren
17 | Ikke forstyrr-modus er aktivert. Deaktiver og prøv på nytt
18 | Kunne ikke ta bilde
19 | Videoinnspilling mislyktes på grunn av utilstrekkelig lagring
20 | Aktivere/deaktivere bilde-/videomodus
21 | Endre oppløsning
22 | Vis medier som ble tatt sist
23 | Veksle mellom front-/bakkamera
24 | Aktivere/deaktivere lommelykt modus
25 | Hvilket bildekomprimeringsnivå bør jeg bruke\?
26 | Det avhenger av hva du vil. Til alminnelige formål anbefales 75%-80%. Fremdeles god kvalitet, men vesentlig redusert filstørrelse sammenlignet med 100%.
27 | Lagre bilder og videoer i
28 | Vis bildeforhåndsvisning etter knipsing
29 | Lukkerlyd
30 | Oppløsninger for kamera på baksiden
31 | Frontkameraoppløsninger
32 | Bilde
33 | Fokuser før knipsing
34 | Bruk lydstyrkeknapper som lukker
35 | Skru av blitz ved programstart
36 | Vend frontkamerabilder vannrett
37 | Behold innstillingsknappene synlig
38 | Alltid åpne programmet med kameraet på baksiden
39 | Lagre Exif-metadata i bilder
40 | Bildekompresjonskvalitet
41 | Lukker
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ne/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | क्यामेरा
4 | क्यामेरा उपलब्ध छैन
5 | क्यामेरा पहुचहुनमा समस्या आयो
6 | भिडियो फाईल सिर्जना हुनमा समस्या आयो
7 | भिडियो मोड जडानगरन असक्षम भयो
8 | केहि त्रुटि देखियो, बचत फोल्डर आन्तरिक स्टोरेजमा परिवर्तन हुने
9 | क्यामेरा खुल्न सकेन
10 | हेर्नको लागि तस्बिरमा क्लिक गर्नुहोस
11 | फोटो बचत हुन सक्दैन
12 | ठिक रिजोलुसनमा स्थापित गर्न असफल भयो
13 | भिडियो रेकर्डिङ हुन सकेन, फरक रिजोलुसनमा राखेर प्रयास गर्नुहोस
14 | मैले कस्तो फोटो खदाईको गुणस्तर स्थापित गर्नुपर्छ ?
15 | यो तपाईको चाहानामा भर पर्छ । सामान्यतया सबैले 75%-80% मा प्रयोग गर्छन, जब तस्बिर राम्रो गुणस्तरको छ, तर 100% को तुलनामा फाईल साईज अस्वभाविक रुपले घट्छ
16 | फोटो र भिडियो यहाँ बचत गर्नुहोस
17 | खिचेपछि फोटो देखाउनुहोस
18 | खिच्ने आवाज
19 | क्यामेरा रिजोलुसनमा फर्कनुहोस
20 | अगाडिको क्यामेराको रिजोनुसन
21 | फोटो
22 | भिडियो
23 | खिच्नुभन्दा पहिले फोकस हुने
24 | भोलुम बटन फोटो खिच्नको लागि प्रयोग गर्ने
25 | शुरुमा फल्यास बन्द हुने
26 | सेटिङलाई देखिनेगरि राख्नुहोस
27 | सधै यो एप खोल्दा पछाडिको क्यामेरा प्रयोग हुने
28 | फोटो बचत exif मेटाडेटा
29 | फोटो खदाईको गुणस्तर
30 | खिच्ने
31 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/values-or/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-pa-rPK/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | تصویر کھچݨی
4 | غلطی آئی اے، فوٹو کھچ نہیں سکدی
5 | فوٹو
6 | ویڈیو
7 | ایکسیف میٹاڈیٹا سامبھو
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values-pa/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sat/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-si/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sw600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 64dp
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ta/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-te/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-th/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-zgh/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-zh-rCN/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 相机
4 | 拍照模式
5 | 最高画质
6 | 最小延迟
7 | 相机不可用
8 | 访问相机出错
9 | 创建视频文件出错
10 | 切换至视频模式失败
11 | 发生错误,保存文件夹改为内置存储
12 | 切换相机失败
13 | 点击图像来恢复预览
14 | 无法保存照片
15 | 设定分辨率失败
16 | 视频录制失败,将尝试其他分辨率
17 | 其他应用正在使用相机,请关闭该应用并重试
18 | 配置相机时出错
19 | 相机被管理员禁用
20 | 勿扰模式处于开启状态。 请禁用并重试
21 | 照片拍摄失败
22 | 由于存储空间不足,视频录制失败
23 | 切换照片/视频模式
24 | 更改分辨率
25 | 查看上次拍的媒体文件
26 | 切换前置/后置摄像头
27 | 切换闪光灯模式
28 | 切换计时器模式
29 | 我应该选用怎样的照片压缩率呢?
30 | 这取决于您的目的。对大多数人的一般用途来说,建议使用 75%-80%,此时图片仍有不错的品质,而文件大小相比 100% 时大幅减小。
31 | 保存照片和视频至
32 | 拍摄后显示照片预览
33 | 快门声音
34 | 后置相机分辨率
35 | 前置相机分辨率
36 | 照片
37 | 视频
38 | 拍摄前对焦
39 | 音量键作为快门
40 | 启动时关闭闪光灯
41 | 前置相机水平翻转(镜像画面)
42 | 设置按钮保持可见
43 | 打开应用时切换到后置相机
44 | 保存照片 EXIF 元数据
45 | 保存照片和视频位置
46 | 照片压缩品质
47 | 快门
48 |
49 |
--------------------------------------------------------------------------------
/app/src/main/res/values-zh-rHK/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-zh-rTW/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 相機
4 | 拍攝模式
5 | 極致畫質
6 | 最短延遲
7 | 相機無法使用
8 | 開啟相機發生錯誤
9 | 建立影片檔案發生錯誤
10 | 切換到錄影模式失敗
11 | 發生錯誤,儲存資料夾改為內部儲存空間
12 | 切換拍照模式失敗
13 | 點擊圖片回到拍攝預覽
14 | 相片無法儲存
15 | 設定合適解析度失敗
16 | 影片錄製失敗,試著使用不同的解析度
17 | 其他程式正在使用相機,請將那個程式關閉後再試一次
18 | 配置相機時出錯
19 | 相機已由管理者停用
20 | 零打擾模式已啟用,請將其停用後再試一次
21 | 拍照失敗
22 | 儲存空間不足,錄影失敗
23 | 我應該設定什麼相片壓縮品質?
24 | 選擇是否要減少延遲時間需視您的目標而定。一般情況下,多數人會推薦設定在 75%-80%,此時您仍能獲得出色的圖像品質,但文件大小將大幅度降低,相較於使用 100% 的設定。
25 | 相片和影片儲存位置
26 | 拍攝後顯示相片預覽
27 | 快門聲音
28 | 後鏡頭解析度
29 | 前鏡頭解析度
30 | 相片
31 | 影片
32 | 拍攝前對焦
33 | 使用音量鍵作為快門
34 | 啟動時關閉閃光燈
35 | 水平翻轉前相機相片
36 | 設定按鈕不消失
37 | 開啟程式總是用後鏡頭
38 | 儲存相片EXIF資訊
39 | 相片壓縮品質
40 | 快門
41 | 變更解析度
42 | 查看最近拍攝的媒體
43 | 切換前後鏡頭
44 | 切換手電筒模式
45 | 切換計時器模式
46 | 儲存照片和影片位置
47 | 切換照片/影片模式
48 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #2e000000
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 56dp
4 | 72dp
5 | 48dp
6 | 24dp
7 | 180sp
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values/donottranslate.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | org.fossify.camera
4 | Fossify Camera
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/values/integers.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 200
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
13 |
14 |
27 |
28 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/provider_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | alias(libs.plugins.android).apply(false)
3 | alias(libs.plugins.kotlinAndroid).apply(false)
4 | alias(libs.plugins.detekt).apply(false)
5 | }
6 |
--------------------------------------------------------------------------------
/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | json_key_file("fastlane/fastlane.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
2 | package_name("org.fossify.camera") # e.g. com.krausefx.app
3 |
--------------------------------------------------------------------------------
/fastlane/Fastfile:
--------------------------------------------------------------------------------
1 | default_platform(:android)
2 |
3 | platform :android do
4 | desc 'Run unit & instrumentation tests'
5 | lane(:test) { test_android }
6 |
7 | desc 'Build & deploy AAB to Google Play (includes metadata)'
8 | lane(:deploy) { deploy_android }
9 |
10 | desc 'Push Play Store metadata'
11 | lane(:metadata) { metadata_android }
12 | end
13 |
--------------------------------------------------------------------------------
/fastlane/README.md:
--------------------------------------------------------------------------------
1 | fastlane documentation
2 | ----
3 |
4 | # Installation
5 |
6 | Make sure you have the latest version of the Xcode command line tools installed:
7 |
8 | ```sh
9 | xcode-select --install
10 | ```
11 |
12 | For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
13 |
14 | # Available Actions
15 |
16 | ## Android
17 |
18 | ### android test
19 |
20 | ```sh
21 | [bundle exec] fastlane android test
22 | ```
23 |
24 | Run unit & instrumentation tests
25 |
26 | ### android deploy
27 |
28 | ```sh
29 | [bundle exec] fastlane android deploy
30 | ```
31 |
32 | Build & deploy AAB to Google Play (includes metadata)
33 |
34 | ### android metadata
35 |
36 | ```sh
37 | [bundle exec] fastlane android metadata
38 | ```
39 |
40 | Push Play Store metadata
41 |
42 | ----
43 |
44 | This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
45 |
46 | More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
47 |
48 | The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
49 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ca/full_description.txt:
--------------------------------------------------------------------------------
1 | La Fossify Camera és la vostra aplicació de referència per a capturar els moments de la vida amb precisió i privadesa. Tant si esteu capturant fotos com gravant vídeos, aquesta aplicació de càmera totalment personalitzable i respectuosa amb la privadesa està dissenyada per a satisfer les vostres necessitats.
2 | 📸 LA VOSTRA PRIVADESA, LA NOSTRA PRIORITAT:
3 | Amb l'aplicació Fossify Camera, les vostres dades es mantenen privades. Gaudiu d'una càmera que funciona sense accés a Internet ni permisos intrusius, assegurant que les fotos i vídeos es mantinguin segurs.
4 | 🚀 RENDIMENT PERFECTE:
5 | La Fossify Camera proporciona una interfície fluida i responsiva. Canvieu entre els modes de foto i vídeo, ajusteu el zoom i canvieu entre les càmeres frontals i posteriors a l'instant. Captureu els moments amb zero retard i experimenteu un rendiment suau en tot moment.
6 | 🖼️ PERSONALITZACIÓ COMPLETA:
7 | Personalitzeu tots els aspectes de la vostra experiència amb la càmera. Ajusteu la qualitat de la sortida, personalitzeu el camí de desament i establiu la resolució que s'adapti a les vostres necessitats. Fins i tot podeu personalitzar colors i temes perquè coincideixin amb el vostre estil.
8 | ⚡ CONTROLS DINÀMICS:
9 | Canvieu la configuració amb facilitat: controleu el flaix, la relació d'aspecte i el zoom directament des de la vista de càmera. L'aplicació està dissenyada per a un accés ràpid, permetent capturar moments de manera eficient, amb controls intuïtius.
10 | 🖼️ MATERIAL DESIGN:
11 | Gaudiu d'una interfície elegant i fàcil d'usar amb el «material design» i un tema dinàmic que s'adapta a les vostres preferències. Tant si utilitzeu l'aplicació durant el dia com a la nit, la Fossify Camera proporciona una experiència suau i intuïtiva.
12 | 🌐 GARANTIA DEL CODI OBERT:
13 | La Fossify Camera està construïda sobre una base de codi obert. Amb el nostre compromís amb la transparència, podeu revisar el codi a GitHub i formar part d'una comunitat que valora la privadesa i la confiança.
14 | La Fossify Camera ofereix tot el que cal per a capturar moments sense esforç respectant la vostra privadesa.
15 | Exploreu més aplicacions de Fossify: https://www.fossify.org
16 | Codi obert: https://www.github.com/FossifyOrg
17 | Uniu-vos a la comunitat a Reddit: https://www.reddit.com/r/Fossify
18 | Connecteu a Telegram: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ca/short_description.txt:
--------------------------------------------------------------------------------
1 | Aplicació de càmera de codi obert per a fotografia ràpida, fàcil i segura
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/cs-CZ/full_description.txt:
--------------------------------------------------------------------------------
1 | Fotoaparát Fossify je vaším spolehlivým pomocníkem pro zachycení životních okamžiků s maximální přesností a ochranou soukromí. Ať už pořizujete fotografie nebo natáčíte videa, tato plně přizpůsobitelná kamera s důrazem na ochranu soukromí je navržena tak, aby splnila vaše požadavky.
2 | 📸 VAŠE SOUKROMÍ, NAŠE PRIORITA:
3 | S Fotoaparátem Fossify zůstávají vaše data soukromá. Užijte si kameru, která funguje bez připojení k internetu a bez rušivých oprávnění, takže vaše fotografie a videa jsou v bezpečí.
4 | 🚀 PLYNULÝ VÝKON:
5 | Fotoaparát Fossify poskytuje hladké a pohotové rozhraní. Rychle přepínejte mezi režimy fotoaparátu a videa, upravujte přiblížení a okamžitě přepínejte mezi přední a zadní kamerou. Zachycujte okamžiky bez prodlev a užívejte si plynulý výkon kdykoliv.
6 | 🖼️ KOMPLETNÍ PŘIZPŮSOBENÍ:
7 | Přizpůsobte si každý detail zážitku s fotoaparátem. Upravte výstupní kvalitu, nastavte cestu pro ukládání a rozlišení podle svých potřeb. Můžete si dokonce upravit barvy a motivy tak, aby odpovídaly vašemu stylu.
8 | ⚡ DYNAMICKÉ OVLÁDÁNÍ:
9 | Snadno přepínejte nastavení – ovládejte blesk, poměr stran a přiblížení přímo z náhledu kamery. Aplikace je navržena pro rychlý přístup, takže můžete zachytit okamžiky efektivně pomocí intuitivního ovládání.
10 | 🖼️ MATERIAL DESIGN:
11 | Užijte si elegantní, uživatelsky přívětivé rozhraní s materiálovým designem a dynamickým motivem, který se přizpůsobuje vašim preferencím. Ať už používáte aplikaci přes den nebo v noci, Fotoaparát Fossify nabízí hladký a intuitivní zážitek.
12 | 🌐 GARANCE OPEN-SOURCE:
13 | Fotoaparát Fossify je postaven na open-source základech. Díky našemu závazku k transparentnosti si můžete prohlédnout kód na GitHubu a být součástí komunity, která si cení soukromí a důvěry.
14 | Fotoaparát Fossify nabízí vše, co potřebujete k zachycení okamžiků bez námahy, při respektování vašeho soukromí.
15 | Prozkoumejte další aplikace Fossify: https://www.fossify.org
16 | Otevřený zdrojový kód: https://www.github.com/FossifyOrg
17 | Připojte se ke komunitě na Redditu: https://www.reddit.com/r/Fossify
18 | Připojte se k Telegramu: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/cs-CZ/short_description.txt:
--------------------------------------------------------------------------------
1 | Lehká open-source aplikace fotoaparátu pro rychlé a snadné fotografování
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify Camera ist die ideale App, um die Momente des Lebens mit Präzision und Privatsphäre festzuhalten. Egal, ob du Fotos oder Videos aufnimmst, diese vollständig anpassbare, datenschutzfreundliche Kamera-App wurde entwickelt, um deine Bedürfnisse zu erfüllen.
2 | 📸 DEIN DATENSCHUTZ, UNSERE PRIORITÄT:
3 | Mit der Fossify Kamera-App bleiben deine Daten privat. Genieße eine Kamera, die ohne Internetzugang oder aufdringliche Berechtigungen funktioniert, damit deine Fotos und Videos sicher bleiben.
4 | 🚀 NAHTLOSE LEISTUNG:
5 | Fossify Camera bietet eine flüssige und reaktionsschnelle Oberfläche. Wechsele zwischen Foto- und Videomodus, passe den Zoom an und schalte im Handumdrehen zwischen Front- und Rückkamera um. Halte Momente ohne Verzögerung fest und erlebe jederzeit eine reibungslose Leistung.
6 | 🖼️ VOLLSTÄNDIG ANPASSBAR:
7 | Passe jeden Aspekt deiner Kameraerfahrung an. Passe die Ausgabequalität an, lege den Speicherpfad fest, und stelle die Auflösung nach deinen Wünschen ein. Du kannst sogar Farben und Farbschemas anpassen, um deinen Stil zu treffen.
8 | ⚡ DYNAMISCHE STEUERUNG:
9 | Steuere Blitz, Seitenverhältnis und Zoom direkt in der Kameraansicht. Die App ist für den schnellen Zugriff konzipiert und ermöglicht es dir, Momente mit intuitiven Steuerelementen effizient festzuhalten.
10 | 🖼️ MATERIAL DESIGN:
11 | Genieße eine schlanke, benutzerfreundliche Oberfläche mit Material Design und einem dynamischen Farbschema, das sich deinen Vorlieben anpasst. Egal, ob du die App tagsüber oder nachts verwendest, Fossify Camera bietet ein reibungsloses und intuitives Erlebnis.
12 | 🌐 OPEN-SOURCE-SICHERHEIT:
13 | Fossify Camera wurde auf einer Open-Source-Basis entwickelt. Mit unserer Verpflichtung zur Transparenz kannst du den Code auf GitHub überprüfen und Teil einer Gemeinschaft sein, die Privatsphäre und Vertrauen schätzt.
14 | Fossify Camera bietet alles, was du brauchst, um Momente mühelos einzufangen und dabei deine Privatsphäre zu respektieren.
15 | Entdecke weitere Apps von Fossify: https://www.fossify.org
16 | Open-Source-Code: https://www.github.com/FossifyOrg
17 | Tritt der Community auf Reddit bei: https://www.reddit.com/r/Fossify
18 | Verbinde dich auf Telegram: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/short_description.txt:
--------------------------------------------------------------------------------
1 | Schlanke quelloffene App für schnelles, einfaches und sicheres Fotografieren
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/1.txt:
--------------------------------------------------------------------------------
1 | * Initial release.
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/2.txt:
--------------------------------------------------------------------------------
1 | * Fix app name in metadata
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/3.txt:
--------------------------------------------------------------------------------
1 | Changed:
2 |
3 | • Updated translations
4 | • Marked app as beta
5 |
6 | Fixed:
7 |
8 | • All camera buttons now rotate properly on device rotation
9 | • Buttons are now properly updated switching between photo and video modes
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify Camera is your go-to app for capturing life’s moments with precision and privacy. Whether you’re snapping photos or recording videos, this fully customizable, privacy-respecting camera app is designed to meet your needs.
2 | 📸 YOUR PRIVACY, OUR PRIORITY:
3 | With the Fossify Camera app, your data remains private. Enjoy a camera that works without internet access or intrusive permissions, ensuring your photos and videos stay secure.
4 | 🚀 SEAMLESS PERFORMANCE:
5 | Fossify Camera provides a fluid and responsive interface. Switch between photo and video modes, adjust zoom, and toggle between front and rear cameras instantly. Capture moments with zero lag and experience smooth performance at all times.
6 | 🖼️ COMPLETE CUSTOMIZATION:
7 | Personalize every aspect of your camera experience. Adjust the output quality, customize the save path, and set the resolution to suit your needs. You can even customize colors and themes to match your style.
8 | ⚡ DYNAMIC CONTROLS:
9 | Toggle settings with ease—control flash, aspect ratio, and zoom directly from the camera view. The app is designed for quick access, letting you capture moments efficiently, with intuitive controls.
10 | 🖼️ MATERIAL DESIGN:
11 | Enjoy a sleek, user-friendly interface with material design and a dynamic theme that adapts to your preferences. Whether you're using the app during the day or at night, Fossify Camera provides a smooth and intuitive experience.
12 | 🌐 OPEN-SOURCE ASSURANCE:
13 | Fossify Camera is built on an open-source foundation. With our commitment to transparency, you can review the code on GitHub and be part of a community that values privacy and trust.
14 | Fossify Camera offers everything you need to capture moments effortlessly while respecting your privacy.
15 | Explore more Fossify apps: https://www.fossify.org
16 | Open-Source Code: https://www.github.com/FossifyOrg
17 | Join the community on Reddit: https://www.reddit.com/r/Fossify
18 | Connect on Telegram: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/5_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/phoneScreenshots/5_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/6_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/phoneScreenshots/6_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/1_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/tenInchScreenshots/1_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/2_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/tenInchScreenshots/2_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/3_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/tenInchScreenshots/3_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/4_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/tenInchScreenshots/4_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/5_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/tenInchScreenshots/5_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/6_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/fastlane/metadata/android/en-US/images/tenInchScreenshots/6_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Lightweight open-source camera app for quick, easy, and secure photography
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Fossify Camera Beta
--------------------------------------------------------------------------------
/fastlane/metadata/android/eo/short_description.txt:
--------------------------------------------------------------------------------
1 | Malpeza malfermitkoda kamerao por rapida, facila kaj sekura fotografio
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es-ES/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify Camera es tu aplicación ideal para capturar los momentos de tu vida con precisión y privacidad. Ya sea que estés tomando fotos o grabando videos, esta aplicación de cámara totalmente personalizable y que respeta la privacidad está diseñada para satisfacer tus necesidades.
2 | 📸 SU PRIVACIDAD, NUESTRA PRIORIDAD:
3 | Con la aplicación Fossify Camera, tus datos se mantienen privados. Disfruta de una cámara que funciona sin acceso a Internet ni permisos intrusivos, lo que garantiza que tus fotos y videos se mantengan seguros.
4 | 🚀 RENDIMIENTO PERFECTO:
5 | Fossify Camera ofrece una interfaz fluida y con capacidad de respuesta. Cambia entre los modos de fotografía y video, ajusta el zoom y alterna entre las cámaras frontal y trasera al instante. Captura momentos sin demoras y disfruta de un rendimiento fluido en todo momento.
6 | 🖼️ PERSONALIZACIÓN COMPLETA:
7 | Personaliza cada aspecto de tu experiencia con la cámara. Ajusta la calidad de salida, personaliza la ruta de guardado y establece la resolución según tus necesidades. Incluso puedes personalizar colores y temas para que combinen con tu estilo.
8 | ⚡ CONTROLES DINÁMICOS:
9 | Cambie la configuración con facilidad: controle el flash, la relación de aspecto y el zoom directamente desde la vista de la cámara. La aplicación está diseñada para un acceso rápido, lo que le permite capturar momentos de manera eficiente, con controles intuitivos.
10 | 🖼️ DISEÑO DE MATERIALES:
11 | Disfruta de una interfaz elegante y fácil de usar con diseño de materiales y un tema dinámico que se adapta a tus preferencias. Ya sea que uses la aplicación durante el día o la noche, Fossify Camera ofrece una experiencia fluida e intuitiva.
12 | 🌐 GARANTÍA DE CÓDIGO ABIERTO:
13 | Fossify Camera está construida sobre una base de código abierto. Con nuestro compromiso con la transparencia, puedes revisar el código en GitHub y ser parte de una comunidad que valora la privacidad y la confianza.
14 | Fossify Camera ofrece todo lo que necesitas para capturar momentos sin esfuerzo y respetando tu privacidad.
15 | Explora más aplicaciones de Fossify: https://www.fossify.org
16 | Código fuente abierto: https://www.github.com/FossifyOrg
17 | Únase a la comunidad en Reddit: https://www.reddit.com/r/Fossify
18 | Conéctate en Telegram: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es-ES/short_description.txt:
--------------------------------------------------------------------------------
1 | Cámara ligera de código abierto para una fotografía rápida, fácil y segura
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/et/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify kaamera on sinu ideaalne rakendus, et jäädvustada elu hetki täpselt ja privaatselt. See täielikult kohandatav ja privaatsust austav kaamerarakendus on loodud vastavalt sinu vajadustele, olenemata sellest, kas pildistad fotosid või salvestad videoid.
2 | 📸 SINU PRIVAATSUS ON MEIE PRIORITEET:
3 | Fossify Camera rakenduse abil jäävad sinu andmed privaatseks. Kasuta kaamerat, mis töötab ilma internetiühenduse või pealetükkivate õiguste eeldamiseta, tagades, et sinu fotod ja videod jäävad turvaliseks.
4 | 🚀 SUJUV TOIMIMINE:
5 | Fossify Camera pakub sujuvat ja tundlikku kasutajaliidest. Vaheta foto- ja videorežiimide vahel, reguleeri suumi ning vaheta esi- ja tagakaamera vahel koheselt. Jäädvusta hetki nullilähedase viivitusega ja koge alati sujuvat jõudlust.
6 | 🖼️ TÄIELIK KOHANDATAVUS:
7 | Muuda kaamera igatpidi sinule sobivaks. Muuda väljundi kvaliteeti, kohanda salvestuskausta ning määra resolutsioon vastavalt oma vajadustele. Loomulikult on värvid ja kujundus kohandatavad vastavaks sinu soovidele.
8 | ⚡ DÜNAAMILINE JUHTIMINE:
9 | Seadistuste muutmine on lihtne - välklambi kasutamine, kuvasuhe ja suum on juhitavad otse kaameravaatest. Rakendus on loodud kiireks kasutamiseks, võimaldades jäädvustada sulle olulisi hetki tõhusalt ja seda intuitiivse seadistamisega.
10 | 🖼️ „MATERIAL DESIGN“ KUJUNDUSKEEL:
11 | Naudi elegantset ja kasutajasõbralikku kasutajaliidest, mis põhineb „Material design“ kujunduskeelel ja dünaamilistel kujundusel, mis kohandub vastavalt sinu eelistustele. Olenemata sellest, kas kasutad rakendust päeval või öösel, pakub Fossify Kaamera sujuvat ja intuitiivset kasutuskogemust.
12 | 🌐 OPEN-SOURCE ASSURANCE:
13 | Fossify kaamera põhineb avatud lähtekoodil. Tänu meie läbipaistvusele saad tutvuda lähtekoodiga GitHubis ja olla osa kogukonnast, mis väärtustab privaatsust ja usaldust.
14 | Fossify kaamera tagab sulle kõik, mis on vajalik hetkede tõhusaks jäädvustamiseks privaatselt.
15 | Kõik Fossify rakendused: https://www.fossify.org
16 | Avatud lähtekood: https://www.github.com/FossifyOrg
17 | Liitu kogukonnaga Redditis: https://www.reddit.com/r/Fossify
18 | Suhtle Telegramis: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/et/short_description.txt:
--------------------------------------------------------------------------------
1 | Avatud lähtekoodiga kaamera kiireks, mugavaks ja turvaliseks pildistamiseks
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr-FR/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify Camera est votre application incontournable pour capturer les moments de la vie avec précision et confidentialité. Que vous preniez des photos ou enregistriez des vidéos, cette application caméra entièrement personnalisable et respectueuse de la vie privée est conçue pour répondre à tous vos besoins.
2 | 📸 VOTRE VIE PRIVÉE, NOTRE PRIORITÉ :
3 | Avec l'application Fossify Camera, vos données restent privées. Profitez d'une caméra qui fonctionne sans accès Internet ni autorisations intrusives, garantissant que vos photos et vidéos restent sécurisées.
4 | 🚀 PERORMANCE A TOUT MOMENT :
5 | Fossify Camera offre une interface fluide et réactive. Alternez facilement entre les modes photo et vidéo, ajustez le zoom et passez instantanément entre les caméras avant et arrière. Capturez des moments sans délai et profitez de performances fluides à tout moment.
6 | 🖼️ PERSONNALISATION COMPLÈTE :
7 | Personnalisez chaque aspect de votre expérience avec la caméra : ajustez la qualité de sortie, personnalisez l'emplacement de sauvegarde et définissez la résolution selon vos besoins. Vous pouvez même adapter les couleurs et les thèmes à votre style.
8 | ⚡ CONTRÔLES DYNAMIQUES :
9 | Modifiez les paramètres en toute simplicité : contrôlez le flash, le rapport d'aspect et le zoom directement depuis la vue de la caméra. L'application est avec des accès rapides, vous permettant de capturer efficacement vos moments avec des commandes intuitives.
10 | 🖼️ MATERIAL DESIGN :
11 | Profitez d'une interface utilisateur élégante et conviviale avec une interface Material Design et un thème dynamique qui s'adapte à vos préférences. Que vous utilisiez l'application pendant la journée ou la nuit, Fossify Camera offre une expérience fluide et intuitive.
12 | 🌐 LE RESPECT DE L'OPEN-SOURCE :
13 | Fossify Camera est développée sur une base open-source. Avec notre engagement en faveur de la transparence, vous pouvez consulter le code sur GitHub et rejoindre une communauté qui valorise la confidentialité et la confiance. Fossify Camera vous offre tout ce dont vous avez besoin pour capturer vos moments sans effort tout en respectant votre votre vie privée.
14 | Retrouvez plus d'applications Fossify : https://www.fossify.org
15 | Code open-source : https://www.github.com/FossifyOrg
16 | Rejoignez la communité sur Reddit: https://www.reddit.com/r/Fossify
17 | Contactez nous sur Telegram: https://t.me/Fossify
18 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr-FR/short_description.txt:
--------------------------------------------------------------------------------
1 | Appli photo légère et open-source, rapide, facile et sécurisée
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/gl-ES/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify Camera é a túa elección para facer capturar eses momentos da vida con precisión e privacidade. Sexa gravando vídeos ou tomando fotos, esta aplicación de cámara totalmente personalizable e respectuosa da privacidade está deseñada para satisfacer as túas necesidades.
2 | 📸 A TÚA PRIVACIDADE, A NOSA PRIORIDADE:
3 | Coa app Fossify Camera os datos son privados. Desfruta dunha cámara que funciona sen precisar acceso a internet ou permisos comprometidos, que garda as túas fotos e vídeos de xeito privado e seguro.
4 | 🚀 RENDEMENTO PRECISO:
5 | Fossify Camera ten unha interface fluída e organizada. Cambie entre fotos e vídeo, axuste o zoom, cambie entre as cámaras dianteira e traseiras ao momento. Capture a escena sen retrasos e experimente en todo momento a súa fluidez.
6 | 🖼️ PERSONALIZACIÓN COMPLETA:
7 | Personalice a experiencia de uso da súa cámara. Axuste a calidade da captura, o cartafol onde se garda, así como a resolución que mellor se axeite ao seu caso. Pode tamén personalizar as cores e o decorado para axeitarse ao seu estilo.
8 | ⚡ CONTROIS DINÁMICOS:
9 | Cambie os axustes fácilmente —control do flash, relación de aspecto, e zoom directamente desde a propia interface da cámara. A app está deseñada para un acceso rápido, permitídolle tomar fotos de xeito eficiente, con controis intuitivos.
10 | 🖼️ MATERIAL DESIGN:
11 | Desfrute do deseño amigable e claro de material design e dos decorados dinámicos que se adaptan ás súas preferencias. Tanto se usa a app de día como de noite, Fossify Camera proporciona unha experiencia de uso intuitiva e fluída.
12 | 🌐 GARANTÍA DE CÓDIGO ABERTO:
13 | Fossify Camera baséase en código aberto. Co noso compromiso de transparencia, pode revisar o código en GitHub e formar parte dunha comunidade que valora a privacidade e a confianza.
14 | Fossify Camera ofrécelle todo o que precisa para capturar de xeito simple eses momentos importantes e repectando a súa privacidade.
15 | Coñeza máis sobre Fossify apps: https://www.fossify.org
16 | Código Aberto: https://www.github.com/FossifyOrg
17 | Únase á comunidade en Reddit: https://www.reddit.com/r/Fossify
18 | Contacte en Telegram: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/gl-ES/short_description.txt:
--------------------------------------------------------------------------------
1 | Cámara de código aberto, para facer fotos de xeito rápido, fácil e seguro
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it-IT/full_description.txt:
--------------------------------------------------------------------------------
1 | Fortocamera Fossify è la tua app preferita per catturare i momenti della vita con precisione e privacy. Che tu stia scattando foto o registrando video, questa app per fotocamera completamente personalizzabile e rispettosa della privacy è progettata per soddisfare le tue esigenze.
2 | 📸 LA TUA PRIVACY, LA NOSTRA PRIORITÀ:
3 | Con l'app Fotocamera Fossify, i tuoi dati rimangono privati. Goditi una fotocamera che funziona senza accesso a Internet o autorizzazioni intrusive, garantendo la sicurezza delle tue foto e dei tuoi video.
4 | 🚀 PRESTAZIONI SENZA INTERRUZIONE:
5 | Fotocamera Fossify offre un'interfaccia fluida e reattiva. Passa dalla modalità foto a quella video, regola lo zoom e passa dalla fotocamera anteriore a quella posteriore all'istante. Cattura i momenti senza ritardi e sperimenta prestazioni fluide in ogni momento.
6 | 🖼️ PERSONALIZZAZIONE COMPLETA:
7 | Personalizza ogni aspetto della tua esperienza con la fotocamera. Regola la qualità di output, personalizza il percorso di salvataggio e imposta la risoluzione in base alle tue esigenze. Puoi anche personalizzare colori e temi per adattarli al tuo stile.
8 | ⚡ CONTROLLI DINAMICI:
9 | Cambia le impostazioni con facilità: controlla flash, rapporto d'aspetto e zoom direttamente dalla visualizzazione della fotocamera. L'app è progettata per un accesso rapido, consentendoti di catturare momenti in modo efficiente, con controlli intuitivi.
10 | 🖼️ MATERIAL DESIGN:
11 | Goditi un'interfaccia elegante e intuitiva con material design e un tema dinamico che si adatta alle tue preferenze. Sia che tu stia utilizzando l'app durante il giorno o la notte, Fossify Camera offre un'esperienza fluida e intuitiva.
12 | 🌐 GARANZIA OPEN-SOURCE:
13 | Fotocamera Fossify è costruita su una base open-source. Grazie al nostro impegno per la trasparenza, puoi esaminare il codice su GitHub e far parte di una community che valorizza la privacy e la fiducia.
14 | Fotocamera Fossify offre tutto ciò di cui hai bisogno per catturare momenti senza sforzo, rispettando la tua privacy.
15 | Scopri altre app Fossify: https://www.fossify.org
16 | Codice open source: https://www.github.com/FossifyOrg
17 | Unisciti alla community su Reddit: https://www.reddit.com/r/Fossify
18 | Connettiti su Telegram: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it-IT/short_description.txt:
--------------------------------------------------------------------------------
1 | App fotocamera open source e leggera per una fotografia veloce, facile e sicura
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/iw-IL/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify Camera היא האפליקציה המועדפת על המשתמשים ללכידת רגעים בחיים בדיוק ובפרטיות. בין אם אתם מצלמים תמונות או מקליטים סרטונים, אפליקציית המצלמה הזו, ניתנת להתאמה אישית מלאה ומכבדת פרטיות, מיועדת לענות על הצרכים שלכם.
2 | 📸 הפרטיות שלכם, בראש סדר העדיפויות שלנו:
3 | עם אפליקציית Fossify Camera, הנתונים שלכם נשארים פרטיים. תיהנו ממצלמה שעובדת ללא גישה לאינטרנט או הרשאות פולשניות, מה שמבטיח שהתמונות והסרטונים שלכם יישארו מאובטחים.
4 | 🚀 ביצועים חלקים:
5 | Fossify Camera מספקת ממשק חלק ומגיב. מעבר בין מצבי צילום וידאו, שליטה הזום, ומעבר בין מצלמה קדמית ואחורית באופן מיידי. ללכדו רגעים ללא השהיה וחוו ביצועים חלקים בכל עת.
6 | 🖼️ התאמה אישית מלאה:
7 | התאימו אישית כל היבט בחווית המצלמה שלכם. כוונו את איכות הפלט, התאימו אישית את נתיב השמירה, וקבעו את הרזולוציה בהתאם לצרכים שלכם. אתם יכולים אפילו להתאים אישית צבעים ועיצובים כדי להתאים לסגנון שלכם.
8 | ⚡ בקרות דינמיות:
9 | הפעילו הגדרות בקלות – שלטו בפלאש, יחס גובה-רוחב, וזום ישירות מתצוגת המצלמה. האפליקציה תוכננה לגישה מהירה, ומאפשרת לכם ללכוד רגעים ביעילות, עם בקרות אינטואיטיביות.
10 | 🖼️ עיצוב חומרי (Material Design):
11 | תיהנו מממשק אלגנטי וידידותי למשתמש עם עיצוב חומרי וערכת נושא דינמית המתאימה להעדפותיכם. בין אם אתם משתמשים באפליקציה ביום או בלילה, Fossify Camera מספקת חוויה חלקה ואינטואיטיבית.
12 | 🌐 הבטחת קוד פתוח:
13 | Fossify Camera בנויה על בסיס קוד פתוח. עם המחויבות שלנו לשקיפות, אתם יכולים לסקור את הקוד ב-GitHub ולהיות חלק מקהילה שמעריכה פרטיות ואמון.
14 | Fossify Camera מציעה את כל מה שאתם צריכים כדי ללכוד רגעים ללא מאמץ תוך כיבוד פרטיותכם.
15 | חקרו עוד אפליקציות Fossify: https://www.fossify.org
16 | קוד פתוח: https://www.github.com/FossifyOrg
17 | הצטרפו לקהילה ב-Reddit: https://www.reddit.com/r/Fossify
18 | התחברו בטלגרם: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/iw-IL/short_description.txt:
--------------------------------------------------------------------------------
1 | אפליקציית מצלמה בקוד פתוח קלת משקל לצילום מהיר, קל ומאובטח
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl-PL/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify Camera to Twoja podręczna aplikacja do uchwycenia chwil z życia z precyzją i prywatnością. Niezależnie od tego, czy pstrykasz fotki, czy nagrywasz filmy, ta w pełni konfigurowalna, szanująca prywatność aplikacja aparatu została zaprojektowana tak, aby spełniać Twoje potrzeby.
2 | 📸 TWOJA PRYWATNOŚĆ, NASZ PRIORYTET:
3 | Dzięki aplikacji Fossify Camera Twoje dane pozostają prywatne. Ciesz się aparatem, który działa bez dostępu do Internetu i natrętnych uprawnień, zapewniając bezpieczeństwo Twoich zdjęć i filmów.
4 | 🚀 BEZPROBLEMOWE DZIAŁANIE:
5 | Fossify Camera zapewnia płynny i responsywny interfejs. Przełączaj się między trybami zdjęć i wideo, dostosuj zoom i przełączaj się natychmiast między przednim a tylnym aparatem. Uchwyć chwile bez opóźnień i doświadcz płynnego działania przez cały czas.
6 | 🖼️ PEŁNA PERSONALIZACJA:
7 | Spersonalizuj każdy aspekt swojego doświadczenia z aparatem. Dostosuj jakość pliku, ścieżkę zapisu i ustaw rozdzielczość do swoich potrzeb. Możesz nawet dostosować kolory i motywy, aby pasowały do Twojego stylu.
8 | ⚡ DYNAMICZNE STEROWANIE:
9 | Z łatwością przełączaj ustawienia — kontroluj lampę błyskową, współczynnik proporcji i zoom bezpośrednio z widoku aparatu. Aplikacja została zaprojektowana z myślą o szybkim dostępie, umożliwiając Ci wydajne uchwycenie chwil dzięki intuicyjnym ustawieniom.
10 | 🖼️ MATERIAL DESIGN:
11 | Ciesz się eleganckim, przyjaznym dla użytkownika interfejsem z Material Design i dynamicznym motywem, który dostosowuje się do Twoich preferencji. Niezależnie od tego, czy korzystasz z aplikacji w dzień, czy w nocy, Fossify Camera zapewnia płynne i intuicyjne doświadczenie.
12 | 🌐 GWARANCJA OTWARTEGO ŹRÓDŁA:
13 | Fossify Camera została zbudowana na fundamencie otwartego źródła. Dzięki naszemu zaangażowaniu w przejrzystość możesz przeglądać nasz kod na GitHubie i być częścią społeczności ceniącej sobie prywatność i zaufanie.
14 | Fossify Camera oferuje wszystko, czego potrzebujesz, aby bez wysiłku uchwycić chwile, jednocześnie szanując Twoją prywatność.
15 | Odkryj więcej aplikacji od Fossify: https://www.fossify.org
16 | Kod źródłowy: https://www.github.com/FossifyOrg
17 | Dołącz do społeczności na Reddicie: https://www.reddit.com/r/Fossify
18 | Połącz się na Telegramie: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl-PL/short_description.txt:
--------------------------------------------------------------------------------
1 | Lekka otwartoźródłowa apka aparatu do szybkiej, łatwej i bezpiecznej fotografii
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/full_description.txt:
--------------------------------------------------------------------------------
1 | Câmera Fossify é seu app para capturar os momentos da vida com precisão e privacidade. Não importa se você está tirando fotos ou gravando vídeos, este app de câmera totalmente personalizável e que respeita a privacidade foi projetado para atender às suas necessidades.
2 | 📸 SUA PRIVACIDADE, NOSSA PRIORIDADE:
3 | Com o app Câmera Fossify, seus dados permanecem privados. Aproveite uma câmera que funciona sem acesso à Internet ou permissões intrusivas, garantindo que suas fotos e vídeos permaneçam seguros.
4 | 🚀 DESEMPENHO INTEGRAL:
5 | O Câmera Fossify fornece uma interface fluida e responsiva. Alterne entre os modos de foto e vídeo, ajuste o zoom e alterne entre as câmeras frontal e traseira instantaneamente. Capture momentos sem atrasos e experimente um desempenho suave o tempo todo.
6 | 🖼️ PERSONALIZAÇÃO COMPLETA:
7 | Personalize cada aspecto da sua experiência com a câmera. Ajuste a qualidade da saída, personalize o caminho de salvamento e defina a resolução para atender às suas necessidades. Você pode até personalizar cores e temas para combinar com seu estilo.
8 | ⚡ CONTROLES DINÂMICOS:
9 | Alterne as configurações com facilidade — controle o flash, a proporção e o zoom diretamente da visualização da câmera. O app foi projetado para acesso rápido, permitindo que você capture momentos de forma eficiente, com controles intuitivos.
10 | 🖼️ DESIGN DE MATERIAL:
11 | Desfrute de uma interface elegante e amigável com design de material e um tema dinâmico que se adapta às suas preferências. Não importa se você está usando o app durante o dia ou à noite, o Câmera Fossify oferece uma experiência suave e intuitiva.
12 | 🌐 GARANTIA DE CÓDIGO ABERTO:
13 | O Câmera Fossify é construído sobre uma base de código aberto. Com nosso compromisso com a transparência, você pode revisar o código no GitHub e fazer parte de uma comunidade que valoriza a privacidade e a confiança.
14 | A Câmera Fossify oferece tudo o que você precisa para capturar momentos sem esforço, respeitando sua privacidade.
15 | Explore mais apps Fossify: https://www.fossify.org
16 | Código aberto: https://www.github.com/FossifyOrg
17 | Junte-se à comunidade no Reddit: https://www.reddit.com/r/Fossify
18 | Conecte-se no Telegram: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/short_description.txt:
--------------------------------------------------------------------------------
1 | App de câmera de código aberto leve para fotografia rápida, fácil e segura
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru-RU/full_description.txt:
--------------------------------------------------------------------------------
1 | Камера Fossify — это ваше приложение для съёмки моментов жизни с точностью и конфиденциальностью. Независимо от того, делаете ли вы снимки или записываете видео, это полностью настраиваемое, уважающее конфиденциальность приложение камеры создано для удовлетворения ваших потребностей.
2 |
3 | 📸 ВАША КОНФИДЕНЦИАЛЬНОСТЬ ЭТО НАШ ПРИОРИТЕТ:
4 | С приложением Камера Fossify ваши данные остаются конфиденциальными. Наслаждайтесь камерой, которая работает без доступа в Интернет или навязчивых разрешений, гарантируя, что ваши фотографии и видео останутся в безопасности.
5 |
6 | 🚀 SEAMLESS PERFORMANCE:
7 | Fossify Camera provides a fluid and responsive interface. Switch between photo and video modes, adjust zoom, and toggle between front and rear cameras instantly. Capture moments with zero lag and experience smooth performance at all times.
8 | 🖼️ COMPLETE CUSTOMIZATION:
9 | Personalize every aspect of your camera experience. Adjust the output quality, customize the save path, and set the resolution to suit your needs. You can even customize colors and themes to match your style.
10 | ⚡ DYNAMIC CONTROLS:
11 | Toggle settings with ease—control flash, aspect ratio, and zoom directly from the camera view. The app is designed for quick access, letting you capture moments efficiently, with intuitive controls.
12 | 🖼️ MATERIAL DESIGN:
13 | Enjoy a sleek, user-friendly interface with material design and a dynamic theme that adapts to your preferences. Whether you're using the app during the day or at night, Fossify Camera provides a smooth and intuitive experience.
14 | 🌐 OPEN-SOURCE ASSURANCE:
15 | Fossify Camera is built on an open-source foundation. With our commitment to transparency, you can review the code on GitHub and be part of a community that values privacy and trust.
16 | Fossify Camera offers everything you need to capture moments effortlessly while respecting your privacy.
17 | Ознакомьтесь с другими приложениями от Fossify: https://www.fossify.org
18 | Исходный код: https://www.github.com/FossifyOrg
19 | Присоединяйтесь к сообществу на Reddit: https://www.reddit.com/r/Fossify
20 | Подключайтесь в Telegram: https://t.me/Fossify
21 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru-RU/short_description.txt:
--------------------------------------------------------------------------------
1 | Лёгкое и свободное приложение для быстрой, простой и безопасной фотосъемки
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/sv-SE/short_description.txt:
--------------------------------------------------------------------------------
1 | Lätt kameraapp med öppen källkod för snabb, enkel och säker fotografering
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr-TR/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify Kamera, hayatın anlarını hassasiyet ve gizlilikle yakalayabileceğiniz uygulamanızdır. İster fotoğraf çekiyor olun, ister videoları kaydediyor olun, bu tamamen özelleştirilebilir, gizliliğe saygılı kamera uygulaması ihtiyaçlarınızı karşılamak için tasarlanmıştır.
2 | 📸 GİZLİLİĞİNİZ, ÖNCELİĞİMİZ:
3 | Fossify Kamera uygulamasıyla verileriniz özel kalır. İnternet erişimi veya müdahaleci izinler olmadan çalışan bir kameranın tadını çıkarın, fotoğraflarınızın ve videolarınızın güvende kalmasını sağlayın.
4 | 🚀 KESİNTİSİZ PERFORMANS:
5 | Fossify Kamera akıcı ve duyarlı bir arayüz sağlar. Fotoğraf ve video kipleri arasında geçiş yapın, yakınlaştırmayı ayarlayın ve ön ve arka kameralar arasında anında geçiş yapın. Sıfır gecikme ile anları yakalayın ve her zaman kesintisiz performans yaşayın.
6 | 🖼️ TAMAMIYLA ÖZELLEŞTİRİLEBİLİR:
7 | Kamera deneyiminizin her yönünü kişiselleştirin. Çıktı kalitesini ayarlayın, kaydetme yolunu özelleştirin ve çözünürlüğü ihtiyaçlarınıza uygun olarak ayarlayın. Renkleri ve temaları stilinize uyacak şekilde özelleştirebilirsiniz.
8 | ⚡ DİNAMİK DENETİMLER:
9 | Ayarları kolaylıkla değiştirin - doğrudan kamera görünümünden flaş, en boy oranı ve yakınlaştırma. Uygulama, hızlı erişim için tasarlanmıştır ve sezgisel kontrollerle anları verimli bir şekilde yakalamanıza izin verir.
10 | 🖼️ MATERYAL TASARIMI:
11 | Malzeme tasarımı ve tercihlerinize uyum sağlayan dinamik bir tema ile şık, kullanıcı dostu bir arayüzün tadını çıkarın. Uygulamayı gündüz veya gece kullanıyor olun, Fossify Kamera pürüzsüz ve sezgisel bir deneyim sağlar.
12 | 🌐 AÇIK KAYNAK GÜVENCESİ:
13 | Fossify Kamera açık kaynaklı bir temel üzerine inşa edilmiştir. Şeffaflığa olan bağlılığımızla, GitHub'daki kodu inceleyebilir ve gizliliğe ve güvene değer veren bir topluluğun parçası olabilirsiniz.
14 | Fossify Kamera, gizliliğinize saygı duyarken anları zahmetsizce yakalamak için ihtiyacınız olan her şeyi sunuyor.
15 | Daha fazla Fossify uygulamalarını keşfedin: https://www.fossify.org
16 | Açık kaynaklı kod: https://www.github.com/FossifyOrg
17 | Reddit adresindeki topluluğa katılın: https://www.reddit.com/r/Fossify
18 | Telegram'a bağlanın: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr-TR/short_description.txt:
--------------------------------------------------------------------------------
1 | Hızlı, kolay ve güvenli fotoğrafçılık için hafif açık kaynaklı kamera uygulaması
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify Ксмера5 – це ваш улюблений застосунок для точної та приватної зйомки життєвих моментів. Незалежно від того, чи робите ви фотографії, чи записуєте відео, цей повністю налаштовуваний застосунок для камери з повагою до приватності створений для задоволення ваших потреб.
2 | 📸 ВАША ПРИСУТНІСТЬ – НАШ ПРІОРИТЕТ:
3 | Із застосунком Fossify Камера ваші дані залишаються приватними. Насолоджуйтесь камерою, яка працює без доступу до мережі або нав'язливих дозволів, гарантуючи безпеку ваших фотографій та відео.
4 | 🚀 БЕЗПЕРЕБІЙНА РОБОТА:
5 | Fossify Камера має плавний та чуйний інтерфейс. Миттєво перемикайтеся між режимами фото- та відеозйомки, регулюйте масштаб та перемикайтеся між передньою та задньою камерами. Захоплюйте моменти з нульовою затримкою та насолоджуйтеся плавною роботою в будь-який час.
6 | 🖼️ ПОВНЕ НАЛАШТУВАННЯ:
7 | Персоналізуйте кожен аспект роботи з камерою. Налаштуйте якість вихідних даних, шлях збереження та роздільну здатність відповідно до ваших потреб. Ви навіть можете налаштувати кольори та теми відповідно до свого стилю.⚡
8 | ДИНАМІЧНІ ЕЛЕМЕНТИ КЕРУВАННЯ:
9 | Легко перемикайте налаштування спалаху, співвідношення сторін і масштабування безпосередньо з екрана камери. Застосунок розроблений для швидкого доступу, що дозволяє ефективно фіксувати моменти за допомогою інтуїтивно зрозумілих елементів керування.
10 | 🖼️ МАТЕРІАЛЬНИЙ ДИЗАЙН:
11 | Насолоджуйтеся елегантним, зручним інтерфейсом з матеріальним дизайном і динамічною темою, яка підлаштовується під ваші вподобання. Незалежно від того, використовуєте ви застосунок вдень чи вночі, Fossify Камера забезпечує плавний та інтуїтивно зрозумілий інтерфейс.
12 | 🌐 УПЕВНЕНІСТЬ З ВІДКРИТИМ ВИХІДНИМ КОДОМ:
13 | Fossify Камера побудована на основі відкритого вихідного коду. Завдяки нашому прагненню до прозорості, ви можете переглянути код на GitHub і стати частиною спільноти, яка цінує приватність та довіру.
14 | Fossify Камера пропонує все необхідне, щоб легко фіксувати моменти, поважаючи вашу приватність.
15 | Дізнайтеся більше про застосунки Fossify: https://www.fossify.org
16 | Відкритий код: https://www.github.com/FossifyOrg
17 | Приєднуйтесь до спільноти на Reddit: https://www.reddit.com/r/Fossify
18 | Приєднуйтесь у Telegram: https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/short_description.txt:
--------------------------------------------------------------------------------
1 | Легкий застосунок з відкритим кодом для швидкого, простого та безпечного фото
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/full_description.txt:
--------------------------------------------------------------------------------
1 | Fossify 相机是您精准且私密地捕捉生活瞬间的首选应用。无论您是拍照还是录制视频,这款完全可定制、尊重隐私的相机应用都能满足您的需求。
2 | 📸 您的隐私,我们的首要任务:
3 | 使用 Fossify 相机应用,您的数据将保持私密。享受无需互联网接入或侵入性权限即可工作的相机,确保您的照片和视频保持安全。
4 | 🚀 无缝性能:
5 | Fossify 相机提供流畅灵敏的界面。在照片和视频模式之间切换,调整变焦,并在前后摄像头之间即时切换。捕捉零延迟的精彩瞬间,随时体验流畅的性能。
6 | 🖼️ 完全自定义:
7 | 个性化您的相机体验的各个方面。调整输出质量,自定义保存路径,并设置分辨率以满足您的需求。您甚至可以自定义颜色和主题以匹配您的风格。
8 | ⚡ 动态控制:
9 | 轻松切换设置——直接从相机视图控制闪光灯、宽高比和变焦。本应用旨在快速访问,让您通过直观的控制高效捕捉瞬间。
10 | 🖼️ Material 设计:
11 | 享受时尚、用户友好的界面, Material 设计和动态主题可根据您的喜好进行调整。无论您是在白天还是晚上使用本应用,Fossify 相机都能提供流畅直观的体验。
12 | 🌐 开源保障:
13 | Fossify 相机建立在开源基础上。通过我们对透明度的承诺,您可以在 GitHub 上查看代码,并成为重视隐私和信任的社区的一员。
14 | Fossify 相机提供您轻松捕捉瞬间所需的一切,同时尊重您的隐私。
15 | 探索更多 Fossify 应用:https://www.fossify.org
16 | 开源代码:https://www.github.com/FossifyOrg
17 | 加入 Reddit 社区:https://www.reddit.com/r/Fossify
18 | 在 Telegram 上联系:https://t.me/Fossify
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/short_description.txt:
--------------------------------------------------------------------------------
1 | 轻量级开源相机应用,可快速、轻松、安全地拍照
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/short_description.txt:
--------------------------------------------------------------------------------
1 | 輕量化開源相機應用程式,提供快速、簡便且安全的攝影體驗
2 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4g -XX:+UseGCOverheadLimit -XX:GCTimeLimit=10 -Dfile.encoding=UTF-8 -XX:+UseParallelGC
2 | kotlin.code.style=official
3 | android.useAndroidX=true
4 | android.enableJetifier=true
5 | org.gradle.parallel=true
6 | org.gradle.caching=true
7 | org.gradle.vfs.watch=true
8 | org.gradle.configureondemand=true
9 | org.gradle.unsafe.configuration-cache=true
10 | org.gradle.unsafe.configuration-cache-problems=warn
11 | android.nonTransitiveRClass=true
12 |
13 | # Versioning
14 | VERSION_NAME=1.0.2
15 | VERSION_CODE=3
16 | APP_ID=org.fossify.camera
17 |
--------------------------------------------------------------------------------
/gradle/libs.versions.toml:
--------------------------------------------------------------------------------
1 | [versions]
2 | #jetbrains
3 | kotlin = "2.1.21"
4 | #Detekt
5 | detekt = "1.23.8"
6 | #Androidx
7 | androidx-document-file = "1.1.0"
8 | androidx-exif-interface = "1.4.1"
9 | androidx-window = "1.4.0"
10 | androidx-camera = "1.4.2"
11 | androidx-ktx = "2.8.6"
12 | #Fossify
13 | commons = "3.0.0"
14 | #Gradle
15 | gradlePlugins-agp = "8.10.1"
16 | #build
17 | app-build-compileSDKVersion = "34"
18 | app-build-targetSDK = "34"
19 | app-build-minimumSDK = "29"
20 | app-build-javaVersion = "VERSION_17"
21 | app-build-kotlinJVMTarget = "17"
22 | [libraries]
23 | #Android X
24 | androidx-camera-core = { module = "androidx.camera:camera-core", version.ref = "androidx-camera" }
25 | androidx-camera-camera2 = { module = "androidx.camera:camera-camera2", version.ref = "androidx-camera" }
26 | androidx-camera-video = { module = "androidx.camera:camera-video", version.ref = "androidx-camera" }
27 | androidx-camera-extensions = { module = "androidx.camera:camera-extensions", version.ref = "androidx-camera" }
28 | androidx-camera-lifecycle = { module = "androidx.camera:camera-lifecycle", version.ref = "androidx-camera" }
29 | androidx-camera-view = { module = "androidx.camera:camera-view", version.ref = "androidx-camera" }
30 | androidx-window = { module = "androidx.window:window", version.ref = "androidx-window" }
31 | androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-ktx" }
32 | androidx-exifinterface = { module = "androidx.exifinterface:exifinterface", version.ref = "androidx-exif-interface" }
33 | androidx-documentfile = { module = "androidx.documentfile:documentfile", version.ref = "androidx-document-file" }
34 | #Fossify
35 | fossify-commons = { module = "org.fossify:commons", version.ref = "commons" }
36 | [bundles]
37 | androidx-camera = [
38 | "androidx-camera-core",
39 | "androidx-camera-camera2",
40 | "androidx-camera-video",
41 | "androidx-camera-extensions",
42 | "androidx-camera-lifecycle",
43 | "androidx-camera-view"
44 | ]
45 | [plugins]
46 | android = { id = "com.android.application", version.ref = "gradlePlugins-agp" }
47 | kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
48 | detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }
49 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 | @rem SPDX-License-Identifier: Apache-2.0
17 | @rem
18 |
19 | @if "%DEBUG%"=="" @echo off
20 | @rem ##########################################################################
21 | @rem
22 | @rem Gradle startup script for Windows
23 | @rem
24 | @rem ##########################################################################
25 |
26 | @rem Set local scope for the variables with windows NT shell
27 | if "%OS%"=="Windows_NT" setlocal
28 |
29 | set DIRNAME=%~dp0
30 | if "%DIRNAME%"=="" set DIRNAME=.
31 | @rem This is normally unused
32 | set APP_BASE_NAME=%~n0
33 | set APP_HOME=%DIRNAME%
34 |
35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
37 |
38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
40 |
41 | @rem Find java.exe
42 | if defined JAVA_HOME goto findJavaFromJavaHome
43 |
44 | set JAVA_EXE=java.exe
45 | %JAVA_EXE% -version >NUL 2>&1
46 | if %ERRORLEVEL% equ 0 goto execute
47 |
48 | echo. 1>&2
49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50 | echo. 1>&2
51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52 | echo location of your Java installation. 1>&2
53 |
54 | goto fail
55 |
56 | :findJavaFromJavaHome
57 | set JAVA_HOME=%JAVA_HOME:"=%
58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
59 |
60 | if exist "%JAVA_EXE%" goto execute
61 |
62 | echo. 1>&2
63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64 | echo. 1>&2
65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66 | echo location of your Java installation. 1>&2
67 |
68 | goto fail
69 |
70 | :execute
71 | @rem Setup the command line
72 |
73 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
74 |
75 |
76 | @rem Execute Gradle
77 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
78 |
79 | :end
80 | @rem End local scope for the variables with windows NT shell
81 | if %ERRORLEVEL% equ 0 goto mainEnd
82 |
83 | :fail
84 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
85 | rem the _cmd.exe /c_ return code!
86 | set EXIT_CODE=%ERRORLEVEL%
87 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
88 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
89 | exit /b %EXIT_CODE%
90 |
91 | :mainEnd
92 | if "%OS%"=="Windows_NT" endlocal
93 |
94 | :omega
95 |
--------------------------------------------------------------------------------
/graphics/foreground.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
--------------------------------------------------------------------------------
/graphics/icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/graphics/icon.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Camera/cf2aae62b57d69d807b1f7c77a6c7bd6851474ee/graphics/icon.webp
--------------------------------------------------------------------------------
/keystore.properties_sample:
--------------------------------------------------------------------------------
1 | storePassword=123456
2 | keyPassword=abcdef
3 | keyAlias=myAlias
4 | storeFile=../keystore.jks
5 |
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | gradlePluginPortal()
4 | google()
5 | mavenCentral()
6 | }
7 | }
8 | dependencyResolutionManagement {
9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
10 | repositories {
11 | google()
12 | mavenCentral()
13 | maven { setUrl("https://jitpack.io") }
14 | }
15 | }
16 | include(":app")
17 |
--------------------------------------------------------------------------------