you-apps / ClockYou

Privacy focused clock app built with MD3
https://you-apps.net
GNU General Public License v3.0
480 stars 33 forks source link

Improve project architecture #330

Closed SuhasDissa closed 7 months ago

SuhasDissa commented 7 months ago
.
├── App.kt
├── data
│   └── database
│       ├── AppDatabase.kt
│       ├── dao
│       │   ├── AlarmsDao.kt
│       │   ├── Converters.kt
│       │   └── TimeZonesDao.kt
│       └── DatabaseHolder.kt
├── domain
│   └── model
│       ├── AlarmFilters.kt
│       ├── Alarm.kt
│       ├── CountryTimezone.kt
│       ├── NumberKeypadOperation.kt
│       ├── PersistentTimer.kt
│       ├── ScheduledObject.kt
│       ├── SortOrder.kt
│       ├── TimeObject.kt
│       ├── TimeUnit.kt
│       ├── TimeZone.kt
│       └── WatchState.kt
├── navigation
│   ├── NavContainer.kt
│   ├── NavHost.kt
│   ├── NavRoutes.kt
│   └── TopBarScaffold.kt
├── presentation
│   ├── components
│   │   ├── BlobIconBox.kt
│   │   ├── ClickableIcon.kt
│   │   ├── DialogButton.kt
│   │   ├── DisabledTextField.kt
│   │   ├── SwitchWithDivider.kt
│   │   └── TimePickerDial.kt
│   ├── features
│   │   ├── AlarmReceiverDialog.kt
│   │   ├── RingtonePickerDialog.kt
│   │   └── TimerReceiverDialog.kt
│   ├── screens
│   │   ├── alarm
│   │   │   ├── AlarmActivity.kt
│   │   │   ├── AlarmAlertScreen.kt
│   │   │   ├── AlarmScreen.kt
│   │   │   ├── components
│   │   │   │   ├── AlarmFilterSection.kt
│   │   │   │   ├── AlarmRow.kt
│   │   │   │   ├── AlarmSettingsSheet.kt
│   │   │   │   ├── AlarmTimePicker.kt
│   │   │   │   ├── SnoozeTimePickerDialog.kt
│   │   │   │   └── TimePickerDialog.kt
│   │   │   └── model
│   │   │       └── AlarmModel.kt
│   │   ├── clock
│   │   │   ├── ClockScreen.kt
│   │   │   └── model
│   │   │       └── ClockModel.kt
│   │   ├── settings
│   │   │   ├── components
│   │   │   │   ├── ButtonGroupPref.kt
│   │   │   │   ├── ColorPref.kt
│   │   │   │   ├── IconPreference.kt
│   │   │   │   ├── PreferenceItem.kt
│   │   │   │   ├── SettingsCategory.kt
│   │   │   │   └── SwitchPref.kt
│   │   │   ├── model
│   │   │   │   └── SettingsModel.kt
│   │   │   └── SettingsScreen.kt
│   │   ├── stopwatch
│   │   │   ├── model
│   │   │   │   └── StopwatchModel.kt
│   │   │   └── StopwatchScreen.kt
│   │   └── timer
│   │       ├── components
│   │       │   ├── FormattedTimerTime.kt
│   │       │   ├── KeyboardTimePicker.kt
│   │       │   ├── NumberKeypad.kt
│   │       │   ├── ScrollTimePicker.kt
│   │       │   ├── SingleElementButton.kt
│   │       │   └── TimerItem.kt
│   │       ├── model
│   │       │   ├── RingingToneModel.kt
│   │       │   └── TimerModel.kt
│   │       └── TimerScreen.kt
│   └── widgets
│       ├── AnalogClockWidget.kt
│       ├── DigitalClockWidgetConfig.kt
│       ├── DigitalClockWidget.kt
│       └── VerticalClockWidget.kt
├── ui
│   ├── MainActivity.kt
│   └── theme
│       ├── Color.kt
│       ├── Theme.kt
│       └── Type.kt
└── util
    ├── AlarmHelper.kt
    ├── extensions
    │   ├── AddZero.kt
    │   ├── Context.kt
    │   ├── KeepScreenOn.kt
    │   └── ModifierExtension.kt
    ├── IntentHelper.kt
    ├── NotificationHelper.kt
    ├── PermissionHelper.kt
    ├── PickPersistentFileContract.kt
    ├── Preferences.kt
    ├── receivers
    │   ├── AlarmReceiver.kt
    │   └── BootReceiver.kt
    ├── RingtoneHelper.kt
    ├── services
    │   ├── AlarmService.kt
    │   ├── ScheduleService.kt
    │   ├── StopwatchService.kt
    │   └── TimerService.kt
    ├── ThemeUtil.kt
    ├── TimeHelper.kt
    └── TimezoneHelper.kt
SuhasDissa commented 7 months ago

Proposal: Change project structure to improve code readability and maintenance

Use three main directories to store code according to it's use case

  • data : Databases or any other data sources
  • domain : The link between data source and UI, Store repositories and data classes here
  • presentation : The user presentable parts of the app

Categorize UI components according to screens