Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
d98c2f5
style: Fix style issues
Iamlooker Jul 17, 2025
46c9bd4
chore: remove DroidifyDatabase schema file
Iamlooker Jul 23, 2025
0bf8330
Implement RepoRepositoryImpl and AppRepositoryImpl
Iamlooker Jul 23, 2025
3beab89
refactor: migrate repository and sync logic to refined architecture
Iamlooker Jul 25, 2025
059f7ab
feat(auth): add authentication management for repositories
Iamlooker Jul 25, 2025
171b99d
refactor: migrate domain models to data layer
Iamlooker Jul 27, 2025
44c3056
refactor: remove RBLogAPI and update backend logic for RB logs
Iamlooker Jul 27, 2025
66c8559
Add project improvement tasks and update architecture.md
Iamlooker Jul 27, 2025
64084f6
docs: add requirements.md documenting development guidelines
Iamlooker Jul 27, 2025
e0912a4
docs: add project improvement plan
Iamlooker Jul 27, 2025
cfe431f
feat(database): add InstalledDao and InstalledEntity for managing ins…
Iamlooker Jul 27, 2025
4a50c20
test(database): add comprehensive tests for Room implementation
Iamlooker Jul 27, 2025
5d34b1b
feat(data): replace legacy InstalledAdapter with InstalledRepository
Iamlooker Jul 27, 2025
c5366c1
docs(architecture): update documentation for completed migration to Room
Iamlooker Jul 27, 2025
64ae488
docs: remove proposed Clean Architecture tasks and update plan rationale
Iamlooker Jul 27, 2025
b827b57
docs(data): clarify `enabled` and `deleted` flag behavior in RepoEntity
Iamlooker Jul 27, 2025
b630aa1
docs(tasks): mark completion of Index V2 implementation and increment…
Iamlooker Jul 27, 2025
c61a447
fix: Compilation issues
Iamlooker Jul 27, 2025
8aceed5
test(sync): add integration tests for V1 and V2 sync implementations
Iamlooker Jul 27, 2025
6d6effe
feat(ui): introduce Jetpack Compose UI components and screens
Iamlooker Jul 27, 2025
57e6fad
refactor(theme): simplify and restructure Compose theming and color d…
Iamlooker Jul 29, 2025
f0ac1e0
refactor(data): enhance data models and repository interactions
Iamlooker Aug 2, 2025
e211894
feat(ui): add app and repository list screens with Compose
Iamlooker Aug 2, 2025
af283a3
refactor(ui): relocate Composable screen files and introduce utility …
Iamlooker Aug 2, 2025
651ba2c
feat(navigation): introduce navigation for app screens
Iamlooker Aug 2, 2025
6cd2281
feat(repo): implement repository edit screen and functionality [wip]
Iamlooker Aug 2, 2025
98b5ee6
feat(repoDetail): implement RepoDetailScreen and ViewModel
Iamlooker Aug 2, 2025
415de2a
refactor(repoEdit): consolidate error handling and improve form valid…
Iamlooker Aug 5, 2025
fee755f
feat(security): implement encryption key storage and retrieval
Iamlooker Aug 5, 2025
6493b4a
Docs: Update Compose migration status
Iamlooker Aug 16, 2025
75baf60
Add initial HomeScreen and navigation
Iamlooker Aug 16, 2025
6f868ec
Add nullable icon field to Repo
Iamlooker Aug 16, 2025
cac47b5
Create AppDetailScreen and AppDetailViewModel
Iamlooker Aug 16, 2025
9ae00d4
Refactor: Introduce Html type and formatter
Iamlooker Aug 16, 2025
223c8f6
Refactor: Migrate SettingsFragment to Compose
Iamlooker Aug 16, 2025
9246ff7
Update navigation to use launchSingleTop
Iamlooker Aug 16, 2025
d1fc0ae
Refactor AppListScreen to use Scaffold and add TopAppBar
Iamlooker Aug 16, 2025
442e420
feat: Implement favourites filter and Compose home screen
Iamlooker Aug 16, 2025
d3373d6
Add WorkManager-based SyncWorker
Iamlooker Aug 16, 2025
aeae2e2
feat: Reset repository state on disable
Iamlooker Aug 16, 2025
5d92c15
Optimize app list loading by batching database queries
Iamlooker Aug 16, 2025
69dd977
add test logging in repo repository
Iamlooker Aug 16, 2025
e40d287
Refactor suggestedVersionNames to return non-nullable String
Iamlooker Aug 16, 2025
cbf5fab
Prevent EncryptionStorage from crashing on missing key
Iamlooker Aug 16, 2025
44b5429
Refactor: Update gradle.properties
Iamlooker Aug 16, 2025
7e16a70
Optimize app list fetching
Iamlooker Aug 16, 2025
b04dd9a
Optimize string concatenations and database queries
Iamlooker Aug 16, 2025
b66567a
Optimize `suggestedVersionNames` query and add logging
Iamlooker Sep 9, 2025
1882f11
feat: Add localized app and repo entities
Iamlooker Sep 9, 2025
64c8576
Refactor: Improve localized data handling
Iamlooker Sep 27, 2025
fc25d90
Use repo address as fallback for name
Iamlooker Sep 27, 2025
47e1eb1
docs: Improve formatting in CONTRIBUTING.md
Iamlooker Oct 3, 2025
a5ac754
Fix: Correct parser usage and assertions in tests
Iamlooker Oct 3, 2025
efdf39e
Refactor: Move repository implementations out of interfaces
Iamlooker Oct 3, 2025
fa5f80d
feat: Add benchmark tests for IndexDao
Iamlooker Oct 4, 2025
25b05d8
Fix: Update Kotlin compiler argument for OptIn
Iamlooker Oct 4, 2025
04cdb34
fixup! feat: Add benchmark tests for IndexDao
Iamlooker Oct 4, 2025
b24e0aa
rem: Remove time logging for insert since we have benchmark now
Iamlooker Oct 4, 2025
aecd032
test: Replace fdroid index with izzy for insert benchmarking
Iamlooker Oct 4, 2025
94fb9c6
Refactor: Optimize `getApp` and remove query logging
Iamlooker Oct 7, 2025
d444dc8
Merge branch 'main' of https://github.com/Droid-ify/client into refac…
Iamlooker Oct 16, 2025
b2201df
feat: Update dependencies
Iamlooker Oct 16, 2025
2784fdd
Merge remote-tracking branch 'origin/main' into refactor/compose
Iamlooker Oct 16, 2025
6b28888
chore: fix lint issue with new receiver
Iamlooker Oct 16, 2025
fd9c355
Fix Build
machiav3lli Oct 24, 2025
9c3af18
Revert: Reset MainActivity as app's activity
machiav3lli Oct 24, 2025
85ceb6b
Add: Sync button on apps' list
machiav3lli Oct 24, 2025
88dd9a8
Add: DownloadStats(File) and their DAO to DB
machiav3lli Oct 24, 2025
46d8585
Add: DownloadStats(File) handling to PrivacyRepository
machiav3lli Oct 24, 2025
586b06c
Add: DownloadStatsWorker and integrate in the sync service
machiav3lli Oct 24, 2025
cc66b17
Merge pull request #1132 from machiav3lli/downloadstats/backend
Iamlooker Oct 25, 2025
a14bb4c
Add: Release Item composable
machiav3lli Oct 29, 2025
e37084c
Update: Replace release item's view with composable
machiav3lli Oct 29, 2025
f34c1c8
Replace material-icons-core with -extended
machiav3lli Oct 30, 2025
f40eb3b
Add: 6+ flows combine functions
machiav3lli Oct 30, 2025
3c42b0b
Add: Reproducible enum
machiav3lli Oct 30, 2025
c21800b
Add: RBLogs to AppDetail state
machiav3lli Oct 30, 2025
1f2c5f7
Add: RB-badge to release items
machiav3lli Oct 30, 2025
5b049bc
Merge pull request #1133 from machiav3lli/rblog/frontend
Iamlooker Oct 30, 2025
2b0a4b4
chore: Fix compilation issue because of deps
Iamlooker Oct 16, 2025
7a42220
chore: Rearrange insert index to be understandable
Iamlooker Oct 16, 2025
caff023
chore: Update dependencies
Iamlooker Nov 1, 2025
33cc13a
chore: Downgrade db version
Iamlooker Nov 1, 2025
58b8e39
feat: Add dbml file to visualize database relationships
Iamlooker Nov 1, 2025
c7d95cf
refactor: Update Settings, AppDetail, RepoList screens to improve com…
Iamlooker Nov 1, 2025
ce3019d
refactor: Add repo icon to repo detail screen
Iamlooker Nov 1, 2025
4c585bc
fix: Crash on empty icons list
Iamlooker Nov 1, 2025
112f696
refactor: Improve padding for app list
Iamlooker Nov 1, 2025
548b823
fix: Same categories shown many times
Iamlooker Nov 1, 2025
cb6a521
refactor: Move functions to appropriate position
Iamlooker Nov 1, 2025
6487473
refactor: Improve repo detail UI
Iamlooker Nov 1, 2025
b8f6626
feat: Add HTML validation before formatting
Iamlooker Nov 2, 2025
dce90b4
refactor: Move category list below screenshots and improve screenshot…
Iamlooker Nov 2, 2025
591ff7d
refactor: add formatter skeleton for HTML
Iamlooker Nov 2, 2025
9fe6e5d
feat: Allow styling for `toAnnotatedString`
Iamlooker Nov 3, 2025
3e866ca
feat: Replace newlines with break line html tag
Iamlooker Nov 3, 2025
dbe65fd
feat: Add html formatter for compose
Iamlooker Nov 3, 2025
d312d01
refactor: Use system default error icon for app icons
Iamlooker Nov 3, 2025
d3c0f4c
fix: Crash in detail screen if summaries or descriptions ar empty
Iamlooker Nov 5, 2025
eda9ace
revert: AppDetailAdapter color changes
Iamlooker Nov 5, 2025
e7ccde0
refactor: Use strongly typed type for apk size
Iamlooker Nov 5, 2025
af40ae3
feat(compose): Add release item with v2 artifacts
Iamlooker Nov 5, 2025
a4d3a81
refactor: Add loading state to app detail and get all packages
Iamlooker Nov 8, 2025
908e121
fix: De-duplicate apps in search screen
Iamlooker Nov 8, 2025
3b596a7
fix: Fix version duplication issue
Iamlooker Nov 8, 2025
b65b785
refactor: Batch database operations in IndexDao
Iamlooker Nov 8, 2025
7d61115
refactor: Use state callback for sync progress
Iamlooker Nov 8, 2025
50d704d
feat: Show notification for sync worker
Iamlooker Nov 16, 2025
680722a
refactor: Remove forceSyncAll from Droidify
Iamlooker Nov 17, 2025
904179c
feat: Show sync progress in notification
Iamlooker Nov 17, 2025
dc45f1e
Merge branch 'main' into refactor/compose
Iamlooker Nov 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 34 additions & 17 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,42 @@
# 🤝 Contributing to Droid-ify

