├── .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 │ │ └── gallery │ │ ├── App.kt │ │ ├── activities │ │ ├── EditActivity.kt │ │ ├── ExcludedFoldersActivity.kt │ │ ├── HiddenFoldersActivity.kt │ │ ├── IncludedFoldersActivity.kt │ │ ├── MainActivity.kt │ │ ├── MediaActivity.kt │ │ ├── PhotoActivity.kt │ │ ├── PhotoVideoActivity.kt │ │ ├── SearchActivity.kt │ │ ├── SetWallpaperActivity.kt │ │ ├── SettingsActivity.kt │ │ ├── SimpleActivity.kt │ │ ├── SplashActivity.kt │ │ ├── VideoActivity.kt │ │ ├── VideoPlayerActivity.kt │ │ ├── ViewPagerActivity.kt │ │ └── WidgetConfigureActivity.kt │ │ ├── adapters │ │ ├── DirectoryAdapter.kt │ │ ├── DirectoryItemBinding.kt │ │ ├── FiltersAdapter.kt │ │ ├── ManageFoldersAdapter.kt │ │ ├── ManageHiddenFoldersAdapter.kt │ │ ├── MediaAdapter.kt │ │ ├── MediaItemBinding.kt │ │ ├── MyPagerAdapter.kt │ │ └── PortraitPhotosAdapter.kt │ │ ├── asynctasks │ │ └── GetMediaAsynctask.kt │ │ ├── databases │ │ └── GalleryDatabase.kt │ │ ├── dialogs │ │ ├── AllFilesPermissionDialog.kt │ │ ├── ChangeFileThumbnailStyleDialog.kt │ │ ├── ChangeFolderThumbnailStyleDialog.kt │ │ ├── ChangeGroupingDialog.kt │ │ ├── ChangeSortingDialog.kt │ │ ├── ChangeViewTypeDialog.kt │ │ ├── ConfirmDeleteFolderDialog.kt │ │ ├── CustomAspectRatioDialog.kt │ │ ├── DeleteWithRememberDialog.kt │ │ ├── ExcludeFolderDialog.kt │ │ ├── ExportFavoritesDialog.kt │ │ ├── FilterMediaDialog.kt │ │ ├── GrantAllFilesDialog.kt │ │ ├── ManageBottomActionsDialog.kt │ │ ├── ManageExtendedDetailsDialog.kt │ │ ├── OtherAspectRatioDialog.kt │ │ ├── PickDirectoryDialog.kt │ │ ├── PickMediumDialog.kt │ │ ├── ResizeDialog.kt │ │ ├── ResizeMultipleImagesDialog.kt │ │ ├── ResizeWithPathDialog.kt │ │ ├── SaveAsDialog.kt │ │ ├── SlideshowDialog.kt │ │ └── StoragePermissionRequiredDialog.kt │ │ ├── extensions │ │ ├── Activity.kt │ │ ├── ArrayList.kt │ │ ├── Context.kt │ │ ├── ExifInterface.kt │ │ ├── FileDirItem.kt │ │ ├── Glide.kt │ │ ├── Int.kt │ │ ├── Player.kt │ │ ├── Resources.kt │ │ ├── String.kt │ │ └── View.kt │ │ ├── fragments │ │ ├── PhotoFragment.kt │ │ ├── PlaybackSpeedFragment.kt │ │ ├── VideoFragment.kt │ │ └── ViewPagerFragment.kt │ │ ├── helpers │ │ ├── Config.kt │ │ ├── Constants.kt │ │ ├── DefaultPageTransformer.kt │ │ ├── FadePageTransformer.kt │ │ ├── FilterThumbnailsManager.kt │ │ ├── GridSpacingItemDecoration.kt │ │ ├── IsoTypeReader.kt │ │ ├── MediaFetcher.kt │ │ ├── MyGlideImageDecoder.kt │ │ ├── MyWidgetProvider.kt │ │ ├── PicassoRegionDecoder.kt │ │ ├── PicassoRoundedCornersTransformation.kt │ │ └── RotateTransformation.kt │ │ ├── interfaces │ │ ├── DateTakensDao.kt │ │ ├── DirectoryDao.kt │ │ ├── DirectoryOperationsListener.kt │ │ ├── FavoritesDao.kt │ │ ├── MediaOperationsListener.kt │ │ ├── MediumDao.kt │ │ ├── PlaybackSpeedListener.kt │ │ └── WidgetsDao.kt │ │ ├── jobs │ │ └── NewPhotoFetcher.kt │ │ ├── models │ │ ├── AlbumCover.kt │ │ ├── DateTaken.kt │ │ ├── Directory.kt │ │ ├── Favorite.kt │ │ ├── FilterItem.kt │ │ ├── Medium.kt │ │ ├── PaintOptions.kt │ │ ├── ThumbnailItem.kt │ │ ├── ThumbnailSection.kt │ │ └── Widget.kt │ │ ├── receivers │ │ ├── BootCompletedReceiver.kt │ │ └── RefreshMediaReceiver.kt │ │ ├── svg │ │ ├── SvgDecoder.kt │ │ ├── SvgDrawableTranscoder.kt │ │ ├── SvgModule.kt │ │ └── SvgSoftwareLayerSetter.kt │ │ └── views │ │ ├── EditorDrawCanvas.kt │ │ ├── InstantItemSwitch.kt │ │ └── MediaSideScroll.kt │ └── res │ ├── drawable-hdpi │ ├── ic_panorama_outline.webp │ └── sample_logo.webp │ ├── drawable-nodpi │ └── img_widget_preview.webp │ ├── drawable-xhdpi │ ├── ic_panorama_outline.webp │ └── sample_logo.webp │ ├── drawable-xxhdpi │ ├── ic_panorama_outline.webp │ └── sample_logo.webp │ ├── drawable-xxxhdpi │ ├── ic_panorama_outline.webp │ └── sample_logo.webp │ ├── drawable │ ├── black_rounded_background.xml │ ├── circle_background.xml │ ├── circle_black_background.xml │ ├── darkened_automatic_circle_background.xml │ ├── extended_details_background.xml │ ├── gradient_background.xml │ ├── gradient_background_flipped.xml │ ├── ic_aspect_ratio_vector.xml │ ├── ic_cardboard_vector.xml │ ├── ic_crop_rotate_vector.xml │ ├── ic_draw_vector.xml │ ├── ic_explore_off_vector.xml │ ├── ic_explore_vector.xml │ ├── ic_files_vector.xml │ ├── ic_flip_horizontally_vector.xml │ ├── ic_flip_vertically_vector.xml │ ├── ic_folders_vector.xml │ ├── ic_launcher_background.xml │ ├── ic_launcher_foreground.xml │ ├── ic_launcher_monochrome.xml │ ├── ic_maximize_vector.xml │ ├── ic_minimize_vector.xml │ ├── ic_photo_filter_vector.xml │ ├── ic_play_vector.xml │ ├── ic_playback_speed_slow_vector.xml │ ├── ic_playback_speed_vector.xml │ ├── ic_portrait_photo_vector.xml │ ├── ic_rotate_right_vector.xml │ ├── ic_slideshow_vector.xml │ ├── ic_vector_speaker_off.xml │ ├── ic_vector_speaker_on.xml │ ├── ic_vector_warning_colored.xml │ ├── placeholder_rounded_big.xml │ ├── placeholder_rounded_small.xml │ ├── placeholder_square.xml │ ├── shortcut_image.xml │ └── stroke_background.xml │ ├── layout │ ├── activity_edit.xml │ ├── activity_main.xml │ ├── activity_manage_folders.xml │ ├── activity_media.xml │ ├── activity_medium.xml │ ├── activity_new_photo_edit.xml │ ├── activity_new_video_edit.xml │ ├── activity_search.xml │ ├── activity_set_wallpaper.xml │ ├── activity_settings.xml │ ├── activity_video_player.xml │ ├── activity_widget_config.xml │ ├── bottom_actions.xml │ ├── bottom_actions_aspect_ratio.xml │ ├── bottom_editor_actions_filter.xml │ ├── bottom_editor_crop_rotate_actions.xml │ ├── bottom_editor_draw_actions.xml │ ├── bottom_editor_primary_actions.xml │ ├── bottom_set_wallpaper_actions.xml │ ├── bottom_video_time_holder.xml │ ├── dialog_change_file_thumbnail_style.xml │ ├── dialog_change_folder_thumbnail_style.xml │ ├── dialog_change_grouping.xml │ ├── dialog_change_sorting.xml │ ├── dialog_change_view_type.xml │ ├── dialog_confirm_delete_folder.xml │ ├── dialog_custom_aspect_ratio.xml │ ├── dialog_delete_with_remember.xml │ ├── dialog_directory_picker.xml │ ├── dialog_exclude_folder.xml │ ├── dialog_export_favorites.xml │ ├── dialog_filter_media.xml │ ├── dialog_grant_all_files.xml │ ├── dialog_manage_bottom_actions.xml │ ├── dialog_manage_extended_details.xml │ ├── dialog_medium_picker.xml │ ├── dialog_other_aspect_ratio.xml │ ├── dialog_resize_image.xml │ ├── dialog_resize_image_with_path.xml │ ├── dialog_resize_multiple_images.xml │ ├── dialog_save_as.xml │ ├── dialog_slideshow.xml │ ├── dialog_storage_permission_required.xml │ ├── directory_item_grid_rounded_corners.xml │ ├── directory_item_grid_square.xml │ ├── directory_item_list.xml │ ├── editor_filter_item.xml │ ├── fragment_holder.xml │ ├── fragment_playback_speed.xml │ ├── item_manage_folder.xml │ ├── layout_media_load_error.xml │ ├── pager_photo_item.xml │ ├── pager_video_item.xml │ ├── photo_item_grid.xml │ ├── photo_item_list.xml │ ├── portrait_photo_item.xml │ ├── thumbnail_section.xml │ ├── video_item_grid.xml │ ├── video_item_list.xml │ └── widget.xml │ ├── menu │ ├── cab_directories.xml │ ├── cab_hidden_folders.xml │ ├── cab_media.xml │ ├── menu_add_folder.xml │ ├── menu_editor.xml │ ├── menu_included_folders.xml │ ├── menu_main.xml │ ├── menu_main_intent.xml │ ├── menu_media.xml │ ├── menu_search.xml │ ├── menu_set_wallpaper.xml │ ├── menu_video_player.xml │ ├── menu_viewpager.xml │ └── photo_video_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 │ ├── mipmap-hdpi │ ├── ic_launcher.webp │ ├── ic_launcher_amber.webp │ ├── ic_launcher_blue.webp │ ├── ic_launcher_blue_grey.webp │ ├── ic_launcher_brown.webp │ ├── ic_launcher_cyan.webp │ ├── ic_launcher_deep_orange.webp │ ├── ic_launcher_deep_purple.webp │ ├── ic_launcher_grey_black.webp │ ├── ic_launcher_indigo.webp │ ├── ic_launcher_light_blue.webp │ ├── ic_launcher_light_green.webp │ ├── ic_launcher_lime.webp │ ├── ic_launcher_orange.webp │ ├── ic_launcher_pink.webp │ ├── ic_launcher_purple.webp │ ├── ic_launcher_red.webp │ ├── ic_launcher_teal.webp │ └── ic_launcher_yellow.webp │ ├── mipmap-mdpi │ ├── ic_launcher.webp │ ├── ic_launcher_amber.webp │ ├── ic_launcher_blue.webp │ ├── ic_launcher_blue_grey.webp │ ├── ic_launcher_brown.webp │ ├── ic_launcher_cyan.webp │ ├── ic_launcher_deep_orange.webp │ ├── ic_launcher_deep_purple.webp │ ├── ic_launcher_grey_black.webp │ ├── ic_launcher_indigo.webp │ ├── ic_launcher_light_blue.webp │ ├── ic_launcher_light_green.webp │ ├── ic_launcher_lime.webp │ ├── ic_launcher_orange.webp │ ├── ic_launcher_pink.webp │ ├── ic_launcher_purple.webp │ ├── ic_launcher_red.webp │ ├── ic_launcher_teal.webp │ └── ic_launcher_yellow.webp │ ├── mipmap-xhdpi │ ├── ic_launcher.webp │ ├── ic_launcher_amber.webp │ ├── ic_launcher_blue.webp │ ├── ic_launcher_blue_grey.webp │ ├── ic_launcher_brown.webp │ ├── ic_launcher_cyan.webp │ ├── ic_launcher_deep_orange.webp │ ├── ic_launcher_deep_purple.webp │ ├── ic_launcher_grey_black.webp │ ├── ic_launcher_indigo.webp │ ├── ic_launcher_light_blue.webp │ ├── ic_launcher_light_green.webp │ ├── ic_launcher_lime.webp │ ├── ic_launcher_orange.webp │ ├── ic_launcher_pink.webp │ ├── ic_launcher_purple.webp │ ├── ic_launcher_red.webp │ ├── ic_launcher_teal.webp │ └── ic_launcher_yellow.webp │ ├── mipmap-xxhdpi │ ├── ic_launcher.webp │ ├── ic_launcher_amber.webp │ ├── ic_launcher_blue.webp │ ├── ic_launcher_blue_grey.webp │ ├── ic_launcher_brown.webp │ ├── ic_launcher_cyan.webp │ ├── ic_launcher_deep_orange.webp │ ├── ic_launcher_deep_purple.webp │ ├── ic_launcher_grey_black.webp │ ├── ic_launcher_indigo.webp │ ├── ic_launcher_light_blue.webp │ ├── ic_launcher_light_green.webp │ ├── ic_launcher_lime.webp │ ├── ic_launcher_orange.webp │ ├── ic_launcher_pink.webp │ ├── ic_launcher_purple.webp │ ├── ic_launcher_red.webp │ ├── ic_launcher_teal.webp │ └── ic_launcher_yellow.webp │ ├── mipmap-xxxhdpi │ ├── ic_launcher.webp │ ├── ic_launcher_amber.webp │ ├── ic_launcher_blue.webp │ ├── ic_launcher_blue_grey.webp │ ├── ic_launcher_brown.webp │ ├── ic_launcher_cyan.webp │ ├── ic_launcher_deep_orange.webp │ ├── ic_launcher_deep_purple.webp │ ├── ic_launcher_grey_black.webp │ ├── ic_launcher_indigo.webp │ ├── ic_launcher_light_blue.webp │ ├── ic_launcher_light_green.webp │ ├── ic_launcher_lime.webp │ ├── ic_launcher_orange.webp │ ├── ic_launcher_pink.webp │ ├── ic_launcher_purple.webp │ ├── ic_launcher_red.webp │ ├── ic_launcher_teal.webp │ └── ic_launcher_yellow.webp │ ├── 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-gu │ └── 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-rKR │ └── 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-w480dp │ └── integers.xml │ ├── values-w600dp │ └── integers.xml │ ├── values-zgh │ └── strings.xml │ ├── values-zh-rCN │ └── strings.xml │ ├── values-zh-rHK │ └── strings.xml │ ├── values-zh-rTW │ └── strings.xml │ ├── values │ ├── bools.xml │ ├── colors.xml │ ├── dimens.xml │ ├── donottranslate.xml │ ├── integers.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ ├── provider_paths.xml │ ├── searchable.xml │ └── widget_info.xml ├── build.gradle.kts ├── fastlane ├── Appfile ├── Fastfile ├── README.md └── metadata │ └── android │ ├── bg │ ├── full_description.txt │ └── short_description.txt │ ├── 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 │ │ ├── 10.txt │ │ ├── 2.txt │ │ ├── 3.txt │ │ ├── 4.txt │ │ ├── 5.txt │ │ ├── 6.txt │ │ ├── 7.txt │ │ ├── 8.txt │ │ └── 9.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 │ │ │ ├── 7_en-US.png │ │ │ └── 8_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 │ ├── ga │ ├── full_description.txt │ └── short_description.txt │ ├── gl-ES │ ├── full_description.txt │ └── short_description.txt │ ├── hi-IN │ ├── full_description.txt │ └── short_description.txt │ ├── hr │ └── short_description.txt │ ├── hu-HU │ └── short_description.txt │ ├── id │ ├── full_description.txt │ └── short_description.txt │ ├── it-IT │ ├── full_description.txt │ └── short_description.txt │ ├── iw-IL │ ├── full_description.txt │ └── short_description.txt │ ├── ja-JP │ └── short_description.txt │ ├── nl-NL │ └── short_description.txt │ ├── pl-PL │ ├── full_description.txt │ └── short_description.txt │ ├── pt-BR │ └── short_description.txt │ ├── pt │ └── full_description.txt │ ├── ru-RU │ ├── full_description.txt │ └── short_description.txt │ ├── sv-SE │ ├── full_description.txt │ └── 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 ├── featureGraphic.png ├── 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/Gallery/discussions 5 | about: Please ask and answer questions here. -------------------------------------------------------------------------------- /.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.gallery" 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.gallery" 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 | with: 11 | test_task: ":app:testFossDebugUnitTest" 12 | -------------------------------------------------------------------------------- /.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 | /app/src/proprietary/assets/pesdk_android_license 12 | /app/src/proprietary/assets/vesdk_android_license 13 | fastlane/fastlane.json 14 | fastlane/report.xml 15 | -------------------------------------------------------------------------------- /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" -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /foss/ 3 | /gplay/ 4 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | -keep class org.fossify.** { *; } 2 | -dontwarn android.graphics.Canvas 3 | -dontwarn org.fossify.** 4 | -dontwarn org.apache.** 5 | 6 | # Picasso 7 | -dontwarn javax.annotation.** 8 | -keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase 9 | -dontwarn org.codehaus.mojo.animal_sniffer.* 10 | -dontwarn okhttp3.internal.platform.ConscryptPlatform 11 | 12 | -keepclassmembers class * implements android.os.Parcelable { 13 | static ** CREATOR; 14 | } 15 | 16 | # RenderScript 17 | -keepclasseswithmembernames class * { 18 | native ; 19 | } 20 | -keep class androidx.renderscript.** { *; } 21 | 22 | # Reprint 23 | -keep class com.github.ajalt.reprint.module.** { *; } 24 | -------------------------------------------------------------------------------- /app/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Gallery_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 | true 5 | true 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/App.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery 2 | 3 | import com.github.ajalt.reprint.core.Reprint 4 | import com.squareup.picasso.Downloader 5 | import com.squareup.picasso.Picasso 6 | import okhttp3.Request 7 | import okhttp3.Response 8 | import org.fossify.commons.FossifyApp 9 | 10 | class App : FossifyApp() { 11 | 12 | override val isAppLockFeatureAvailable = true 13 | 14 | override fun onCreate() { 15 | super.onCreate() 16 | Reprint.initialize(this) 17 | Picasso.setSingletonInstance(Picasso.Builder(this).downloader(object : Downloader { 18 | override fun load(request: Request) = Response.Builder().build() 19 | 20 | override fun shutdown() {} 21 | }).build()) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/activities/PhotoActivity.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.activities 2 | 3 | import android.os.Bundle 4 | 5 | class PhotoActivity : PhotoVideoActivity() { 6 | override fun onCreate(savedInstanceState: Bundle?) { 7 | mIsVideo = false 8 | super.onCreate(savedInstanceState) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/activities/SplashActivity.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.activities 2 | 3 | import android.content.Intent 4 | import org.fossify.commons.activities.BaseSplashActivity 5 | import org.fossify.commons.helpers.ensureBackgroundThread 6 | import org.fossify.gallery.extensions.config 7 | import org.fossify.gallery.extensions.favoritesDB 8 | import org.fossify.gallery.extensions.getFavoriteFromPath 9 | import org.fossify.gallery.extensions.mediaDB 10 | import org.fossify.gallery.models.Favorite 11 | 12 | class SplashActivity : BaseSplashActivity() { 13 | override fun initActivity() { 14 | // check if previously selected favorite items have been properly migrated into the new Favorites table 15 | if (config.wereFavoritesMigrated) { 16 | launchActivity() 17 | } else { 18 | if (config.appRunCount == 0) { 19 | config.wereFavoritesMigrated = true 20 | launchActivity() 21 | } else { 22 | config.wereFavoritesMigrated = true 23 | ensureBackgroundThread { 24 | val favorites = ArrayList() 25 | val favoritePaths = mediaDB.getFavorites().map { it.path }.toMutableList() as ArrayList 26 | favoritePaths.forEach { 27 | favorites.add(getFavoriteFromPath(it)) 28 | } 29 | favoritesDB.insertAll(favorites) 30 | 31 | runOnUiThread { 32 | launchActivity() 33 | } 34 | } 35 | } 36 | } 37 | } 38 | 39 | private fun launchActivity() { 40 | startActivity(Intent(this, MainActivity::class.java)) 41 | finish() 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/activities/VideoActivity.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.activities 2 | 3 | import android.os.Bundle 4 | 5 | class VideoActivity : PhotoVideoActivity() { 6 | 7 | override fun onCreate(savedInstanceState: Bundle?) { 8 | mIsVideo = true 9 | super.onCreate(savedInstanceState) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/dialogs/AllFilesPermissionDialog.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.dialogs 2 | 3 | import android.widget.TextView 4 | import androidx.appcompat.app.AlertDialog 5 | import org.fossify.commons.activities.BaseSimpleActivity 6 | import org.fossify.commons.extensions.getAlertDialogBuilder 7 | import org.fossify.commons.extensions.setupDialogStuff 8 | import org.fossify.gallery.R 9 | 10 | class AllFilesPermissionDialog( 11 | val activity: BaseSimpleActivity, message: String = "", val callback: (result: Boolean) -> Unit, val neutralPressed: () -> Unit 12 | ) { 13 | private var dialog: AlertDialog? = null 14 | 15 | init { 16 | val view = activity.layoutInflater.inflate(org.fossify.commons.R.layout.dialog_message, null) 17 | view.findViewById(R.id.message).text = message 18 | 19 | activity.getAlertDialogBuilder().setPositiveButton(R.string.all_files) { dialog, which -> positivePressed() } 20 | .setNeutralButton(R.string.media_only) { dialog, which -> neutralPressed() } 21 | .apply { 22 | activity.setupDialogStuff(view, this) { alertDialog -> 23 | dialog = alertDialog 24 | } 25 | } 26 | } 27 | 28 | private fun positivePressed() { 29 | dialog?.dismiss() 30 | callback(true) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/dialogs/ConfirmDeleteFolderDialog.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.dialogs 2 | 3 | import android.app.Activity 4 | import androidx.appcompat.app.AlertDialog 5 | import org.fossify.commons.extensions.getAlertDialogBuilder 6 | import org.fossify.commons.extensions.setupDialogStuff 7 | import org.fossify.gallery.databinding.DialogConfirmDeleteFolderBinding 8 | 9 | class ConfirmDeleteFolderDialog(activity: Activity, message: String, warningMessage: String, val callback: () -> Unit) { 10 | private var dialog: AlertDialog? = null 11 | 12 | init { 13 | val binding = DialogConfirmDeleteFolderBinding.inflate(activity.layoutInflater) 14 | binding.message.text = message 15 | binding.messageWarning.text = warningMessage 16 | 17 | activity.getAlertDialogBuilder() 18 | .setPositiveButton(org.fossify.commons.R.string.yes) { dialog, which -> dialogConfirmed() } 19 | .setNegativeButton(org.fossify.commons.R.string.no, null) 20 | .apply { 21 | activity.setupDialogStuff(binding.root, this) { alertDialog -> 22 | dialog = alertDialog 23 | } 24 | } 25 | } 26 | 27 | private fun dialogConfirmed() { 28 | dialog?.dismiss() 29 | callback() 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/dialogs/CustomAspectRatioDialog.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.dialogs 2 | 3 | import android.widget.EditText 4 | import androidx.appcompat.app.AlertDialog 5 | import org.fossify.commons.activities.BaseSimpleActivity 6 | import org.fossify.commons.extensions.getAlertDialogBuilder 7 | import org.fossify.commons.extensions.setupDialogStuff 8 | import org.fossify.commons.extensions.showKeyboard 9 | import org.fossify.commons.extensions.value 10 | import org.fossify.gallery.databinding.DialogCustomAspectRatioBinding 11 | 12 | class CustomAspectRatioDialog( 13 | val activity: BaseSimpleActivity, val defaultCustomAspectRatio: Pair?, val callback: (aspectRatio: Pair) -> Unit 14 | ) { 15 | init { 16 | val binding = DialogCustomAspectRatioBinding.inflate(activity.layoutInflater).apply { 17 | aspectRatioWidth.setText(defaultCustomAspectRatio?.first?.toInt()?.toString() ?: "") 18 | aspectRatioHeight.setText(defaultCustomAspectRatio?.second?.toInt()?.toString() ?: "") 19 | } 20 | 21 | activity.getAlertDialogBuilder() 22 | .setPositiveButton(org.fossify.commons.R.string.ok, null) 23 | .setNegativeButton(org.fossify.commons.R.string.cancel, null) 24 | .apply { 25 | activity.setupDialogStuff(binding.root, this) { alertDialog -> 26 | alertDialog.showKeyboard(binding.aspectRatioWidth) 27 | alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { 28 | val width = getViewValue(binding.aspectRatioWidth) 29 | val height = getViewValue(binding.aspectRatioHeight) 30 | callback(Pair(width, height)) 31 | alertDialog.dismiss() 32 | } 33 | } 34 | } 35 | } 36 | 37 | private fun getViewValue(view: EditText): Float { 38 | val textValue = view.value 39 | return if (textValue.isEmpty()) 0f else textValue.toFloat() 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/dialogs/DeleteWithRememberDialog.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.dialogs 2 | 3 | import android.app.Activity 4 | import androidx.appcompat.app.AlertDialog 5 | import org.fossify.commons.extensions.beGoneIf 6 | import org.fossify.commons.extensions.getAlertDialogBuilder 7 | import org.fossify.commons.extensions.setupDialogStuff 8 | import org.fossify.gallery.databinding.DialogDeleteWithRememberBinding 9 | 10 | class DeleteWithRememberDialog( 11 | private val activity: Activity, 12 | private val message: String, 13 | private val showSkipRecycleBinOption: Boolean, 14 | private val callback: (remember: Boolean, skipRecycleBin: Boolean) -> Unit 15 | ) { 16 | 17 | private var dialog: AlertDialog? = null 18 | private val binding = DialogDeleteWithRememberBinding.inflate(activity.layoutInflater) 19 | 20 | init { 21 | binding.deleteRememberTitle.text = message 22 | binding.skipTheRecycleBinCheckbox.beGoneIf(!showSkipRecycleBinOption) 23 | activity.getAlertDialogBuilder() 24 | .setPositiveButton(org.fossify.commons.R.string.yes) { dialog, which -> dialogConfirmed() } 25 | .setNegativeButton(org.fossify.commons.R.string.no, null) 26 | .apply { 27 | activity.setupDialogStuff(binding.root, this) { alertDialog -> 28 | dialog = alertDialog 29 | } 30 | } 31 | } 32 | 33 | private fun dialogConfirmed() { 34 | dialog?.dismiss() 35 | callback(binding.deleteRememberCheckbox.isChecked, binding.skipTheRecycleBinCheckbox.isChecked) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/dialogs/GrantAllFilesDialog.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.dialogs 2 | 3 | import org.fossify.commons.activities.BaseSimpleActivity 4 | import org.fossify.commons.extensions.applyColorFilter 5 | import org.fossify.commons.extensions.getAlertDialogBuilder 6 | import org.fossify.commons.extensions.getProperTextColor 7 | import org.fossify.commons.extensions.setupDialogStuff 8 | import org.fossify.gallery.databinding.DialogGrantAllFilesBinding 9 | import org.fossify.gallery.extensions.launchGrantAllFilesIntent 10 | 11 | class GrantAllFilesDialog(val activity: BaseSimpleActivity) { 12 | init { 13 | val binding = DialogGrantAllFilesBinding.inflate(activity.layoutInflater) 14 | binding.grantAllFilesImage.applyColorFilter(activity.getProperTextColor()) 15 | 16 | activity.getAlertDialogBuilder() 17 | .setPositiveButton(org.fossify.commons.R.string.ok) { dialog, which -> activity.launchGrantAllFilesIntent() } 18 | .setNegativeButton(org.fossify.commons.R.string.cancel, null) 19 | .apply { 20 | activity.setupDialogStuff(binding.root, this) { alertDialog -> } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/dialogs/StoragePermissionRequiredDialog.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.dialogs 2 | 3 | import androidx.appcompat.app.AlertDialog 4 | import org.fossify.commons.extensions.getAlertDialogBuilder 5 | import org.fossify.commons.extensions.setupDialogStuff 6 | import org.fossify.gallery.activities.SimpleActivity 7 | import org.fossify.gallery.databinding.DialogStoragePermissionRequiredBinding 8 | 9 | class StoragePermissionRequiredDialog( 10 | val activity: SimpleActivity, 11 | val onOkay: () -> Unit, 12 | val onCancel: () -> Unit, 13 | val callback: (dialog: AlertDialog) -> Unit 14 | ) { 15 | 16 | init { 17 | val binding = DialogStoragePermissionRequiredBinding.inflate(activity.layoutInflater) 18 | activity.getAlertDialogBuilder() 19 | .setPositiveButton(org.fossify.commons.R.string.go_to_settings) { dialog, _ -> 20 | dialog.dismiss() 21 | onOkay() 22 | } 23 | .setNegativeButton(org.fossify.commons.R.string.cancel) { dialog, _ -> 24 | dialog.dismiss() 25 | onCancel() 26 | } 27 | .apply { 28 | activity.setupDialogStuff( 29 | view = binding.root, 30 | dialog = this, 31 | cancelOnTouchOutside = false, 32 | callback = callback 33 | ) 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/extensions/ArrayList.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.extensions 2 | 3 | import org.fossify.gallery.helpers.* 4 | import org.fossify.gallery.models.Medium 5 | 6 | fun ArrayList.getDirMediaTypes(): Int { 7 | var types = 0 8 | if (any { it.isImage() }) { 9 | types += TYPE_IMAGES 10 | } 11 | 12 | if (any { it.isVideo() }) { 13 | types += TYPE_VIDEOS 14 | } 15 | 16 | if (any { it.isGIF() }) { 17 | types += TYPE_GIFS 18 | } 19 | 20 | if (any { it.isRaw() }) { 21 | types += TYPE_RAWS 22 | } 23 | 24 | if (any { it.isSVG() }) { 25 | types += TYPE_SVGS 26 | } 27 | 28 | if (any { it.isPortrait() }) { 29 | types += TYPE_PORTRAITS 30 | } 31 | 32 | return types 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/extensions/FileDirItem.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.extensions 2 | 3 | import org.fossify.commons.models.FileDirItem 4 | 5 | fun FileDirItem.isDownloadsFolder() = path.isDownloadsFolder() 6 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/extensions/Glide.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.extensions 2 | 3 | import com.bumptech.glide.load.DataSource 4 | import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions 5 | import com.bumptech.glide.request.transition.DrawableCrossFadeFactory 6 | import com.bumptech.glide.request.transition.TransitionFactory 7 | 8 | /** 9 | * Cross fade transition option that disabled fading when loading from cache. 10 | */ 11 | fun getOptionalCrossFadeTransition(duration: Int): DrawableTransitionOptions { 12 | return DrawableTransitionOptions.with( 13 | TransitionFactory { dataSource, isFirstResource -> 14 | if (dataSource == DataSource.RESOURCE_DISK_CACHE) return@TransitionFactory null 15 | DrawableCrossFadeFactory.Builder(duration).build().build(dataSource, isFirstResource) 16 | } 17 | ) 18 | } 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/extensions/Int.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.extensions 2 | 3 | import org.fossify.commons.helpers.SORT_DESCENDING 4 | 5 | fun Int.isSortingAscending() = this and SORT_DESCENDING == 0 6 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/extensions/Player.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.extensions 2 | 3 | import android.content.Context 4 | import androidx.media3.common.PlaybackException 5 | import androidx.media3.common.PlaybackException.ERROR_CODE_DECODER_INIT_FAILED 6 | import androidx.media3.common.PlaybackException.ERROR_CODE_DECODING_FAILED 7 | import androidx.media3.common.PlaybackException.ERROR_CODE_DECODING_FORMAT_EXCEEDS_CAPABILITIES 8 | import androidx.media3.common.PlaybackException.ERROR_CODE_DECODING_FORMAT_UNSUPPORTED 9 | import androidx.media3.common.PlaybackException.ERROR_CODE_PARSING_CONTAINER_MALFORMED 10 | import androidx.media3.common.PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED 11 | import androidx.media3.common.PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED 12 | import androidx.media3.common.PlaybackException.ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED 13 | import androidx.media3.common.Player 14 | import org.fossify.gallery.R 15 | 16 | fun Player.mute() { 17 | volume = 0f 18 | } 19 | 20 | fun Player.unmute() { 21 | volume = 1f 22 | } 23 | 24 | fun PlaybackException.getFriendlyMessage(context: Context): String { 25 | val resource = when (errorCode) { 26 | ERROR_CODE_PARSING_CONTAINER_MALFORMED, 27 | ERROR_CODE_PARSING_MANIFEST_MALFORMED -> R.string.file_is_malformed_or_corrupted 28 | 29 | ERROR_CODE_DECODER_INIT_FAILED, 30 | ERROR_CODE_DECODING_FAILED, 31 | ERROR_CODE_DECODING_FORMAT_EXCEEDS_CAPABILITIES -> R.string.media_exceeds_device_capabilities 32 | 33 | ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED, 34 | ERROR_CODE_DECODING_FORMAT_UNSUPPORTED, 35 | ERROR_CODE_PARSING_MANIFEST_UNSUPPORTED -> R.string.unsupported_format 36 | 37 | else -> return localizedMessage ?: context.getString(R.string.failed_to_load_media) 38 | } 39 | 40 | return context.getString(resource) 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/extensions/Resources.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.extensions 2 | 3 | import android.content.Context 4 | import android.content.res.Resources 5 | import android.util.TypedValue 6 | 7 | fun Resources.getActionBarHeight(context: Context): Int { 8 | val tv = TypedValue() 9 | return if (context.theme.resolveAttribute(android.R.attr.actionBarSize, tv, true)) { 10 | TypedValue.complexToDimensionPixelSize(tv.data, displayMetrics) 11 | } else 12 | 0 13 | } 14 | 15 | fun Resources.getStatusBarHeight(): Int { 16 | val id = getIdentifier("status_bar_height", "dimen", "android") 17 | return if (id > 0) { 18 | getDimensionPixelSize(id) 19 | } else 20 | 0 21 | } 22 | 23 | fun Resources.getNavBarHeight(): Int { 24 | val id = getIdentifier("navigation_bar_height", "dimen", "android") 25 | return if (id > 0) { 26 | getDimensionPixelSize(id) 27 | } else 28 | 0 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/extensions/View.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.extensions 2 | 3 | import android.os.SystemClock 4 | import android.view.MotionEvent 5 | import android.view.View 6 | 7 | fun View.sendFakeClick(x: Float, y: Float) { 8 | val uptime = SystemClock.uptimeMillis() 9 | val event = MotionEvent.obtain(uptime, uptime, MotionEvent.ACTION_DOWN, x, y, 0) 10 | dispatchTouchEvent(event) 11 | event.action = MotionEvent.ACTION_UP 12 | dispatchTouchEvent(event) 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/helpers/DefaultPageTransformer.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.helpers 2 | 3 | import android.view.View 4 | import androidx.viewpager.widget.ViewPager 5 | 6 | class DefaultPageTransformer : ViewPager.PageTransformer { 7 | override fun transformPage(view: View, position: Float) {} 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/helpers/FadePageTransformer.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.helpers 2 | 3 | import android.view.View 4 | import androidx.viewpager.widget.ViewPager 5 | 6 | class FadePageTransformer : ViewPager.PageTransformer { 7 | override fun transformPage(view: View, position: Float) { 8 | view.translationX = view.width * -position 9 | 10 | view.alpha = if (position <= -1f || position >= 1f) { 11 | 0f 12 | } else if (position == 0f) { 13 | 1f 14 | } else { 15 | 1f - Math.abs(position) 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/helpers/FilterThumbnailsManager.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.helpers 2 | 3 | import android.graphics.Bitmap 4 | import org.fossify.gallery.models.FilterItem 5 | 6 | class FilterThumbnailsManager { 7 | private var filterThumbnails = ArrayList(10) 8 | private var processedThumbnails = ArrayList(10) 9 | 10 | fun addThumb(filterItem: FilterItem) { 11 | filterThumbnails.add(filterItem) 12 | } 13 | 14 | fun processThumbs(): ArrayList { 15 | for (filterItem in filterThumbnails) { 16 | filterItem.bitmap = filterItem.filter.processFilter(Bitmap.createBitmap(filterItem.bitmap))!! 17 | processedThumbnails.add(filterItem) 18 | } 19 | return processedThumbnails 20 | } 21 | 22 | fun clearThumbs() { 23 | filterThumbnails = ArrayList() 24 | processedThumbnails = ArrayList() 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/helpers/IsoTypeReader.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.helpers 2 | 3 | import java.io.UnsupportedEncodingException 4 | import java.nio.ByteBuffer 5 | import java.nio.charset.Charset 6 | 7 | // file taken from the https://github.com/sannies/mp4parser project, used at determining if a video is a panoramic one 8 | object IsoTypeReader { 9 | fun readUInt32(bb: ByteBuffer): Long { 10 | var i = bb.int.toLong() 11 | if (i < 0) { 12 | i += 1L shl 32 13 | } 14 | return i 15 | } 16 | 17 | fun read4cc(bb: ByteBuffer): String? { 18 | val codeBytes = ByteArray(4) 19 | bb.get(codeBytes) 20 | 21 | return try { 22 | String(codeBytes, Charset.forName("ISO-8859-1")) 23 | } catch (e: UnsupportedEncodingException) { 24 | null 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/helpers/MyGlideImageDecoder.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.helpers 2 | 3 | import android.content.Context 4 | import android.graphics.Bitmap 5 | import android.net.Uri 6 | import com.bumptech.glide.Glide 7 | import com.bumptech.glide.load.DecodeFormat 8 | import com.bumptech.glide.request.RequestOptions 9 | import com.bumptech.glide.request.target.Target 10 | import com.bumptech.glide.signature.ObjectKey 11 | import com.davemorrissey.labs.subscaleview.ImageDecoder 12 | 13 | class MyGlideImageDecoder(val degrees: Int, val signature: ObjectKey) : ImageDecoder { 14 | 15 | override fun decode(context: Context, uri: Uri): Bitmap { 16 | val options = RequestOptions() 17 | .format(DecodeFormat.PREFER_ARGB_8888) 18 | .signature(signature) 19 | .fitCenter() 20 | 21 | val builder = Glide.with(context) 22 | .asBitmap() 23 | .load(uri.toString().substringAfter("file://")) 24 | .apply(options) 25 | .transform(RotateTransformation(-degrees)) 26 | .submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) 27 | 28 | return builder.get() 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/helpers/PicassoRegionDecoder.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.helpers 2 | 3 | import android.content.Context 4 | import android.graphics.* 5 | import android.net.Uri 6 | import com.davemorrissey.labs.subscaleview.ImageRegionDecoder 7 | 8 | class PicassoRegionDecoder( 9 | val showHighestQuality: Boolean, 10 | val screenWidth: Int, 11 | val screenHeight: Int, 12 | val minTileDpi: Int 13 | ) : ImageRegionDecoder { 14 | private var decoder: BitmapRegionDecoder? = null 15 | private val decoderLock = Any() 16 | 17 | override fun init(context: Context, uri: Uri): Point { 18 | val newUri = Uri.parse(uri.toString().replace("%", "%25").replace("#", "%23")) 19 | val inputStream = context.contentResolver.openInputStream(newUri) 20 | decoder = BitmapRegionDecoder.newInstance(inputStream!!, false) 21 | return Point(decoder!!.width, decoder!!.height) 22 | } 23 | 24 | override fun decodeRegion(rect: Rect, sampleSize: Int): Bitmap { 25 | synchronized(decoderLock) { 26 | var newSampleSize = sampleSize 27 | if (!showHighestQuality && minTileDpi == LOW_TILE_DPI) { 28 | if ((rect.width() > rect.height() && screenWidth > screenHeight) || (rect.height() > rect.width() && screenHeight > screenWidth)) { 29 | if ((rect.width() / sampleSize > screenWidth || rect.height() / sampleSize > screenHeight)) { 30 | newSampleSize *= 2 31 | } 32 | } 33 | } 34 | 35 | val options = BitmapFactory.Options() 36 | options.inSampleSize = newSampleSize 37 | options.inPreferredConfig = Bitmap.Config.ARGB_8888 38 | val bitmap = decoder!!.decodeRegion(rect, options) 39 | return bitmap ?: throw RuntimeException("Region decoder returned null bitmap - image format may not be supported") 40 | } 41 | } 42 | 43 | override fun isReady() = decoder != null && !decoder!!.isRecycled 44 | 45 | override fun recycle() { 46 | decoder!!.recycle() 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/helpers/PicassoRoundedCornersTransformation.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.helpers 2 | 3 | import android.graphics.* 4 | import com.squareup.picasso.Transformation 5 | 6 | // taken from https://stackoverflow.com/a/35241525/1967672 7 | class PicassoRoundedCornersTransformation(private val radius: Float) : Transformation { 8 | 9 | override fun transform(source: Bitmap): Bitmap { 10 | val size = Math.min(source.width, source.height) 11 | val x = (source.width - size) / 2 12 | val y = (source.height - size) / 2 13 | val squaredBitmap = Bitmap.createBitmap(source, x, y, size, size) 14 | if (squaredBitmap != source) { 15 | source.recycle() 16 | } 17 | 18 | val bitmap = Bitmap.createBitmap(size, size, source.config) 19 | val canvas = Canvas(bitmap) 20 | val paint = Paint() 21 | val shader = BitmapShader(squaredBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP) 22 | paint.shader = shader 23 | paint.isAntiAlias = true 24 | 25 | val rect = RectF(0f, 0f, source.width.toFloat(), source.height.toFloat()) 26 | canvas.drawRoundRect(rect, radius, radius, paint) 27 | squaredBitmap.recycle() 28 | return bitmap 29 | } 30 | 31 | override fun key() = "rounded_corners" 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/helpers/RotateTransformation.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.helpers 2 | 3 | import android.graphics.Bitmap 4 | import android.graphics.Matrix 5 | import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool 6 | import com.bumptech.glide.load.resource.bitmap.BitmapTransformation 7 | import java.security.MessageDigest 8 | 9 | class RotateTransformation(var degrees: Int) : BitmapTransformation() { 10 | override fun updateDiskCacheKey(messageDigest: MessageDigest) {} 11 | 12 | override fun transform(pool: BitmapPool, toTransform: Bitmap, outWidth: Int, outHeight: Int): Bitmap { 13 | val matrix = Matrix() 14 | matrix.postRotate(degrees.toFloat()) 15 | return Bitmap.createBitmap(toTransform, 0, 0, toTransform.width, toTransform.height, matrix, true) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/interfaces/DateTakensDao.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.interfaces 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import org.fossify.gallery.models.DateTaken 8 | 9 | @Dao 10 | interface DateTakensDao { 11 | @Insert(onConflict = OnConflictStrategy.REPLACE) 12 | fun insertAll(dateTakens: List) 13 | 14 | @Query("SELECT full_path, filename, parent_path, date_taken, last_fixed, last_modified FROM date_takens WHERE parent_path = :path COLLATE NOCASE") 15 | fun getDateTakensFromPath(path: String): List 16 | 17 | @Query("SELECT full_path, filename, parent_path, date_taken, last_fixed, last_modified FROM date_takens") 18 | fun getAllDateTakens(): List 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/interfaces/DirectoryDao.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.interfaces 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import org.fossify.gallery.helpers.RECYCLE_BIN 8 | import org.fossify.gallery.models.Directory 9 | 10 | @Dao 11 | interface DirectoryDao { 12 | @Query("SELECT path, thumbnail, filename, media_count, last_modified, date_taken, size, location, media_types, sort_value FROM directories") 13 | fun getAll(): List 14 | 15 | @Insert(onConflict = OnConflictStrategy.REPLACE) 16 | fun insert(directory: Directory) 17 | 18 | @Insert(onConflict = OnConflictStrategy.REPLACE) 19 | fun insertAll(directories: List) 20 | 21 | @Query("DELETE FROM directories WHERE path = :path COLLATE NOCASE") 22 | fun deleteDirPath(path: String) 23 | 24 | @Query("UPDATE OR REPLACE directories SET thumbnail = :thumbnail, media_count = :mediaCnt, last_modified = :lastModified, date_taken = :dateTaken, size = :size, media_types = :mediaTypes, sort_value = :sortValue WHERE path = :path COLLATE NOCASE") 25 | fun updateDirectory(path: String, thumbnail: String, mediaCnt: Int, lastModified: Long, dateTaken: Long, size: Long, mediaTypes: Int, sortValue: String) 26 | 27 | @Query("UPDATE directories SET thumbnail = :thumbnail, filename = :name, path = :newPath WHERE path = :oldPath COLLATE NOCASE") 28 | fun updateDirectoryAfterRename(thumbnail: String, name: String, newPath: String, oldPath: String) 29 | 30 | @Query("DELETE FROM directories WHERE path = \'$RECYCLE_BIN\' COLLATE NOCASE") 31 | fun deleteRecycleBin() 32 | 33 | @Query("SELECT thumbnail FROM directories WHERE path = :path") 34 | fun getDirectoryThumbnail(path: String): String? 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/interfaces/DirectoryOperationsListener.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.interfaces 2 | 3 | import org.fossify.gallery.models.Directory 4 | import java.io.File 5 | 6 | interface DirectoryOperationsListener { 7 | fun refreshItems() 8 | 9 | fun deleteFolders(folders: ArrayList) 10 | 11 | fun recheckPinnedFolders() 12 | 13 | fun updateDirectories(directories: ArrayList) 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/interfaces/FavoritesDao.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.interfaces 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import org.fossify.gallery.models.Favorite 8 | 9 | @Dao 10 | interface FavoritesDao { 11 | @Insert(onConflict = OnConflictStrategy.REPLACE) 12 | fun insert(favorite: Favorite) 13 | 14 | @Insert(onConflict = OnConflictStrategy.REPLACE) 15 | fun insertAll(favorites: List) 16 | 17 | @Query("SELECT favorites.full_path FROM favorites INNER JOIN media ON favorites.full_path = media.full_path WHERE media.deleted_ts = 0") 18 | fun getValidFavoritePaths(): List 19 | 20 | @Query("SELECT id FROM favorites WHERE full_path = :path COLLATE NOCASE") 21 | fun isFavorite(path: String): Boolean 22 | 23 | @Query("UPDATE OR REPLACE favorites SET filename = :newFilename, full_path = :newFullPath, parent_path = :newParentPath WHERE full_path = :oldPath COLLATE NOCASE") 24 | fun updateFavorite(newFilename: String, newFullPath: String, newParentPath: String, oldPath: String) 25 | 26 | @Query("DELETE FROM favorites WHERE full_path = :path COLLATE NOCASE") 27 | fun deleteFavoritePath(path: String) 28 | 29 | @Query("DELETE FROM favorites") 30 | fun clearFavorites() 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/interfaces/MediaOperationsListener.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.interfaces 2 | 3 | import org.fossify.commons.models.FileDirItem 4 | import org.fossify.gallery.models.ThumbnailItem 5 | 6 | interface MediaOperationsListener { 7 | fun refreshItems() 8 | 9 | fun tryDeleteFiles(fileDirItems: ArrayList, skipRecycleBin: Boolean) 10 | 11 | fun selectedPaths(paths: ArrayList) 12 | 13 | fun updateMediaGridDecoration(media: ArrayList) 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/interfaces/PlaybackSpeedListener.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.interfaces 2 | 3 | interface PlaybackSpeedListener { 4 | fun updatePlaybackSpeed(speed: Float) 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/interfaces/WidgetsDao.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.interfaces 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import org.fossify.gallery.models.Widget 8 | 9 | @Dao 10 | interface WidgetsDao { 11 | @Query("SELECT * FROM widgets") 12 | fun getWidgets(): List 13 | 14 | @Insert(onConflict = OnConflictStrategy.REPLACE) 15 | fun insertOrUpdate(widget: Widget): Long 16 | 17 | @Query("DELETE FROM widgets WHERE widget_id = :widgetId") 18 | fun deleteWidgetId(widgetId: Int) 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/models/AlbumCover.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.models 2 | 3 | data class AlbumCover(val path: String, val tmb: String) 4 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/models/DateTaken.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.models 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Entity 5 | import androidx.room.Index 6 | import androidx.room.PrimaryKey 7 | 8 | // Date Taken in the MediaStore is unreliable and hard to work with, keep the values in an own database 9 | // It is used at sorting files by date taken, checking EXIF file by file would be way too slow 10 | @Entity(tableName = "date_takens", indices = [Index(value = ["full_path"], unique = true)]) 11 | data class DateTaken( 12 | @PrimaryKey(autoGenerate = true) var id: Int?, 13 | @ColumnInfo(name = "full_path") var fullPath: String, 14 | @ColumnInfo(name = "filename") var filename: String, 15 | @ColumnInfo(name = "parent_path") var parentPath: String, 16 | @ColumnInfo(name = "date_taken") var taken: Long, 17 | @ColumnInfo(name = "last_fixed") var lastFixed: Int, 18 | @ColumnInfo(name = "last_modified") var lastModified: Long 19 | ) 20 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/models/Directory.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.models 2 | 3 | import android.content.Context 4 | import androidx.room.* 5 | import com.bumptech.glide.signature.ObjectKey 6 | import org.fossify.commons.extensions.formatDate 7 | import org.fossify.commons.extensions.formatSize 8 | import org.fossify.commons.helpers.* 9 | import org.fossify.gallery.helpers.RECYCLE_BIN 10 | 11 | @Entity(tableName = "directories", indices = [Index(value = ["path"], unique = true)]) 12 | data class Directory( 13 | @PrimaryKey(autoGenerate = true) var id: Long?, 14 | @ColumnInfo(name = "path") var path: String, 15 | @ColumnInfo(name = "thumbnail") var tmb: String, 16 | @ColumnInfo(name = "filename") var name: String, 17 | @ColumnInfo(name = "media_count") var mediaCnt: Int, 18 | @ColumnInfo(name = "last_modified") var modified: Long, 19 | @ColumnInfo(name = "date_taken") var taken: Long, 20 | @ColumnInfo(name = "size") var size: Long, 21 | @ColumnInfo(name = "location") var location: Int, 22 | @ColumnInfo(name = "media_types") var types: Int, 23 | @ColumnInfo(name = "sort_value") var sortValue: String, 24 | 25 | // used with "Group direct subfolders" enabled 26 | @Ignore var subfoldersCount: Int = 0, 27 | @Ignore var subfoldersMediaCount: Int = 0, 28 | @Ignore var containsMediaFilesDirectly: Boolean = true 29 | ) { 30 | 31 | constructor() : this(null, "", "", "", 0, 0L, 0L, 0L, 0, 0, "", 0, 0) 32 | 33 | fun getBubbleText(sorting: Int, context: Context, dateFormat: String? = null, timeFormat: String? = null) = when { 34 | sorting and SORT_BY_NAME != 0 -> name 35 | sorting and SORT_BY_PATH != 0 -> path 36 | sorting and SORT_BY_SIZE != 0 -> size.formatSize() 37 | sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context, dateFormat, timeFormat) 38 | sorting and SORT_BY_RANDOM != 0 -> name 39 | else -> taken.formatDate(context) 40 | } 41 | 42 | fun areFavorites() = path == FAVORITES 43 | 44 | fun isRecycleBin() = path == RECYCLE_BIN 45 | 46 | fun getKey() = ObjectKey("$path-$modified") 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/models/Favorite.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.models 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Entity 5 | import androidx.room.Index 6 | import androidx.room.PrimaryKey 7 | 8 | @Entity(tableName = "favorites", indices = [Index(value = ["full_path"], unique = true)]) 9 | data class Favorite( 10 | @PrimaryKey(autoGenerate = true) var id: Int?, 11 | @ColumnInfo(name = "full_path") var fullPath: String, 12 | @ColumnInfo(name = "filename") var filename: String, 13 | @ColumnInfo(name = "parent_path") var parentPath: String 14 | ) 15 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/models/FilterItem.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.models 2 | 3 | import android.graphics.Bitmap 4 | import com.zomato.photofilters.imageprocessors.Filter 5 | 6 | data class FilterItem(var bitmap: Bitmap, val filter: Filter) 7 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/models/PaintOptions.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.models 2 | 3 | import android.graphics.Color 4 | 5 | data class PaintOptions(var color: Int = Color.BLACK, var strokeWidth: Float = 5f) 6 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/models/ThumbnailItem.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.models 2 | 3 | open class ThumbnailItem 4 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/models/ThumbnailSection.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.models 2 | 3 | data class ThumbnailSection(val title: String) : ThumbnailItem() 4 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/models/Widget.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.models 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Entity 5 | import androidx.room.Index 6 | import androidx.room.PrimaryKey 7 | 8 | @Entity(tableName = "widgets", indices = [(Index(value = ["widget_id"], unique = true))]) 9 | data class Widget( 10 | @PrimaryKey(autoGenerate = true) var id: Int?, 11 | @ColumnInfo(name = "widget_id") var widgetId: Int, 12 | @ColumnInfo(name = "folder_path") var folderPath: String 13 | ) 14 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/receivers/BootCompletedReceiver.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.receivers 2 | 3 | import android.content.BroadcastReceiver 4 | import android.content.Context 5 | import android.content.Intent 6 | import org.fossify.commons.helpers.ensureBackgroundThread 7 | import org.fossify.gallery.extensions.updateDirectoryPath 8 | import org.fossify.gallery.helpers.MediaFetcher 9 | 10 | class BootCompletedReceiver : BroadcastReceiver() { 11 | override fun onReceive(context: Context, intent: Intent) { 12 | ensureBackgroundThread { 13 | MediaFetcher(context).getFoldersToScan().forEach { 14 | context.updateDirectoryPath(it) 15 | } 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/receivers/RefreshMediaReceiver.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.receivers 2 | 3 | import android.content.BroadcastReceiver 4 | import android.content.Context 5 | import android.content.Intent 6 | import org.fossify.commons.helpers.REFRESH_PATH 7 | import org.fossify.gallery.extensions.addPathToDB 8 | 9 | class RefreshMediaReceiver : BroadcastReceiver() { 10 | override fun onReceive(context: Context, intent: Intent) { 11 | val path = intent.getStringExtra(REFRESH_PATH) ?: return 12 | context.addPathToDB(path) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/svg/SvgDecoder.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.svg 2 | 3 | import com.bumptech.glide.load.Options 4 | import com.bumptech.glide.load.ResourceDecoder 5 | import com.bumptech.glide.load.engine.Resource 6 | import com.bumptech.glide.load.resource.SimpleResource 7 | import com.caverock.androidsvg.SVG 8 | import com.caverock.androidsvg.SVGParseException 9 | 10 | import java.io.IOException 11 | import java.io.InputStream 12 | 13 | class SvgDecoder : ResourceDecoder { 14 | 15 | override fun handles(source: InputStream, options: Options) = true 16 | 17 | @Throws(IOException::class) 18 | override fun decode(source: InputStream, width: Int, height: Int, options: Options): Resource { 19 | try { 20 | val svg = SVG.getFromInputStream(source) 21 | return SimpleResource(svg) 22 | } catch (ex: SVGParseException) { 23 | throw IOException("Cannot load SVG from stream", ex) 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/svg/SvgDrawableTranscoder.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.svg 2 | 3 | import android.graphics.drawable.PictureDrawable 4 | import com.bumptech.glide.load.Options 5 | import com.bumptech.glide.load.engine.Resource 6 | import com.bumptech.glide.load.resource.SimpleResource 7 | import com.bumptech.glide.load.resource.transcode.ResourceTranscoder 8 | import com.caverock.androidsvg.SVG 9 | 10 | class SvgDrawableTranscoder : ResourceTranscoder { 11 | override fun transcode(toTranscode: Resource, options: Options): Resource { 12 | val svg = toTranscode.get() 13 | val picture = svg.renderToPicture() 14 | val drawable = PictureDrawable(picture) 15 | return SimpleResource(drawable) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/svg/SvgModule.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.svg 2 | 3 | import android.content.Context 4 | import android.graphics.drawable.PictureDrawable 5 | 6 | import com.bumptech.glide.Glide 7 | import com.bumptech.glide.Registry 8 | import com.bumptech.glide.annotation.GlideModule 9 | import com.bumptech.glide.module.AppGlideModule 10 | import com.caverock.androidsvg.SVG 11 | 12 | import java.io.InputStream 13 | 14 | @GlideModule 15 | class SvgModule : AppGlideModule() { 16 | override fun registerComponents(context: Context, glide: Glide, registry: Registry) { 17 | registry.register(SVG::class.java, PictureDrawable::class.java, SvgDrawableTranscoder()).append(InputStream::class.java, SVG::class.java, SvgDecoder()) 18 | } 19 | 20 | override fun isManifestParsingEnabled() = false 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/gallery/svg/SvgSoftwareLayerSetter.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.gallery.svg 2 | 3 | import android.graphics.drawable.PictureDrawable 4 | import android.widget.ImageView 5 | 6 | import com.bumptech.glide.load.DataSource 7 | import com.bumptech.glide.load.engine.GlideException 8 | import com.bumptech.glide.request.RequestListener 9 | import com.bumptech.glide.request.target.ImageViewTarget 10 | import com.bumptech.glide.request.target.Target 11 | 12 | class SvgSoftwareLayerSetter : RequestListener { 13 | 14 | override fun onLoadFailed(e: GlideException?, model: Any?, target: Target, isFirstResource: Boolean): Boolean { 15 | val view = (target as ImageViewTarget<*>).view 16 | view.setLayerType(ImageView.LAYER_TYPE_NONE, null) 17 | return false 18 | } 19 | 20 | override fun onResourceReady( 21 | resource: PictureDrawable, 22 | model: Any, 23 | target: Target, 24 | dataSource: DataSource, 25 | isFirstResource: Boolean 26 | ): Boolean { 27 | val view = (target as ImageViewTarget<*>).view 28 | view.setLayerType(ImageView.LAYER_TYPE_SOFTWARE, null) 29 | return false 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_panorama_outline.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/drawable-hdpi/ic_panorama_outline.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/sample_logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/drawable-hdpi/sample_logo.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/img_widget_preview.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/drawable-nodpi/img_widget_preview.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_panorama_outline.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/drawable-xhdpi/ic_panorama_outline.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/sample_logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/drawable-xhdpi/sample_logo.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_panorama_outline.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/drawable-xxhdpi/ic_panorama_outline.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/sample_logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/drawable-xxhdpi/sample_logo.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_panorama_outline.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/drawable-xxxhdpi/ic_panorama_outline.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/sample_logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/drawable-xxxhdpi/sample_logo.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/black_rounded_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_black_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/darkened_automatic_circle_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/extended_details_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gradient_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gradient_background_flipped.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_aspect_ratio_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cardboard_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_crop_rotate_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_draw_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_explore_off_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_explore_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_files_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_flip_horizontally_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_flip_vertically_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_folders_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.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_maximize_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_minimize_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_photo_filter_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_play_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_playback_speed_slow_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_playback_speed_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_portrait_photo_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_rotate_right_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_slideshow_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_vector_speaker_off.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_vector_speaker_on.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_vector_warning_colored.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/placeholder_rounded_big.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/placeholder_rounded_small.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/placeholder_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shortcut_image.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/stroke_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_manage_folders.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 21 | 22 | 29 | 30 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_medium.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 16 | 17 | 23 | 24 | 32 | 33 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_new_photo_edit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_new_video_edit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_set_wallpaper.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 21 | 22 | 23 | 24 | 29 | 30 | 36 | 37 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/bottom_editor_actions_filter.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/bottom_set_wallpaper_actions.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 22 | 23 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_confirm_delete_folder.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | 16 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_delete_with_remember.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | 25 | 26 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_exclude_folder.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 20 | 21 | 28 | 29 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_grant_all_files.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_medium_picker.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 12 | 13 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_resize_multiple_images.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 16 | 17 | 29 | 30 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_storage_permission_required.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/editor_filter_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_holder.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 19 | 20 | 24 | 25 | 33 | 34 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_manage_folder.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 20 | 21 | 31 | 32 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_media_load_error.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/portrait_photo_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/thumbnail_section.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 25 | 26 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /app/src/main/res/menu/cab_hidden_folders.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_add_folder.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_editor.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_included_folders.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_main_intent.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 11 | 16 | 21 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_set_wallpaper.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_video_player.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 11 | 16 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/menu/photo_video_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 11 | 16 | 21 | 26 | 31 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /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/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_amber.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_amber.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_blue.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_blue_grey.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_blue_grey.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_brown.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_brown.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_cyan.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_cyan.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_deep_orange.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_deep_orange.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_deep_purple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_deep_purple.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_grey_black.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_grey_black.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_indigo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_indigo.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_light_blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_light_blue.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_light_green.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_light_green.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_lime.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_lime.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_orange.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_orange.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_pink.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_pink.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_purple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_purple.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_red.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_red.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_teal.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_teal.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_yellow.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-hdpi/ic_launcher_yellow.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_amber.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_amber.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_blue.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_blue_grey.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_blue_grey.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_brown.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_brown.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_cyan.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_cyan.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_deep_orange.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_deep_orange.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_deep_purple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_deep_purple.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_grey_black.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_grey_black.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_indigo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_indigo.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_light_blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_light_blue.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_light_green.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_light_green.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_lime.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_lime.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_orange.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_orange.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_pink.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_pink.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_purple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_purple.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_red.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_red.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_teal.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_teal.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_yellow.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-mdpi/ic_launcher_yellow.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_amber.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_amber.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_blue.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_blue_grey.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_blue_grey.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_brown.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_brown.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_cyan.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_cyan.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_deep_orange.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_deep_orange.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_deep_purple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_deep_purple.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_grey_black.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_grey_black.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_indigo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_indigo.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_light_blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_light_blue.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_light_green.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_light_green.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_lime.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_lime.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_orange.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_orange.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_pink.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_pink.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_purple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_purple.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_red.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_red.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_teal.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_teal.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_yellow.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xhdpi/ic_launcher_yellow.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_amber.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_amber.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_blue.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_blue_grey.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_blue_grey.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_brown.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_brown.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_cyan.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_cyan.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_deep_orange.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_deep_orange.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_deep_purple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_deep_purple.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_grey_black.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_grey_black.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_indigo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_indigo.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_light_blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_light_blue.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_light_green.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_light_green.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_lime.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_lime.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_orange.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_orange.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_pink.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_pink.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_purple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_purple.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_red.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_red.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_teal.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_teal.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_yellow.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxhdpi/ic_launcher_yellow.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_amber.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_amber.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_blue.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_blue_grey.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_blue_grey.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_brown.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_brown.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_cyan.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_cyan.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_deep_orange.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_deep_orange.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_deep_purple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_deep_purple.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_grey_black.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_grey_black.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_indigo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_indigo.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_blue.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_blue.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_green.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_green.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_lime.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_lime.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_orange.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_orange.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_pink.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_pink.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_purple.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_purple.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_red.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_red.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_teal.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_teal.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_yellow.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Gallery/7c11d0a2ffac25902b4007ca1f45d05080fa8f52/app/src/main/res/mipmap-xxxhdpi/ic_launcher_yellow.webp -------------------------------------------------------------------------------- /app/src/main/res/values-az/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Qalereya 4 | Redaktə 5 | Kameranı aç 6 | (gizli) 7 | Pin qovluğu 8 | Unpin qovluğu 9 | Sevimlini göstər/gizlət 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-b+es+419/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-bn-rBD/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-br/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Videoioù 4 | Skeudennoù 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-bs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-ckb/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | دەستکاری 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-cr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /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-fil/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-ia/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Location incognite 4 | Tote le dossieres 5 | Volumine 6 | Modificar 7 | Galeria 8 | (celate) 9 | Monstrar in le mappa 10 | Altere dossier 11 | Luminositate 12 | Aperir le camera 13 | Monstrar le contento de tote le dossieres 14 | Imagines 15 | Videos 16 | -------------------------------------------------------------------------------- /app/src/main/res/values-is/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-kn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /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 | 3 | Paturēt ekrānu ieslēgtu, kamēr attēli tiek apskatīti pilnekrānā 4 | 5 | Vai tiešām atjaunot %d datņu? 6 | Vai tiešām atjaunot %d datni? 7 | Vai tiešām atjaunot %d datnes? 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-mk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-ml/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-nn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /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 | ہور فولڈر 10 | نامعلوم ستھتی 11 | آواز 12 | چمک 13 | ٹھیک کیتا جا رہا اے۔ ۔ ۔ 14 | تصویراں 15 | ویڈیو 16 | جیف 17 | ایس‌وی‌گی 18 | چوڑائی 19 | اُچائی 20 | ایڈیٹر 21 | گھُنماؤ 22 | ہور 23 | کوئی نہیں 24 | سلائیڈ 25 | فولڈر 26 | ایکسٹینشن 27 | رفتار 28 | سمجھوتا 29 | ورگ 30 | تھمنیل 31 | 32 | -------------------------------------------------------------------------------- /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 | 150dp 4 | 120dp 5 | 30dp 6 | 38dp 7 | 70dp 8 | 80dp 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-te/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-th/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-w480dp/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 3 | 3 4 | 5 5 | 5 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-w600dp/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 3 | 7 4 | 7 5 | 8 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-zgh/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #BB000000 4 | #66000000 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 150dp 4 | 100dp 5 | 20dp 6 | 22dp 7 | 17dp 8 | 26dp 9 | 34dp 10 | 96dp 11 | 70dp 12 | 60dp 13 | 60dp 14 | 68dp 15 | 72dp 16 | 64dp 17 | 128dp 18 | 164dp 19 | 48dp 20 | 76dp 21 | 90dp 22 | 98dp 23 | 180dp 24 | 48dp 25 | 86dp 26 | 110dp 27 | 40dp 28 | 30dp 29 | 180dp 30 | 180dp 31 | 36dp 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/values/donottranslate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Fossify Gallery 4 | GIF 5 | RAW 6 | SVG 7 | org.fossify.gallery 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 2 3 | 3 4 | 3 5 | 4 6 | 7 | 33794 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 12 | 13 | 17 | 18 |