├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── resources.properties │ │ │ ├── font │ │ │ │ ├── one_ui_sans_400.ttf │ │ │ │ ├── one_ui_sans_600.ttf │ │ │ │ └── one_ui_sans_700.ttf │ │ │ ├── mipmap-hdpi │ │ │ │ ├── dp_hridayan.png │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_monochrome.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_monochrome.png │ │ │ ├── raw │ │ │ │ └── spinning_gears.lottie │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_monochrome.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_monochrome.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_monochrome.png │ │ │ ├── xml │ │ │ │ ├── file_paths.xml │ │ │ │ ├── backup_rules.xml │ │ │ │ └── data_extraction_rules.xml │ │ │ ├── values │ │ │ │ └── themes.xml │ │ │ ├── mipmap-anydpi │ │ │ │ └── ic_launcher.xml │ │ │ └── drawable │ │ │ │ ├── ic_version.xml │ │ │ │ ├── ic_mail.xml │ │ │ │ ├── ic_format_italic.xml │ │ │ │ ├── ic_license.xml │ │ │ │ ├── ic_telegram.xml │ │ │ │ ├── ic_format_clear.xml │ │ │ │ ├── ic_format_bold.xml │ │ │ │ ├── ic_format_underline.xml │ │ │ │ ├── ic_check_circle.xml │ │ │ │ ├── ic_font_download.xml │ │ │ │ ├── ic_info.xml │ │ │ │ ├── ic_add_comment.xml │ │ │ │ ├── ic_github.xml │ │ │ │ ├── ic_matchcase.xml │ │ │ │ ├── ic_handyman.xml │ │ │ │ ├── ic_report.xml │ │ │ │ ├── ic_database.xml │ │ │ │ ├── ic_notifications_important.xml │ │ │ │ ├── ic_upload_file.xml │ │ │ │ ├── ic_notifications.xml │ │ │ │ ├── ic_restore_page.xml │ │ │ │ ├── ic_release_alert.xml │ │ │ │ ├── ic_upcoming.xml │ │ │ │ ├── ic_reset_settings.xml │ │ │ │ └── ic_settings.xml │ │ ├── java │ │ │ └── in │ │ │ │ └── hridayan │ │ │ │ └── driftly │ │ │ │ ├── core │ │ │ │ ├── domain │ │ │ │ │ ├── model │ │ │ │ │ │ ├── StreakType.kt │ │ │ │ │ │ ├── GithubReleaseType.kt │ │ │ │ │ │ ├── SubjectCardStyle.kt │ │ │ │ │ │ ├── TotalAttendance.kt │ │ │ │ │ │ ├── AttendanceStatus.kt │ │ │ │ │ │ ├── SubjectAttendance.kt │ │ │ │ │ │ ├── SubjectError.kt │ │ │ │ │ │ ├── NotificationTags.kt │ │ │ │ │ │ └── DownloadState.kt │ │ │ │ │ ├── repository │ │ │ │ │ │ ├── DownloadRepository.kt │ │ │ │ │ │ ├── SubjectRepository.kt │ │ │ │ │ │ └── AttendanceRepository.kt │ │ │ │ │ ├── provider │ │ │ │ │ │ └── SeedColorProvider.kt │ │ │ │ │ └── usecase │ │ │ │ │ │ └── DownloadApkUseCase.kt │ │ │ │ ├── presentation │ │ │ │ │ ├── components │ │ │ │ │ │ ├── svg │ │ │ │ │ │ │ └── _DrawableVectors.kt │ │ │ │ │ │ ├── progress │ │ │ │ │ │ │ ├── LoadingSpinner.kt │ │ │ │ │ │ │ ├── CircularProgressWithText.kt │ │ │ │ │ │ │ └── AnimatedCircularProgressIndicator.kt │ │ │ │ │ │ ├── tooltip │ │ │ │ │ │ │ └── TooltipContent.kt │ │ │ │ │ │ ├── button │ │ │ │ │ │ │ └── BackButton.kt │ │ │ │ │ │ ├── checkbox │ │ │ │ │ │ │ └── CheckboxWithText.kt │ │ │ │ │ │ ├── card │ │ │ │ │ │ │ └── RoundedCornerCard.kt │ │ │ │ │ │ ├── lottie │ │ │ │ │ │ │ └── SpinningGearsLottie.kt │ │ │ │ │ │ ├── canvas │ │ │ │ │ │ │ ├── HorizontalProgressWave.kt │ │ │ │ │ │ │ └── VerticalProgressWave.kt │ │ │ │ │ │ └── text │ │ │ │ │ │ │ └── AutoResizeableText.kt │ │ │ │ │ ├── theme │ │ │ │ │ │ └── Shape.kt │ │ │ │ │ └── provider │ │ │ │ │ │ └── FontProvider.kt │ │ │ │ ├── di │ │ │ │ │ ├── qualifiers │ │ │ │ │ │ └── ApiHttpClient.kt │ │ │ │ │ ├── entry │ │ │ │ │ │ └── WorkerEntryPoint.kt │ │ │ │ │ ├── UseCaseModule.kt │ │ │ │ │ ├── DatabaseModule.kt │ │ │ │ │ ├── RepositoryModule.kt │ │ │ │ │ ├── SettingsModule.kt │ │ │ │ │ └── NetworkModule.kt │ │ │ │ ├── data │ │ │ │ │ ├── model │ │ │ │ │ │ ├── SubjectEntity.kt │ │ │ │ │ │ └── AttendanceEntity.kt │ │ │ │ │ ├── database │ │ │ │ │ │ ├── Migrations.kt │ │ │ │ │ │ ├── Converters.kt │ │ │ │ │ │ ├── SubjectDatabase.kt │ │ │ │ │ │ └── SubjectDao.kt │ │ │ │ │ └── repository │ │ │ │ │ │ ├── SubjectRepositoryImpl.kt │ │ │ │ │ │ └── AttendanceRepositoryImpl.kt │ │ │ │ ├── utils │ │ │ │ │ ├── HapticUtils.kt │ │ │ │ │ ├── ApkInstaller.kt │ │ │ │ │ ├── FileUtils.kt │ │ │ │ │ ├── PaletteExtensions.kt │ │ │ │ │ ├── Utils.kt │ │ │ │ │ ├── EncryptionHelper.kt │ │ │ │ │ └── MiUiCheck.kt │ │ │ │ └── common │ │ │ │ │ ├── constants │ │ │ │ │ └── UrlConst.kt │ │ │ │ │ └── LocalSettings.kt │ │ │ │ ├── settings │ │ │ │ ├── domain │ │ │ │ │ ├── model │ │ │ │ │ │ ├── SettingsType.kt │ │ │ │ │ │ ├── ChangelogItem.kt │ │ │ │ │ │ ├── RadioButtonOptions.kt │ │ │ │ │ │ ├── GithubRelease.kt │ │ │ │ │ │ ├── BackupOption.kt │ │ │ │ │ │ ├── CustomFontFamily.kt │ │ │ │ │ │ ├── NotificationState.kt │ │ │ │ │ │ ├── UpdateResult.kt │ │ │ │ │ │ ├── BackupData.kt │ │ │ │ │ │ ├── PreferenceGroup.kt │ │ │ │ │ │ └── SettingsState.kt │ │ │ │ │ ├── repository │ │ │ │ │ │ ├── UpdateRepository.kt │ │ │ │ │ │ ├── BackupAndRestoreRepository.kt │ │ │ │ │ │ └── SettingsRepository.kt │ │ │ │ │ └── usecase │ │ │ │ │ │ ├── ToggleSettingUseCase.kt │ │ │ │ │ │ ├── GetAllChangelogsUseCase.kt │ │ │ │ │ │ └── CheckUpdateUseCase.kt │ │ │ │ ├── data │ │ │ │ │ ├── local │ │ │ │ │ │ ├── provider │ │ │ │ │ │ │ └── SettingsDataStoreProvider.kt │ │ │ │ │ │ ├── source │ │ │ │ │ │ │ └── VersionList.kt │ │ │ │ │ │ └── SettingsKeys.kt │ │ │ │ │ └── remote │ │ │ │ │ │ ├── dto │ │ │ │ │ │ ├── GithubAssetDto.kt │ │ │ │ │ │ └── GithubReleaseDto.kt │ │ │ │ │ │ ├── mapper │ │ │ │ │ │ └── GithubReleaseMapper.kt │ │ │ │ │ │ ├── api │ │ │ │ │ │ └── GithubApi.kt │ │ │ │ │ │ └── repository │ │ │ │ │ │ └── UpdateRepositoryImpl.kt │ │ │ │ └── presentation │ │ │ │ │ ├── event │ │ │ │ │ └── SettingsUiEvent.kt │ │ │ │ │ ├── page │ │ │ │ │ ├── changelog │ │ │ │ │ │ └── viewmodel │ │ │ │ │ │ │ └── ChangelogViewModel.kt │ │ │ │ │ ├── customisation │ │ │ │ │ │ └── viewmodel │ │ │ │ │ │ │ └── CustomisationViewModel.kt │ │ │ │ │ ├── autoupdate │ │ │ │ │ │ └── viewmodel │ │ │ │ │ │ │ └── AutoUpdateViewModel.kt │ │ │ │ │ └── lookandfeel │ │ │ │ │ │ └── viewmodel │ │ │ │ │ │ └── LookAndFeelViewModel.kt │ │ │ │ │ ├── components │ │ │ │ │ ├── shape │ │ │ │ │ │ └── CardCornerShape.kt │ │ │ │ │ ├── switch │ │ │ │ │ │ └── SettingsSwitch.kt │ │ │ │ │ ├── item │ │ │ │ │ │ ├── PreferenceItemView.kt │ │ │ │ │ │ └── ChangelogItemLayout.kt │ │ │ │ │ └── image │ │ │ │ │ │ └── ProfilePic.kt │ │ │ │ │ └── provider │ │ │ │ │ └── RadioGroupOptionsProvider.kt │ │ │ │ ├── App.kt │ │ │ │ ├── navigation │ │ │ │ ├── LocalNavController.kt │ │ │ │ └── NavTransitions.kt │ │ │ │ ├── calender │ │ │ │ ├── domain │ │ │ │ │ └── usecase │ │ │ │ │ │ └── GetWeekDayLabelsUseCase.kt │ │ │ │ └── presentation │ │ │ │ │ ├── components │ │ │ │ │ ├── text │ │ │ │ │ │ └── MonthYearHeader.kt │ │ │ │ │ ├── bottomsheet │ │ │ │ │ │ └── SubjectAttendanceDataBottomSheet.kt │ │ │ │ │ ├── color │ │ │ │ │ │ └── AttendanceColors.kt │ │ │ │ │ ├── canvas │ │ │ │ │ │ ├── WeekDayLabels.kt │ │ │ │ │ │ └── MonthYearPicker.kt │ │ │ │ │ └── modifiers │ │ │ │ │ │ └── Modifiers.kt │ │ │ │ │ └── image │ │ │ │ │ └── UndrawDatePicker.kt │ │ │ │ ├── notification │ │ │ │ ├── worker │ │ │ │ │ ├── AttendanceReminderWorker.kt │ │ │ │ │ ├── UpdateCheckWorker.kt │ │ │ │ │ └── MissedAttendanceAlertWorker.kt │ │ │ │ ├── NotificationUtils.kt │ │ │ │ ├── NotificationSetup.kt │ │ │ │ └── helper │ │ │ │ │ └── NotificationHelper.kt │ │ │ │ ├── home │ │ │ │ └── presentation │ │ │ │ │ └── components │ │ │ │ │ ├── text │ │ │ │ │ └── SubjectText.kt │ │ │ │ │ ├── image │ │ │ │ │ └── UndrawRelaxedReading.kt │ │ │ │ │ └── label │ │ │ │ │ └── Label.kt │ │ │ │ └── MainActivity.kt │ │ ├── assets │ │ │ └── translators.json │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── in │ │ │ └── hridayan │ │ │ └── driftly │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── in │ │ └── hridayan │ │ └── driftly │ │ └── ExampleInstrumentedTest.kt └── proguard-rules.pro ├── fastlane └── metadata │ └── android │ └── en-US │ ├── title.txt │ ├── changelogs │ ├── 12.txt │ ├── 11.txt │ ├── 7.txt │ ├── 10.txt │ ├── 6.txt │ ├── 2.txt │ ├── 3.txt │ ├── 4.txt │ ├── 1.txt │ ├── 5.txt │ └── 8.txt │ ├── short_description.txt │ ├── images │ ├── icon.png │ ├── featureGraphic.png │ └── phoneScreenshots │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ └── 6.png │ └── full_description.txt ├── assets ├── izzy.png ├── github.png └── telegram.png ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── crowdin.yml ├── settings.gradle.kts ├── .github ├── FUNDING.yml ├── workflows │ ├── build_debug.yml │ ├── crowdin.yml │ ├── crowdin_upload.yml │ ├── update_translation_progress.yml │ ├── crowdin_download.yml │ └── update_issue_templates.yml ├── scripts │ ├── update_bug_report_template.py │ └── update_crash_report_template.py └── ISSUE_TEMPLATE │ ├── feature_request.yml │ ├── crash_report.yml │ └── bug_report.yml ├── gradle.properties └── docs ├── translations-dark.svg └── translations-light.svg /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | Driftly -------------------------------------------------------------------------------- /app/src/main/res/resources.properties: -------------------------------------------------------------------------------- 1 | unqualifiedResLocale=en -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/12.txt: -------------------------------------------------------------------------------- 1 | 2 | * Fixed some UI margins -------------------------------------------------------------------------------- /assets/izzy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/assets/izzy.png -------------------------------------------------------------------------------- /assets/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/assets/github.png -------------------------------------------------------------------------------- /assets/telegram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/assets/telegram.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/11.txt: -------------------------------------------------------------------------------- 1 | 2 | * Fixed card colors in dynamic theming -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | A material 3 designed attendance tracker app -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | 2 | * Fixed an issue where restoring backup failed in some devices. -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/font/one_ui_sans_400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/font/one_ui_sans_400.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/one_ui_sans_600.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/font/one_ui_sans_600.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/one_ui_sans_700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/font/one_ui_sans_700.ttf -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/10.txt: -------------------------------------------------------------------------------- 1 | 2 | * Revamped whole settings UI 3 | 4 | * Added background cards to settings items -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/dp_hridayan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-hdpi/dp_hridayan.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/raw/spinning_gears.lottie: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/raw/spinning_gears.lottie -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/featureGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/fastlane/metadata/android/en-US/images/featureGraphic.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DP-Hridayan/Driftly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | .idea 5 | .kotlin 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | .cxx 11 | local.properties 12 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/6.txt: -------------------------------------------------------------------------------- 1 | 2 | * Added option to backup and restore app data locally 3 | 4 | * Localised hardcoded strings 5 | 6 | * Minor ui improvements 7 | -------------------------------------------------------------------------------- /app/src/main/java/in/hridayan/driftly/core/domain/model/StreakType.kt: -------------------------------------------------------------------------------- 1 | package `in`.hridayan.driftly.core.domain.model 2 | 3 | enum class StreakType { 4 | START, MIDDLE, END, NONE 5 | } -------------------------------------------------------------------------------- /app/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/2.txt: -------------------------------------------------------------------------------- 1 | 2 | * Fixed some color values in color palette selection 3 | 4 | * Fixed some UI margins 5 | 6 | * Added prerelease build update checker 7 | -------------------------------------------------------------------------------- /app/src/main/java/in/hridayan/driftly/core/presentation/components/svg/_DrawableVectors.kt: -------------------------------------------------------------------------------- 1 | package `in`.hridayan.driftly.core.presentation.components.svg 2 | 3 | public object DynamicColorImageVectors -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 3 | 4 | 5 | 6 | 92% 7 | 8 | 9 | 10 | 100% 11 | 12 | 13 | 14 | 51% 15 | 16 | 17 | 18 | 44% 19 | 20 | 21 | 22 | 44% 23 | 24 | 25 | 26 | 0% 27 | 28 | 29 | 30 | 100% 31 | 32 | 33 | 34 | 100% 35 | 36 | 37 | 38 | 55% 39 | -------------------------------------------------------------------------------- /app/src/main/java/in/hridayan/driftly/settings/presentation/page/lookandfeel/viewmodel/LookAndFeelViewModel.kt: -------------------------------------------------------------------------------- 1 | package `in`.hridayan.driftly.settings.presentation.page.lookandfeel.viewmodel 2 | 3 | import androidx.lifecycle.ViewModel 4 | import androidx.lifecycle.viewModelScope 5 | import dagger.hilt.android.lifecycle.HiltViewModel 6 | import `in`.hridayan.driftly.core.presentation.provider.SeedColor 7 | import `in`.hridayan.driftly.settings.data.local.SettingsKeys 8 | import `in`.hridayan.driftly.settings.domain.repository.SettingsRepository 9 | import kotlinx.coroutines.Dispatchers 10 | import kotlinx.coroutines.flow.MutableStateFlow 11 | import kotlinx.coroutines.flow.StateFlow 12 | import kotlinx.coroutines.launch 13 | import javax.inject.Inject 14 | 15 | @HiltViewModel 16 | class LookAndFeelViewModel @Inject constructor( 17 | private val settingsRepository: SettingsRepository, 18 | ) : ViewModel() { 19 | private var lastSeed: SeedColor? = null 20 | 21 | private val _isCheckedMatchCase = MutableStateFlow(false) 22 | val isCheckedMatchCase: StateFlow = _isCheckedMatchCase 23 | 24 | private val _isCheckedBold = MutableStateFlow(false) 25 | val isCheckedBold: StateFlow = _isCheckedBold 26 | 27 | private val _isCheckedItalic = MutableStateFlow(false) 28 | val isCheckedItalic: StateFlow = _isCheckedItalic 29 | 30 | private val _isCheckedUnderline = MutableStateFlow(false) 31 | val isCheckedUnderline: StateFlow = _isCheckedUnderline 32 | 33 | fun setSeedColor(seed: SeedColor) { 34 | if (seed == lastSeed) return 35 | lastSeed = seed 36 | 37 | viewModelScope.launch(Dispatchers.IO) { 38 | settingsRepository.setInt(SettingsKeys.PRIMARY_SEED, seed.primary) 39 | settingsRepository.setInt(SettingsKeys.SECONDARY_SEED, seed.secondary) 40 | settingsRepository.setInt(SettingsKeys.TERTIARY_SEED, seed.tertiary) 41 | } 42 | } 43 | 44 | fun disableDynamicColors() { 45 | viewModelScope.launch(Dispatchers.IO) { 46 | settingsRepository.setBoolean(SettingsKeys.DYNAMIC_COLORS, false) 47 | } 48 | } 49 | 50 | fun toggleMatchCase() { 51 | _isCheckedMatchCase.value = !_isCheckedMatchCase.value 52 | } 53 | 54 | fun toggleBold() { 55 | _isCheckedBold.value = !_isCheckedBold.value 56 | } 57 | 58 | fun toggleItalic() { 59 | _isCheckedItalic.value = !_isCheckedItalic.value 60 | } 61 | 62 | fun toggleUnderline() { 63 | _isCheckedUnderline.value = !_isCheckedUnderline.value 64 | } 65 | 66 | fun formatClear() { 67 | _isCheckedMatchCase.value = false 68 | _isCheckedBold.value = false 69 | _isCheckedItalic.value = false 70 | _isCheckedUnderline.value = false 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /docs/translations-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Arabic 4 | 5 | 6 | 92% 7 | Azerbaijani 8 | 9 | 10 | 100% 11 | German 12 | 13 | 14 | 51% 15 | French 16 | 17 | 18 | 44% 19 | Japanese 20 | 21 | 22 | 44% 23 | Portuguese, Brazilian 24 | 25 | 26 | 0% 27 | Russian 28 | 29 | 30 | 100% 31 | Turkish 32 | 33 | 34 | 100% 35 | Chinese Simplified 36 | 37 | 38 | 55% 39 | -------------------------------------------------------------------------------- /app/src/main/java/in/hridayan/driftly/notification/helper/NotificationHelper.kt: -------------------------------------------------------------------------------- 1 | package `in`.hridayan.driftly.notification.helper 2 | 3 | import android.Manifest 4 | import android.app.NotificationChannel 5 | import android.app.NotificationManager 6 | import android.app.PendingIntent 7 | import android.content.Context 8 | import android.content.Intent 9 | import androidx.annotation.DrawableRes 10 | import androidx.annotation.RequiresPermission 11 | import androidx.core.app.NotificationCompat 12 | import androidx.core.app.NotificationManagerCompat 13 | import `in`.hridayan.driftly.MainActivity 14 | import `in`.hridayan.driftly.R 15 | 16 | object NotificationHelper { 17 | 18 | @RequiresPermission(Manifest.permission.POST_NOTIFICATIONS) 19 | fun showNotification( 20 | context: Context, 21 | channelId: String, 22 | channelName: String, 23 | channelDescription: String, 24 | notificationId: Int, 25 | title: String, 26 | message: String, 27 | @DrawableRes smallIconResId: Int, 28 | priority: Int = NotificationCompat.PRIORITY_DEFAULT 29 | ) { 30 | createNotificationChannel(context, channelId, channelName, channelDescription) 31 | 32 | val notificationSmallIcon = 33 | if (smallIconResId == 0) R.drawable.ic_check_circle else smallIconResId 34 | 35 | val intent = Intent(context, MainActivity::class.java).apply { 36 | flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK 37 | } 38 | 39 | val pendingIntent = PendingIntent.getActivity( 40 | context, 41 | notificationId, 42 | intent, 43 | PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT 44 | ) 45 | 46 | val notification = NotificationCompat.Builder(context, channelId) 47 | .setSmallIcon(notificationSmallIcon) 48 | .setContentTitle(title) 49 | .setContentText(message) 50 | .setPriority(priority) 51 | .setAutoCancel(true) 52 | .setContentIntent(pendingIntent) 53 | .build() 54 | 55 | NotificationManagerCompat.from(context).notify(notificationId, notification) 56 | } 57 | 58 | private fun createNotificationChannel( 59 | context: Context, 60 | channelId: String, 61 | name: String, 62 | descriptionText: String 63 | ) { 64 | val importance = NotificationManager.IMPORTANCE_HIGH 65 | val channel = NotificationChannel(channelId, name, importance).apply { 66 | description = descriptionText 67 | } 68 | val notificationManager = 69 | context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager 70 | notificationManager.createNotificationChannel(channel) 71 | } 72 | } -------------------------------------------------------------------------------- /app/src/main/java/in/hridayan/driftly/home/presentation/components/label/Label.kt: -------------------------------------------------------------------------------- 1 | package `in`.hridayan.driftly.home.presentation.components.label 2 | 3 | import androidx.compose.animation.core.Animatable 4 | import androidx.compose.animation.core.FastOutSlowInEasing 5 | import androidx.compose.animation.core.tween 6 | import androidx.compose.foundation.background 7 | import androidx.compose.foundation.border 8 | import androidx.compose.foundation.clickable 9 | import androidx.compose.foundation.layout.Box 10 | import androidx.compose.foundation.layout.padding 11 | import androidx.compose.foundation.layout.wrapContentSize 12 | import androidx.compose.material3.MaterialTheme 13 | import androidx.compose.runtime.Composable 14 | import androidx.compose.runtime.LaunchedEffect 15 | import androidx.compose.runtime.remember 16 | import androidx.compose.ui.Alignment 17 | import androidx.compose.ui.Modifier 18 | import androidx.compose.ui.draw.clip 19 | import androidx.compose.ui.draw.scale 20 | import androidx.compose.ui.graphics.Color 21 | import androidx.compose.ui.unit.dp 22 | import `in`.hridayan.driftly.core.presentation.theme.Shape 23 | import `in`.hridayan.driftly.core.common.LocalWeakHaptic 24 | import `in`.hridayan.driftly.core.presentation.components.text.AutoResizeableText 25 | import kotlinx.coroutines.delay 26 | import kotlin.random.Random 27 | 28 | @Composable 29 | fun Label( 30 | modifier: Modifier = Modifier, 31 | text: String, 32 | labelColor: Color, 33 | strokeColor: Color, 34 | onClick: () -> Unit = {} 35 | ) { 36 | val weakHaptic = LocalWeakHaptic.current 37 | val animatedScale = remember { Animatable(0f) } 38 | val randomDelay = remember { Random.nextInt(250, 750) } 39 | 40 | LaunchedEffect(text) { 41 | delay(randomDelay.toLong()) 42 | animatedScale.animateTo( 43 | targetValue = 1f.coerceIn(0.3f, 1f), 44 | animationSpec = tween( 45 | durationMillis = 600, 46 | easing = FastOutSlowInEasing 47 | ) 48 | ) 49 | } 50 | 51 | Box( 52 | modifier = modifier 53 | .wrapContentSize() 54 | .scale(animatedScale.value) 55 | .clip(Shape.cardCornerLarge) 56 | .background(labelColor) 57 | .border( 58 | width = Shape.labelStroke, 59 | shape = Shape.cardCornerLarge, 60 | color = strokeColor, 61 | ) 62 | .clickable(enabled = true, onClick = { 63 | onClick() 64 | weakHaptic() 65 | }) 66 | .padding(horizontal = 10.dp, vertical = 5.dp), 67 | contentAlignment = Alignment.Center 68 | ) { 69 | AutoResizeableText( 70 | text = text, 71 | color = strokeColor, 72 | style = MaterialTheme.typography.labelMedium, 73 | ) 74 | } 75 | } --------------------------------------------------------------------------------