Thank you for your interest in contributing to Droid-ify! This document provides guidelines for contributors.
Thank you for your interest in contributing to Droid-ify! This document provides guidelines for
contributors.

## 🌟 Ways to Contribute

### 🐛 Bug Reports

- Search existing issues before creating new ones
- Use bug report templates when available
- Include system information and reproduction steps
- Add screenshots when applicable

### 💡 Feature Requests

- Check for existing requests to avoid duplicates
- Clearly describe the feature and its use case
- Explain why it would be valuable

### 🔧 Code Contributions

- **Bug fixes** - Fix reported issues
- **New features** - Implement requested features
- **Performance improvements** - Optimize existing code
- **Code refactoring** - Improve code quality

### 🌐 Translations

Help translate Droid-ify via [Weblate](https://hosted.weblate.org/engage/droidify/)

### 📖 Documentation

Improve README, guides, and code comments

## 🚀 Getting Started

1. **Fork and clone** the repository
2. **Set up environment** following [Building from Source](docs/BUILDING.md)
2. **Set up environment** following [Building from Source](docs/building.md)
3. **Create a branch** for your contribution
4. **Make changes** following our guidelines
5. **Test thoroughly** on different Android versions
Expand All @@ -39,6 +45,7 @@ Improve README, guides, and code comments
## 📋 Development Guidelines

### Code Style

- Follow [Kotlin Coding Conventions](https://kotlinlang.org/docs/coding-conventions.html)
- Use meaningful variable and function names
- Prefer `val` over `var` when possible
Expand All @@ -47,6 +54,7 @@ Improve README, guides, and code comments
- Organize imports and remove unused ones

### Architecture

- Follow Clean Architecture principles
- **Domain layer**: Business logic and models
- **Data layer**: Repository implementations and data sources
Expand All @@ -55,66 +63,74 @@ Improve README, guides, and code comments
- Write meaningful tests for business logic

### Git Workflow

Use [Conventional Commits](https://www.conventionalcommits.org/) format:

```
<type>: <description>
```

**Types**: `feat`, `fix`, `docs`, `style`, `refactor`, `chore`

**Branch naming**:
**Branch naming**:

- `feature/description`
- `fix/description`
- `docs/description`

## 📝 Pull Request Guidelines

### Before Submitting

- [ ] Run tests and ensure they pass
- [ ] Update documentation if needed
- [ ] Test on actual devices when possible
- [ ] Rebase on latest main branch

### Pull Request Content

- Clear title summarizing the change
- Description of what was changed and why
- Issue reference (e.g., "Fixes #123")
- Testing notes and screenshots for UI changes

## 🏷️ Issue Labels

| Type | Description |
|------|-------------|
| `bug` | Something isn't working |
| `enhancement` | New feature or improvement |
| `documentation` | Documentation related |
| `help wanted` | Community help needed |
| `good first issue` | Good for newcomers |
| Type | Description |
|--------------------|----------------------------|
| `bug` | Something isn't working |
| `enhancement` | New feature or improvement |
| `documentation` | Documentation related |
| `help wanted` | Community help needed |
| `good first issue` | Good for newcomers |

| Priority | Description |
|----------|-------------|
| Priority | Description |
|------------|---------------------|
| `critical` | Urgent fixes needed |
| `high` | Important issues |
| `medium` | Standard priority |
| `low` | Nice to have |
| `high` | Important issues |
| `medium` | Standard priority |
| `low` | Nice to have |

## 🎯 Project Priorities

### Current Focus Areas

1. **Index V2 implementation** - Modern repository format support
2. **Performance improvements** - Faster sync and better UX
3. **Test coverage** - More comprehensive testing
4. **Code quality** - Refactoring and modernization

### Areas Needing Help

- **Translation updates** - Keep all languages current
- **Documentation improvements** - Better guides and examples
- **Bug triage** - Help categorize and prioritize issues
- **Testing on different devices** - Ensure broad compatibility

## 🔐 Security

**Do not** report security vulnerabilities through public GitHub issues. Send details to [security contact] instead.
**Do not** report security vulnerabilities through public GitHub issues. Send details
to `[email protected]` instead.

## 📞 Getting Help

Expand All @@ -133,7 +149,8 @@ Search existing issues and documentation before asking for help.

## 📜 Code of Conduct

This project adheres to a [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.
This project adheres to a [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected
to uphold this code.

---

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ ED:88:59:C5:5A:F3:11:16:26:58:B9:4A:F9:82:B9:F0:91:DC:D2:76:28:D4:DE:34:86:D1:21
> [!IMPORTANT]
> Signature for older versions on F-Droid might be different

**Build**: See [Building Guide](docs/BUILDING.md) for development setup
**Build**: See [Building Guide](docs/building.md) for development setup

### Contributing

Expand Down
30 changes: 23 additions & 7 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import com.android.build.api.dsl.ApplicationBuildType
import com.android.build.gradle.internal.tasks.factory.dependsOn
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion

plugins {
Expand All @@ -9,13 +9,14 @@ plugins {
alias(libs.plugins.hilt)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.compose)
}

android {
val latestVersionName = "0.6.6"
namespace = "com.looker.droidify"
buildToolsVersion = "35.0.0"
compileSdk = 35
compileSdk = 36
defaultConfig {
minSdk = 23
targetSdk = 35
Expand All @@ -27,15 +28,15 @@ android {
}

compileOptions.isCoreLibraryDesugaringEnabled = true
kotlinOptions.freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-parameters")
androidResources.generateLocaleConfig = true

kotlin {
jvmToolchain(17)
compilerOptions {
languageVersion.set(KotlinVersion.KOTLIN_2_2)
apiVersion.set(KotlinVersion.KOTLIN_2_2)
jvmTarget.set(JvmTarget.JVM_17)
freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn")
freeCompilerArgs.add("-Xcontext-parameters")
}
}

Expand All @@ -47,12 +48,12 @@ android {
buildTypes {
debug {
applicationIdSuffix = ".debug"
resValue("string", "application_name", "Droid-ify-Debug")
name("Droid-ify-Debug")
}
release {
isMinifyEnabled = true
isShrinkResources = true
resValue("string", "application_name", "Droid-ify")
name("Droid-ify")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard.pro",
Expand All @@ -61,7 +62,7 @@ android {
create("alpha") {
initWith(getByName("debug"))
applicationIdSuffix = ".alpha"
resValue("string", "application_name", "Droid-ify Alpha")
name("Droid-ify Alpha")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard.pro",
Expand Down Expand Up @@ -92,6 +93,7 @@ android {
}
}
buildFeatures {
compose = true
resValues = true
viewBinding = true
buildConfig = true
Expand Down Expand Up @@ -143,8 +145,18 @@ dependencies {
ksp(libs.hilt.compiler)
ksp(libs.hilt.ext.compiler)

// Compose dependencies
implementation(platform(libs.compose.bom))
implementation(libs.bundles.compose)
debugImplementation(libs.bundles.compose.debug)

testImplementation(platform(libs.junit.bom))
testImplementation(libs.bundles.test.unit)
testImplementation(libs.room.test)
testImplementation(libs.robolectric)
testImplementation(libs.arch.core.testing)
testImplementation(libs.test.core)
testImplementation(libs.test.core.ktx)
testRuntimeOnly(libs.junit.platform)
androidTestImplementation(libs.hilt.test)
androidTestImplementation(libs.room.test)
Expand Down Expand Up @@ -173,3 +185,7 @@ task("detectAndroidLocals") {
android.defaultConfig.buildConfigField("String[]", "DETECTED_LOCALES", langsListString)
}
tasks.preBuild.dependsOn("detectAndroidLocals")

fun ApplicationBuildType.name(name: String) {
resValue("string", "application_name", name)
}
Loading