47 Commits
main ... main

Author SHA1 Message Date
6cd519d0a6 UPDATING.md aktualisiert 2025-09-11 16:14:27 +02:00
a7fa9fcf80 README.md aktualisiert 2025-06-04 15:44:23 +02:00
Felitendo
e17ca02b6b fixed repository 2025-06-04 14:57:56 +02:00
Felitendo
c410026ad8 v0.0.3 2025-06-03 15:24:18 +02:00
Felitendo
a05b78c6ef fixed app download with invalid signature 2025-06-03 14:54:04 +02:00
Felitendo
f545ffae91 fixt repo link 2025-06-03 14:36:13 +02:00
bb5c1ec1fe README.md aktualisiert 2025-05-21 15:57:20 +02:00
Felitendo
987af545be small ui tweaks 2025-05-21 15:34:34 +02:00
Felitendo
297ba87f64 fixed layout issues 2025-05-21 15:08:24 +02:00
Felitendo
97f87eb3c8 moved request app button to the top (not tested) 2025-05-21 15:01:01 +02:00
Felitendo
c9100a927a Fixed build crashing 2025-05-21 14:41:59 +02:00
Felitendo
bf52c20cb4 Added a way for users to suggest apps 2025-05-21 13:34:57 +02:00
0d6e0bbcae .github/workflows/release_build.yml gelöscht 2025-05-21 12:27:29 +02:00
0a60e93e66 .github/workflows/release_build.yml aktualisiert 2025-05-21 10:39:02 +02:00
480d5a885b .github/workflows/release_build.yml aktualisiert 2025-05-21 10:21:00 +02:00
67206b176e .github/workflows/release_build.yml aktualisiert 2025-05-21 10:17:38 +02:00
021af3619e .github/workflows/release_build.yml aktualisiert 2025-05-21 10:11:35 +02:00
Felitendo
d11c751f07 Changed Home Screen to order Apps by latest update 2025-05-21 10:08:39 +02:00
f552c0bda1 README.md aktualisiert 2025-05-21 10:05:35 +02:00
fcccc2126a README.md aktualisiert 2025-05-20 23:51:32 +02:00
801fa055f4 README.md aktualisiert 2025-05-20 23:51:00 +02:00
bb00031a7b v0.0.2 2025-05-20 23:49:33 +02:00
fd97e6e514 README.md aktualisiert 2025-05-20 23:39:02 +02:00
08e351eecc README.md aktualisiert 2025-05-20 23:37:02 +02:00
a730aa478d README.md aktualisiert 2025-05-20 23:36:44 +02:00
49def9086b README.md aktualisiert 2025-05-20 23:36:32 +02:00
70781e741c app/build.gradle.kts aktualisiert 2025-05-20 23:11:36 +02:00
7fd7f0af8e .github/workflows/build_debug.yml aktualisiert 2025-05-20 23:10:56 +02:00
a7a8f9bce0 .github/workflows/build_debug.yml aktualisiert 2025-05-20 23:00:17 +02:00
8076fbce74 .github/workflows/build_debug.yml aktualisiert 2025-05-20 22:47:24 +02:00
9996ec3f1e .github/workflows/release_build.yml aktualisiert 2025-05-20 22:36:31 +02:00
ab5a200ac8 .github/workflows/release_build.yml aktualisiert 2025-05-20 22:27:33 +02:00
a7f730c0ff .github/workflows/release_build.yml aktualisiert 2025-05-20 22:16:21 +02:00
0928e06069 .github/workflows/release_build.yml aktualisiert 2025-05-20 22:01:18 +02:00
14bd5b3ea8 .github/workflows/release_build.yml aktualisiert 2025-05-20 21:52:19 +02:00
a7a3e13b71 .github/workflows/release_build.yml aktualisiert 2025-05-20 21:50:11 +02:00
a84b1190b4 .github/workflows/build_debug.yml aktualisiert 2025-05-20 21:30:05 +02:00
4ab967faf0 .github/workflows/build_debug.yml aktualisiert 2025-05-20 21:13:23 +02:00
39da43e271 .github/workflows/build_debug.yml aktualisiert 2025-05-20 20:57:18 +02:00
8ff5bfc991 Added Felo Store Repo as default 2025-05-20 19:49:35 +02:00
Felitendo
429081b94d refactored to new name 2025-05-20 17:57:02 +02:00
5b1a938ac1 merge upstream 2025-05-20 15:52:39 +02:00
f45acb7284 UPDATING.md aktualisiert 2025-05-20 15:49:32 +02:00
691c59950a UPDATING.md aktualisiert 2025-05-20 15:49:13 +02:00
Felitendo
c8ff87823a Added info for updating / merging upstream 2025-05-20 15:45:42 +02:00
Felitendo
40391ded24 Update to upstream v0.6.5
# Conflicts:
#	app/build.gradle.kts
2025-05-20 15:44:40 +02:00
Felitendo
3412ab24b8 Upgrade Test 2025-05-20 15:26:13 +02:00
196 changed files with 1191 additions and 1574 deletions

View File

@@ -1,5 +1,4 @@
name: Build Debug APK
on:
push:
branches:
@@ -13,62 +12,76 @@ on:
- '**.md'
types: submitted
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
submodules: true
- name: Validate Gradle Wrapper
uses: gradle/actions/setup-gradle@v4
- name: Setup Gradle
uses: gradle/wrapper-validation-action@v3
uses: gradle/wrapper-validation-action@v1
- name: Set up Java 17
uses: actions/setup-java@v4
with:
java-version: 17
distribution: 'adopt'
cache: gradle
- name: Setup Android SDK
uses: android-actions/setup-android@v2
- name: Grant execution permission to Gradle Wrapper
run: chmod +x gradlew
- name: Build Debug APK
run: ./gradlew assembleDebug
- name: Sign Apk
continue-on-error: true
id: sign_apk
uses: r0adkll/sign-android-release@v1
with:
releaseDir: app/build/outputs/apk/debug
signingKeyBase64: ${{ secrets.KEY_BASE64 }}
alias: ${{ secrets.KEY_ALIAS }}
keyStorePassword: ${{ secrets.KEYSTORE_PASS }}
keyPassword: ${{ secrets.KEYSTORE_PASS }}
- name: Remove file that aren't signed
- name: Display APK directory contents
run: |
echo "Listing app/build/outputs/apk/debug contents:"
ls -la app/build/outputs/apk/debug/
# Using a manual signing approach instead of the failing action
- name: Sign APK manually
continue-on-error: true
run: |
ls | grep 'signed\.apk$' && find . -type f -name '*.apk' ! -name '*-signed.apk' -delete
if [ -f app/build/outputs/apk/debug/app-debug.apk ]; then
echo "Found APK file to sign"
# Create keystore from base64
echo "${{ secrets.KEY_BASE64 }}" | base64 -d > keystore.jks
# Sign APK using apksigner
$ANDROID_HOME/build-tools/*/apksigner sign --ks keystore.jks \
--ks-key-alias "${{ secrets.KEY_ALIAS }}" \
--ks-pass pass:"${{ secrets.KEYSTORE_PASS }}" \
--key-pass pass:"${{ secrets.KEYSTORE_PASS }}" \
--out app/build/outputs/apk/debug/app-debug-signed.apk \
app/build/outputs/apk/debug/app-debug.apk
echo "APK signed successfully"
else
echo "No APK file found to sign"
fi
- name: Display signed APK files
run: |
echo "Listing signed APK files:"
find app/build/outputs/apk/debug/ -name "*-signed.apk" || echo "No signed APK found"
# Using v3 of upload-artifact which is more widely supported
- name: Upload the APK
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: debug
path: app/build/outputs/apk/debug/app-debug*.apk
path: app/build/outputs/apk/debug/*.apk

View File

@@ -1,94 +0,0 @@
name: Build Release APK
on:
workflow_dispatch:
push:
tags:
- '*'
concurrency:
group: "release-build"
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
submodules: true
- name: Validate Gradle Wrapper
uses: gradle/actions/setup-gradle@v4
- name: Setup Gradle
uses: gradle/wrapper-validation-action@v3
- name: Set up Java 17
uses: actions/setup-java@v4
with:
java-version: 17
distribution: 'adopt'
cache: gradle
- name: Grant execution permission to Gradle Wrapper
run: chmod +x gradlew
- name: Build Release APK
run: ./gradlew assembleRelease
- name: Checks
run: find . -type f -name "*.apk"
- uses: r0adkll/sign-android-release@v1
name: Signing APK
id: sign_app
with:
releaseDirectory: app/build/outputs/apk/release
signingKeyBase64: ${{ secrets.KEY_BASE64 }}
alias: ${{ secrets.KEY_ALIAS }}
keyStorePassword: ${{ secrets.KEYSTORE_PASS }}
keyPassword: ${{ secrets.KEYSTORE_PASS }}
env:
BUILD_TOOLS_VERSION: "35.0.0"
- name: Extract Version Code
id: extract_version
run: |
VERSION_CODE=$(grep -oP '(?<=versionCode=)\d+' app/build.gradle) # Adjust path to your build.gradle
echo "::set-output name=version_code::$VERSION_CODE"
echo "Version Code: $VERSION_CODE"
- name: Read Changelog
id: read_changelog
run: |
CHANGELOG_PATH="metadata/en-US/changelogs/${{ steps.extract_version.outputs.version_code }}.txt"
if [[ -f "$CHANGELOG_PATH" ]]; then
CHANGELOG=$(cat "$CHANGELOG_PATH")
echo "::set-output name=changelog::$CHANGELOG"
else
echo "::set-output name=changelog::No changelog found for this version."
echo "No changelog found at: $CHANGELOG_PATH"
fi
- uses: softprops/action-gh-release@v2
name: Create Release
id: publish_release
with:
body: ${{ steps.read_changelog.outputs.changelog }}
tag_name: ${{ github.ref }}
name: Release ${{ github.ref }}
files: ${{steps.sign_app.outputs.signedReleaseFile}}
draft: true
prerelease: false
- uses: actions/upload-artifact@v4
with:
name: Signed APK
path: ${{steps.sign_app.outputs.signedReleaseFile}}

View File

@@ -1,14 +1,6 @@
<div align="center">
## Download
<img width="" src="metadata/en-US/images/featureGraphic.png" alt="Droid-ify" align="center">
[![Github Stars](https://img.shields.io/github/stars/Iamlooker/Droid-ify?color=%2364f573&style=for-the-badge)](https://github.com/Iamlooker/Droid-ify/stargazers)
[![Github License](https://img.shields.io/github/license/Iamlooker/Droid-ify?color=%2364f573&style=for-the-badge)](https://github.com/Iamlooker/Droid-ify/blob/master/COPYING)
[![Github Downloads](https://img.shields.io/github/downloads/Iamlooker/Droid-ify/total.svg?color=%23f5ad64&style=for-the-badge)](https://github.com/Iamlooker/Droid-ify/releases/)
[![Github Latest](https://img.shields.io/github/v/release/Iamlooker/Droid-ify?display_name=tag&color=%23f5ad64&style=for-the-badge)](https://github.com/Iamlooker/Droid-ify/releases/latest)
[![FDroid Latest](https://img.shields.io/f-droid/v/com.looker.droidify?color=%23f5ad64&style=for-the-badge)](https://f-droid.org/packages/com.looker.droidify)
</div>
<div align="left">
- Click [here](https://git.felo.gg/FeloStore/FeloStore/releases/download/v0.0.3/felostore.apk) to download the latest version
## Features
@@ -17,10 +9,6 @@
* Smooth user experience
* Feature-rich
## Screenshots
<img src="metadata/en-US/images/phoneScreenshots/1.png" width="25%" /><img src="metadata/en-US/images/phoneScreenshots/2.png" width="25%" /><img src="metadata/en-US/images/phoneScreenshots/3.png" width="25%" /><img src="metadata/en-US/images/phoneScreenshots/4.png" width="25%" />
## Building and Installing
1. **Install Android Studio**:
@@ -36,12 +24,6 @@
- Select "Create New Keystore" and enter the required information, including a password.
- Wait for the build process to finish.
## TODO
- [ ] Add support for `index-v2`
- [ ] Add detekt code-analysis
- [ ] Add GitHub Repo feature
## Contribution
- Pick any issue you would like to resolve
@@ -49,14 +31,10 @@
- Open a Pull Request
- Your PR will undergo review
## Translations
[![Translation status](https://hosted.weblate.org/widgets/droidify/-/horizontal-auto.svg)](https://hosted.weblate.org/engage/droidify/?utm_source=widget)
## License
```
Droid-ify
FeloStore
Copyright (C) 2023 LooKeR
This program is free software: you can redistribute it and/or modify

View File

@@ -11,5 +11,5 @@ It is only natural that users will grow impatient for an update, thats why I wil
## What now?
- Next release will be on **19-Aug**, and will contain many bug fixes and stability improvements.
- All the [progress](https://github.com/Droid-ify/client/pull/309) made in past months is still here and will help in future.
- All the [progress](https://github.com/FeloStore/client/pull/309) made in past months is still here and will help in future.
- We will be missing on the new index format introduced by fdroid for some future releases.

9
UPDATING.md Normal file
View File

@@ -0,0 +1,9 @@
1. Delete everything in the "Droid-ify/Releases" Repo
2. Put new version of Droid-ify from the GitHub's "Release"-Tab in the "Droid-ify/Releases" Repo
3. Commit the changes and push it
4. Run these commands in the "FeloStore/FeloStore" Repo:
- git fetch upstream
- git checkout main
- git merge upstream/main

View File

@@ -12,14 +12,14 @@ plugins {
}
android {
val latestVersionName = "0.6.5"
namespace = "com.looker.droidify"
val latestVersionName = "0.0.3"
namespace = "de.felitendo.felostore"
buildToolsVersion = "35.0.0"
compileSdk = 35
defaultConfig {
minSdk = 23
targetSdk = 35
applicationId = "com.looker.droidify"
applicationId = "de.felitendo.felostore"
versionCode = 650
versionName = latestVersionName
vectorDrawables.useSupportLibrary = false
@@ -56,12 +56,12 @@ android {
buildTypes {
debug {
applicationIdSuffix = ".debug"
resValue("string", "application_name", "Droid-ify-Debug")
resValue("string", "application_name", "Felo Store")
}
release {
isMinifyEnabled = true
isShrinkResources = true
resValue("string", "application_name", "Droid-ify")
resValue("string", "application_name", "Felo Store")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard.pro"
@@ -70,7 +70,7 @@ android {
create("alpha") {
initWith(getByName("debug"))
applicationIdSuffix = ".alpha"
resValue("string", "application_name", "Droid-ify Alpha")
resValue("string", "application_name", "Felo Store")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard.pro"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,10 +1,10 @@
package com.looker.droidify.index
package de.felitendo.felostore.index
import android.content.Context
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.looker.droidify.model.Repository
import de.felitendo.felostore.model.Repository
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

View File

@@ -1,11 +1,11 @@
package com.looker.droidify.sync
package de.felitendo.felostore.sync
import com.looker.droidify.network.Downloader
import com.looker.droidify.network.NetworkResponse
import com.looker.droidify.network.ProgressListener
import com.looker.droidify.network.header.HeadersBuilder
import com.looker.droidify.network.validation.FileValidator
import com.looker.droidify.sync.common.assets
import de.felitendo.felostore.network.Downloader
import de.felitendo.felostore.network.NetworkResponse
import de.felitendo.felostore.network.ProgressListener
import de.felitendo.felostore.network.header.HeadersBuilder
import de.felitendo.felostore.network.validation.FileValidator
import de.felitendo.felostore.sync.common.assets
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.withContext

View File

@@ -1,19 +1,19 @@
package com.looker.droidify.sync
package de.felitendo.felostore.sync
import android.content.Context
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import com.looker.droidify.domain.model.Repo
import com.looker.droidify.sync.common.IndexJarValidator
import com.looker.droidify.sync.common.Izzy
import com.looker.droidify.sync.common.JsonParser
import com.looker.droidify.sync.common.assets
import com.looker.droidify.sync.common.downloadIndex
import com.looker.droidify.sync.common.benchmark
import com.looker.droidify.sync.v2.EntryParser
import com.looker.droidify.sync.v2.EntrySyncable
import com.looker.droidify.sync.v2.model.Entry
import com.looker.droidify.sync.v2.model.IndexV2
import de.felitendo.felostore.domain.model.Repo
import de.felitendo.felostore.sync.common.IndexJarValidator
import de.felitendo.felostore.sync.common.Izzy
import de.felitendo.felostore.sync.common.JsonParser
import de.felitendo.felostore.sync.common.assets
import de.felitendo.felostore.sync.common.downloadIndex
import de.felitendo.felostore.sync.common.benchmark
import de.felitendo.felostore.sync.v2.EntryParser
import de.felitendo.felostore.sync.v2.EntrySyncable
import de.felitendo.felostore.sync.v2.model.Entry
import de.felitendo.felostore.sync.v2.model.IndexV2
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.runTest

View File

@@ -1,6 +1,6 @@
package com.looker.droidify.sync
package de.felitendo.felostore.sync
import com.looker.droidify.domain.model.Fingerprint
import de.felitendo.felostore.domain.model.Fingerprint
import java.util.jar.JarEntry
val FakeIndexValidator = object : IndexValidator {

View File

@@ -1,23 +1,23 @@
package com.looker.droidify.sync
package de.felitendo.felostore.sync
import android.content.Context
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import com.looker.droidify.domain.model.Repo
import com.looker.droidify.sync.common.IndexJarValidator
import com.looker.droidify.sync.common.Izzy
import com.looker.droidify.sync.common.JsonParser
import com.looker.droidify.sync.common.downloadIndex
import com.looker.droidify.sync.common.benchmark
import com.looker.droidify.sync.common.toV2
import com.looker.droidify.sync.v1.V1Parser
import com.looker.droidify.sync.v1.V1Syncable
import com.looker.droidify.sync.v1.model.IndexV1
import com.looker.droidify.sync.v2.V2Parser
import com.looker.droidify.sync.v2.model.FileV2
import com.looker.droidify.sync.v2.model.IndexV2
import com.looker.droidify.sync.v2.model.MetadataV2
import com.looker.droidify.sync.v2.model.VersionV2
import de.felitendo.felostore.domain.model.Repo
import de.felitendo.felostore.sync.common.IndexJarValidator
import de.felitendo.felostore.sync.common.Izzy
import de.felitendo.felostore.sync.common.JsonParser
import de.felitendo.felostore.sync.common.downloadIndex
import de.felitendo.felostore.sync.common.benchmark
import de.felitendo.felostore.sync.common.toV2
import de.felitendo.felostore.sync.v1.V1Parser
import de.felitendo.felostore.sync.v1.V1Syncable
import de.felitendo.felostore.sync.v1.model.IndexV1
import de.felitendo.felostore.sync.v2.V2Parser
import de.felitendo.felostore.sync.v2.model.FileV2
import de.felitendo.felostore.sync.v2.model.IndexV2
import de.felitendo.felostore.sync.v2.model.MetadataV2
import de.felitendo.felostore.sync.v2.model.VersionV2
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.runTest

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.sync.common
package de.felitendo.felostore.sync.common
import kotlin.math.pow
import kotlin.math.sqrt

View File

@@ -1,9 +1,9 @@
package com.looker.droidify.sync.common
package de.felitendo.felostore.sync.common
import com.looker.droidify.domain.model.Authentication
import com.looker.droidify.domain.model.Fingerprint
import com.looker.droidify.domain.model.Repo
import com.looker.droidify.domain.model.VersionInfo
import de.felitendo.felostore.domain.model.Authentication
import de.felitendo.felostore.domain.model.Fingerprint
import de.felitendo.felostore.domain.model.Repo
import de.felitendo.felostore.domain.model.VersionInfo
val Izzy = Repo(
id = 1L,

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.sync.common
package de.felitendo.felostore.sync.common
import androidx.test.platform.app.InstrumentationRegistry
import java.io.InputStream

View File

@@ -26,7 +26,7 @@
android:required="false" />
<application
android:name=".Droidify"
android:name=".FeloStore"
android:allowBackup="true"
android:banner="@drawable/tv_banner"
android:enableOnBackInvokedCallback="true"
@@ -38,7 +38,7 @@
tools:ignore="UnusedAttribute">
<receiver
android:name=".Droidify$BootReceiver"
android:name=".FeloStore$BootReceiver"
android:exported="true">
<intent-filter>
@@ -116,7 +116,7 @@
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:host="droidify.eu.org" />
<data android:host="felostore.eu.org" />
<data android:pathPattern="/app/.*" />
</intent-filter>

View File

@@ -1,13 +0,0 @@
package com.looker.droidify.installer.installers
import com.looker.droidify.domain.model.PackageName
import com.looker.droidify.installer.model.InstallItem
import com.looker.droidify.installer.model.InstallState
interface Installer : AutoCloseable {
suspend fun install(installItem: InstallItem): InstallState
suspend fun uninstall(packageName: PackageName)
}

View File

@@ -1,417 +0,0 @@
package com.looker.droidify.model
import java.net.URL
data class Repository(
var id: Long,
val address: String,
val mirrors: List<String>,
val name: String,
val description: String,
val version: Int,
val enabled: Boolean,
val fingerprint: String,
val lastModified: String,
val entityTag: String,
val updated: Long,
val timestamp: Long,
val authentication: String,
) {
fun edit(address: String, fingerprint: String, authentication: String): Repository {
val isAddressChanged = this.address != address
val isFingerprintChanged = this.fingerprint != fingerprint
val shouldForceUpdate = isAddressChanged || isFingerprintChanged
return copy(
address = address,
fingerprint = fingerprint,
lastModified = if (shouldForceUpdate) "" else lastModified,
entityTag = if (shouldForceUpdate) "" else entityTag,
authentication = authentication
)
}
fun update(
mirrors: List<String>,
name: String,
description: String,
version: Int,
lastModified: String,
entityTag: String,
timestamp: Long,
): Repository {
return copy(
mirrors = mirrors,
name = name,
description = description,
version = if (version >= 0) version else this.version,
lastModified = lastModified,
entityTag = entityTag,
updated = System.currentTimeMillis(),
timestamp = timestamp
)
}
fun enable(enabled: Boolean): Repository {
return copy(enabled = enabled, lastModified = "", entityTag = "")
}
@Suppress("SpellCheckingInspection")
companion object {
fun newRepository(
address: String,
fingerprint: String,
authentication: String,
): Repository {
val name = try {
URL(address).let { "${it.host}${it.path}" }
} catch (e: Exception) {
address
}
return defaultRepository(address, name, "", 0, true, fingerprint, authentication)
}
private fun defaultRepository(
address: String,
name: String,
description: String,
version: Int = 21,
enabled: Boolean = false,
fingerprint: String,
authentication: String = "",
): Repository {
return Repository(
-1, address, emptyList(), name, description, version, enabled,
fingerprint, "", "", 0L, 0L, authentication
)
}
val defaultRepositories = listOf(
defaultRepository(
address = "https://f-droid.org/repo",
name = "F-Droid",
description = "The official F-Droid Free Software repos" +
"itory. Everything in this repository is always buil" +
"t from the source code.",
enabled = true,
fingerprint = "43238D512C1E5EB2D6569F4A3AFBF5523418B82E0A3ED1552770ABB9A9C9CCAB"
),
defaultRepository(
address = "https://f-droid.org/archive",
name = "F-Droid Archive",
description = "The archive of the official F-Droid Free" +
" Software repository. Apps here are old and can co" +
"ntain known vulnerabilities and security issues!",
fingerprint = "43238D512C1E5EB2D6569F4A3AFBF5523418B82E0A3ED1552770ABB9A9C9CCAB"
),
defaultRepository(
address = "https://guardianproject.info/fdroid/repo",
name = "Guardian Project Official Releases",
description = "The official repository of The Guardian " +
"Project apps for use with the F-Droid client. Appl" +
"ications in this repository are official binaries " +
"built by the original application developers and " +
"signed by the same key as the APKs that are relea" +
"sed in the Google Play Store.",
fingerprint = "B7C2EEFD8DAC7806AF67DFCD92EB18126BC08312A7F2D6F3862E46013C7A6135"
),
defaultRepository(
address = "https://guardianproject.info/fdroid/archive",
name = "Guardian Project Archive",
description = "The official repository of The Guardian Pr" +
"oject apps for use with the F-Droid client. This con" +
"tains older versions of applications from the main repository.",
fingerprint = "B7C2EEFD8DAC7806AF67DFCD92EB18126BC08312A7F2D6F3862E46013C7A6135"
),
defaultRepository(
address = "https://apt.izzysoft.de/fdroid/repo",
name = "IzzyOnDroid F-Droid Repo",
description = "This is a repository of apps to be used with" +
" F-Droid the original application developers, taken" +
" from the resp. repositories (mostly GitHub). At thi" +
"s moment I cannot give guarantees on regular updates" +
" for all of them, though most are checked multiple times a week ",
enabled = true,
fingerprint = "3BF0D6ABFEAE2F401707B6D966BE743BF0EEE49C2561B9BA39073711F628937A"
),
defaultRepository(
address = "https://microg.org/fdroid/repo",
name = "MicroG Project",
description = "The official repository for MicroG." +
" MicroG is a lightweight open-source implementation" +
" of Google Play Services.",
fingerprint = "9BD06727E62796C0130EB6DAB39B73157451582CBD138E86C468ACC395D14165"
),
defaultRepository(
address = "https://repo.netsyms.com/fdroid/repo",
name = "Netsyms Technologies",
description = "Official collection of open-source apps created" +
" by Netsyms Technologies.",
fingerprint = "2581BA7B32D3AB443180C4087CAB6A7E8FB258D3A6E98870ECB3C675E4D64489"
),
defaultRepository(
address = "https://molly.im/fdroid/foss/fdroid/repo",
name = "Molly",
description = "The official repository for Molly. " +
"Molly is a fork of Signal focused on security.",
fingerprint = "5198DAEF37FC23C14D5EE32305B2AF45787BD7DF2034DE33AD302BDB3446DF74"
),
defaultRepository(
address = "https://archive.newpipe.net/fdroid/repo",
name = "NewPipe",
description = "The official repository for NewPipe." +
" NewPipe is a lightweight client for Youtube, PeerTube" +
", Soundcloud, etc.",
fingerprint = "E2402C78F9B97C6C89E97DB914A2751FDA1D02FE2039CC0897A462BDB57E7501"
),
defaultRepository(
address = "https://www.collaboraoffice.com/downloads/fdroid/repo",
name = "Collabora Office",
description = "Collabora Office is an office suite based on LibreOffice.",
fingerprint = "573258C84E149B5F4D9299E7434B2B69A8410372921D4AE586BA91EC767892CC"
),
defaultRepository(
address = "https://fdroid.libretro.com/repo",
name = "LibRetro",
description = "The official canary repository for this great" +
" retro emulators hub.",
fingerprint = "3F05B24D497515F31FEAB421297C79B19552C5C81186B3750B7C131EF41D733D"
),
defaultRepository(
address = "https://cdn.kde.org/android/fdroid/repo",
name = "KDE Android",
description = "The official nightly repository for KDE Android apps.",
fingerprint = "B3EBE10AFA6C5C400379B34473E843D686C61AE6AD33F423C98AF903F056523F"
),
defaultRepository(
address = "https://calyxos.gitlab.io/calyx-fdroid-repo/fdroid/repo",
name = "Calyx OS Repo",
description = "The official Calyx Labs F-Droid repository.",
fingerprint = "C44D58B4547DE5096138CB0B34A1CC99DAB3B4274412ED753FCCBFC11DC1B7B6"
),
defaultRepository(
address = "https://divestos.org/fdroid/official",
name = "Divest OS Repo",
description = "The official Divest OS F-Droid repository.",
fingerprint = "E4BE8D6ABFA4D9D4FEEF03CDDA7FF62A73FD64B75566F6DD4E5E577550BE8467"
),
defaultRepository(
address = "https://fdroid.fedilab.app/repo",
name = "Fedilab",
description = "The official repository for Fedilab. Fedilab is a " +
"multi-accounts client for Mastodon, Peertube, and other free" +
" software social networks.",
fingerprint = "11F0A69910A4280E2CD3CCC3146337D006BE539B18E1A9FEACE15FF757A94FEB"
),
defaultRepository(
address = "https://store.nethunter.com/repo",
name = "Kali Nethunter",
description = "Kali Nethunter's official selection of original b" +
"inaries.",
fingerprint = "7E418D34C3AD4F3C37D7E6B0FACE13332364459C862134EB099A3BDA2CCF4494"
),
defaultRepository(
address = "https://secfirst.org/fdroid/repo",
name = "Umbrella",
description = "The official repository for Umbrella. Umbrella is" +
" a collection of security advices, tutorials, tools etc.",
fingerprint = "39EB57052F8D684514176819D1645F6A0A7BD943DBC31AB101949006AC0BC228"
),
defaultRepository(
address = "https://thecapslock.gitlab.io/fdroid-patched-apps/fdroid/repo",
name = "Patched Apps",
description = "A collection of patched applications to provid" +
"e better compatibility, privacy etc..",
fingerprint = "313D9E6E789FF4E8E2D687AAE31EEF576050003ED67963301821AC6D3763E3AC"
),
defaultRepository(
address = "https://mobileapp.bitwarden.com/fdroid/repo",
name = "Bitwarden",
description = "The official repository for Bitwarden. Bitward" +
"en is a password manager.",
fingerprint = "BC54EA6FD1CD5175BCCCC47C561C5726E1C3ED7E686B6DB4B18BAC843A3EFE6C"
),
defaultRepository(
address = "https://briarproject.org/fdroid/repo",
name = "Briar",
description = "The official repository for Briar. Briar is a" +
" serverless/offline messenger that focused on privacy, s" +
"ecurity, and decentralization.",
fingerprint = "1FB874BEE7276D28ECB2C9B06E8A122EC4BCB4008161436CE474C257CBF49BD6"
),
defaultRepository(
address = "https://guardianproject-wind.s3.amazonaws.com/fdroid/repo",
name = "Wind Project",
description = "A collection of interesting offline/serverless apps.",
fingerprint = "182CF464D219D340DA443C62155198E399FEC1BC4379309B775DD9FC97ED97E1"
),
defaultRepository(
address = "https://nanolx.org/fdroid/repo",
name = "NanoDroid",
description = "A companion repository to microG's installer.",
fingerprint = "862ED9F13A3981432BF86FE93D14596B381D75BE83A1D616E2D44A12654AD015"
),
defaultRepository(
address = "https://releases.threema.ch/fdroid/repo",
name = "Threema Libre",
description = "The official repository for Threema Libre. R" +
"equires Threema Shop license. Threema Libre is an open" +
"-source messanger focused on security and privacy.",
fingerprint = "5734E753899B25775D90FE85362A49866E05AC4F83C05BEF5A92880D2910639E"
),
defaultRepository(
address = "https://fdroid.getsession.org/fdroid/repo",
name = "Session",
description = "The official repository for Session. Session" +
" is an open-source messanger focused on security and privacy.",
fingerprint = "DB0E5297EB65CC22D6BD93C869943BDCFCB6A07DC69A48A0DD8C7BA698EC04E6"
),
defaultRepository(
address = "https://www.cromite.org/fdroid/repo",
name = "Cromite",
description = "The official repository for Cromite. Cromite" +
" is a Chromium with ad blocking and enhanced privacy.",
fingerprint = "49F37E74DEE483DCA2B991334FB5A0200787430D0B5F9A783DD5F13695E9517B"
),
defaultRepository(
address = "https://fdroid.twinhelix.com/fdroid/repo",
name = "TwinHelix",
description = "TwinHelix F-Droid Repository, used for Signa" +
"l-FOSS, an open-source fork of Signal Private Messenger.",
fingerprint = "7b03b0232209b21b10a30a63897d3c6bca4f58fe29bc3477e8e3d8cf8e304028"
),
defaultRepository(
address = "https://fdroid.typeblog.net",
name = "PeterCxy's F-Droid",
description = "You have landed on PeterCxy's F-Droid repo. T" +
"o use this repository, please add the page's URL to your F-Droid client.",
fingerprint = "1a7e446c491c80bc2f83844a26387887990f97f2f379ae7b109679feae3dbc8c"
),
defaultRepository(
address = "https://s2.spiritcroc.de/fdroid/repo",
name = "SpiritCroc.de",
description = "While some of my apps are available from" +
" the official F-Droid repository, I also maintain my" +
" own repository for a small selection of apps. These" +
" might be forks of other apps with only minor change" +
"s, or apps that are not published on the Play Store f" +
"or other reasons. In contrast to the official F-Droid" +
" repos, these might also include proprietary librarie" +
"s, e.g. for push notifications.",
fingerprint = "6612ade7e93174a589cf5ba26ed3ab28231a789640546c8f30375ef045bc9242"
),
defaultRepository(
address = "https://s2.spiritcroc.de/testing/fdroid/repo",
name = "SpiritCroc.de Test Builds",
description = "SpiritCroc.de Test Builds",
fingerprint = "52d03f2fab785573bb295c7ab270695e3a1bdd2adc6a6de8713250b33f231225"
),
defaultRepository(
address = "https://static.cryptomator.org/android/fdroid/repo",
name = "Cryptomator",
description = "No Description",
fingerprint = "f7c3ec3b0d588d3cb52983e9eb1a7421c93d4339a286398e71d7b651e8d8ecdd"
),
defaultRepository(
address = "https://divestos.org/apks/unofficial/fdroid/repo",
name = "DivestOS Unofficial",
description = "This repository contains unofficial builds of open source apps" +
" that are not included in the other repos.",
fingerprint = "a18cdb92f40ebfbbf778a54fd12dbd74d90f1490cb9ef2cc6c7e682dd556855d"
),
defaultRepository(
address = "https://cdn.kde.org/android/stable-releases/fdroid/repo",
name = "KDE Stables",
description = "This repository contains unofficial builds of open source apps" +
" that are not included in the other repos.",
fingerprint = "13784ba6c80ff4e2181e55c56f961eed5844cea16870d3b38d58780b85e1158f"
),
defaultRepository(
address = "https://zimbelstern.eu/fdroid/repo",
name = "Zimbelstern's F-Droid repository",
description = "This is the official repository of apps from zimbelstern.eu," +
" to be used with F-Droid.",
fingerprint = "285158DECEF37CB8DE7C5AF14818ACBF4A9B1FBE63116758EFC267F971CA23AA"
),
defaultRepository(
address = "https://app.simplex.chat/fdroid/repo",
name = "SimpleX Chat F-Droid",
description = "SimpleX Chat official F-Droid repository.",
fingerprint = "9F358FF284D1F71656A2BFAF0E005DEAE6AA14143720E089F11FF2DDCFEB01BA"
),
defaultRepository(
address = "https://f-droid.monerujo.io/fdroid/repo",
name = "Monerujo Wallet",
description = "Monerujo Monero Wallet official F-Droid repository.",
fingerprint = "A82C68E14AF0AA6A2EC20E6B272EFF25E5A038F3F65884316E0F5E0D91E7B713"
),
defaultRepository(
address = "https://fdroid.cakelabs.com/fdroid/repo",
name = "Cake Labs",
description = "Cake Labs official F-Droid repository for Cake Wallet and Monero.com",
fingerprint = "EA44EFAEE0B641EE7A032D397D5D976F9C4E5E1ED26E11C75702D064E55F8755"
),
defaultRepository(
address = "https://app.futo.org/fdroid/repo",
name = "FUTO",
description = "FUTO official F-Droid repository.",
fingerprint = "39D47869D29CBFCE4691D9F7E6946A7B6D7E6FF4883497E6E675744ECDFA6D6D"
),
defaultRepository(
address = "https://fdroid.mm20.de/repo",
name = "MM20 Apps",
description = "Apps developed and distributed by MM20",
fingerprint = "156FBAB952F6996415F198F3F29628D24B30E725B0F07A2B49C3A9B5161EEE1A"
),
defaultRepository(
address = "https://breezy-weather.github.io/fdroid-repo/fdroid/repo",
name = "Breezy Weather",
description = "The F-Droid repository for Breezy Weather",
fingerprint = "3480A7BB2A296D8F98CB90D2309199B5B9519C1B31978DBCD877ADB102AF35EE"
),
defaultRepository(
address = "https://gh.artemchep.com/keyguard-repo-fdroid/repo",
name = "Keyguard Project",
description = "Mirrors artifacts available on https://github.com/AChep/keyguard-app/releases",
fingerprint = "03941CE79B081666609C8A48AB6E46774263F6FC0BBF1FA046CCFFC60EA643BC"
),
defaultRepository(
address = "https://f5a.torus.icu/fdroid/repo",
name = "Fcitx 5 For Android F-Droid Repo",
description = "Out-of-tree fcitx5-android plugins.",
fingerprint = "5D87CE1FAD3772425C2A7ED987A57595A20B07543B9595A7FD2CED25DFF3CF12"
),
defaultRepository(
address = "https://fdroid.i2pd.xyz/fdroid/repo/",
name = "PurpleI2P F-Droid repository",
description = "This is a repository of PurpleI2P. It contains applications developed and supported by our team.",
fingerprint = "5D87CE1FAD3772425C2A7ED987A57595A20B07543B9595A7FD2CED25DFF3CF12"
),
)
val newlyAdded: List<Repository> = listOf(
defaultRepository(
address = "https://fdroid.ironfoxoss.org/fdroid/repo",
name = "IronFox",
description = "The official repository for IronFox:" +
" A privacy and security-oriented Firefox-based browser for Android.",
fingerprint = "C5E291B5A571F9C8CD9A9799C2C94E02EC9703948893F2CA756D67B94204F904"
),
defaultRepository(
address = "https://raw.githubusercontent.com/chrisgch/tca/master/fdroid/repo",
name = "Total Commander",
description = "The official repository for Total Commander",
fingerprint = "3576596CECDD70488D61CFD90799A49B7FFD26A81A8FEF1BADEC88D069FA72C1"
),
defaultRepository(
address = "https://www.cromite.org/fdroid/repo",
name = "Cromite",
description = "The official repository for Cromite. " +
"Cromite is a Chromium fork based on Bromite with " +
"built-in support for ad blocking and an eye for privacy.",
fingerprint = "49F37E74DEE483DCA2B991334FB5A0200787430D0B5F9A783DD5F13695E9517B"
)
)
}
}

View File

@@ -1,17 +0,0 @@
package com.looker.droidify.utility.extension
import android.content.pm.PackageInfo
import com.looker.droidify.utility.common.extension.calculateHash
import com.looker.droidify.utility.common.extension.singleSignature
import com.looker.droidify.utility.common.extension.versionCodeCompat
import com.looker.droidify.model.InstalledItem
fun PackageInfo.toInstalledItem(): InstalledItem {
val signatureString = singleSignature?.calculateHash().orEmpty()
return InstalledItem(
packageName,
versionName.orEmpty(),
versionCodeCompat,
signatureString
)
}

View File

@@ -1,4 +1,4 @@
package com.looker.droidify
package de.felitendo.felostore
import android.annotation.SuppressLint
import android.app.Application
@@ -21,30 +21,30 @@ import coil3.disk.DiskCache
import coil3.disk.directory
import coil3.memory.MemoryCache
import coil3.request.crossfade
import com.looker.droidify.content.ProductPreferences
import com.looker.droidify.database.Database
import com.looker.droidify.datastore.SettingsRepository
import com.looker.droidify.datastore.get
import com.looker.droidify.datastore.model.AutoSync
import com.looker.droidify.datastore.model.ProxyPreference
import com.looker.droidify.datastore.model.ProxyType
import com.looker.droidify.index.RepositoryUpdater
import com.looker.droidify.installer.InstallManager
import com.looker.droidify.network.Downloader
import com.looker.droidify.receivers.InstalledAppReceiver
import com.looker.droidify.service.Connection
import com.looker.droidify.service.SyncService
import com.looker.droidify.sync.SyncPreference
import com.looker.droidify.sync.toJobNetworkType
import com.looker.droidify.utility.common.Constants
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.utility.common.cache.Cache
import com.looker.droidify.utility.common.extension.getDrawableCompat
import com.looker.droidify.utility.common.extension.getInstalledPackagesCompat
import com.looker.droidify.utility.common.extension.jobScheduler
import com.looker.droidify.utility.common.log
import com.looker.droidify.utility.extension.toInstalledItem
import com.looker.droidify.work.CleanUpWorker
import de.felitendo.felostore.content.ProductPreferences
import de.felitendo.felostore.database.Database
import de.felitendo.felostore.datastore.SettingsRepository
import de.felitendo.felostore.datastore.get
import de.felitendo.felostore.datastore.model.AutoSync
import de.felitendo.felostore.datastore.model.ProxyPreference
import de.felitendo.felostore.datastore.model.ProxyType
import de.felitendo.felostore.index.RepositoryUpdater
import de.felitendo.felostore.installer.InstallManager
import de.felitendo.felostore.network.Downloader
import de.felitendo.felostore.receivers.InstalledAppReceiver
import de.felitendo.felostore.service.Connection
import de.felitendo.felostore.service.SyncService
import de.felitendo.felostore.sync.SyncPreference
import de.felitendo.felostore.sync.toJobNetworkType
import de.felitendo.felostore.utility.common.Constants
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.utility.common.cache.Cache
import de.felitendo.felostore.utility.common.extension.getDrawableCompat
import de.felitendo.felostore.utility.common.extension.getInstalledPackagesCompat
import de.felitendo.felostore.utility.common.extension.jobScheduler
import de.felitendo.felostore.utility.common.log
import de.felitendo.felostore.utility.extension.toInstalledItem
import de.felitendo.felostore.work.CleanUpWorker
import dagger.hilt.android.HiltAndroidApp
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -60,7 +60,7 @@ import kotlin.time.Duration.Companion.INFINITE
import kotlin.time.Duration.Companion.hours
@HiltAndroidApp
class Droidify : Application(), SingletonImageLoader.Factory, Configuration.Provider {
class FeloStore : Application(), SingletonImageLoader.Factory, Configuration.Provider {
private val parentJob = SupervisorJob()
private val appScope = CoroutineScope(Dispatchers.Default + parentJob)

View File

@@ -1,4 +1,4 @@
package com.looker.droidify
package de.felitendo.felostore
import android.content.Intent
import android.os.Build
@@ -14,26 +14,26 @@ import androidx.core.view.WindowCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.commit
import androidx.lifecycle.lifecycleScope
import com.looker.droidify.utility.common.DeeplinkType
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.utility.common.deeplinkType
import com.looker.droidify.utility.common.extension.homeAsUp
import com.looker.droidify.utility.common.extension.inputManager
import com.looker.droidify.utility.common.getInstallPackageName
import com.looker.droidify.utility.common.requestNotificationPermission
import com.looker.droidify.database.CursorOwner
import com.looker.droidify.datastore.SettingsRepository
import com.looker.droidify.datastore.extension.getThemeRes
import com.looker.droidify.datastore.get
import com.looker.droidify.installer.InstallManager
import com.looker.droidify.installer.model.installFrom
import com.looker.droidify.ui.appDetail.AppDetailFragment
import com.looker.droidify.ui.favourites.FavouritesFragment
import com.looker.droidify.ui.repository.EditRepositoryFragment
import com.looker.droidify.ui.repository.RepositoriesFragment
import com.looker.droidify.ui.repository.RepositoryFragment
import com.looker.droidify.ui.settings.SettingsFragment
import com.looker.droidify.ui.tabsFragment.TabsFragment
import de.felitendo.felostore.utility.common.DeeplinkType
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.utility.common.deeplinkType
import de.felitendo.felostore.utility.common.extension.homeAsUp
import de.felitendo.felostore.utility.common.extension.inputManager
import de.felitendo.felostore.utility.common.getInstallPackageName
import de.felitendo.felostore.utility.common.requestNotificationPermission
import de.felitendo.felostore.database.CursorOwner
import de.felitendo.felostore.datastore.SettingsRepository
import de.felitendo.felostore.datastore.extension.getThemeRes
import de.felitendo.felostore.datastore.get
import de.felitendo.felostore.installer.InstallManager
import de.felitendo.felostore.installer.model.installFrom
import de.felitendo.felostore.ui.appDetail.AppDetailFragment
import de.felitendo.felostore.ui.favourites.FavouritesFragment
import de.felitendo.felostore.ui.repository.EditRepositoryFragment
import de.felitendo.felostore.ui.repository.RepositoriesFragment
import de.felitendo.felostore.ui.repository.RepositoryFragment
import de.felitendo.felostore.ui.settings.SettingsFragment
import de.felitendo.felostore.ui.tabsFragment.TabsFragment
import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.android.AndroidEntryPoint

View File

@@ -1,14 +1,14 @@
package com.looker.droidify.content
package de.felitendo.felostore.content
import android.content.Context
import android.content.SharedPreferences
import com.looker.droidify.utility.common.extension.Json
import com.looker.droidify.utility.common.extension.parseDictionary
import com.looker.droidify.utility.common.extension.writeDictionary
import com.looker.droidify.model.ProductPreference
import com.looker.droidify.database.Database
import com.looker.droidify.utility.serialization.productPreference
import com.looker.droidify.utility.serialization.serialize
import de.felitendo.felostore.utility.common.extension.Json
import de.felitendo.felostore.utility.common.extension.parseDictionary
import de.felitendo.felostore.utility.common.extension.writeDictionary
import de.felitendo.felostore.model.ProductPreference
import de.felitendo.felostore.database.Database
import de.felitendo.felostore.utility.serialization.productPreference
import de.felitendo.felostore.utility.serialization.serialize
import java.io.ByteArrayOutputStream
import java.nio.charset.Charset
import kotlinx.coroutines.CoroutineScope

View File

@@ -1,12 +1,12 @@
package com.looker.droidify.database
package de.felitendo.felostore.database
import android.database.Cursor
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.loader.app.LoaderManager
import androidx.loader.content.Loader
import com.looker.droidify.datastore.model.SortOrder
import com.looker.droidify.model.ProductItem
import de.felitendo.felostore.datastore.model.SortOrder
import de.felitendo.felostore.model.ProductItem
class CursorOwner : Fragment(), LoaderManager.LoaderCallbacks<Cursor> {
sealed class Request {

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.database
package de.felitendo.felostore.database
import android.content.ContentValues
import android.content.Context
@@ -9,22 +9,22 @@ import android.os.CancellationSignal
import androidx.core.database.sqlite.transaction
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser
import com.looker.droidify.BuildConfig
import com.looker.droidify.datastore.model.SortOrder
import com.looker.droidify.model.InstalledItem
import com.looker.droidify.model.Product
import com.looker.droidify.model.ProductItem
import com.looker.droidify.model.Repository
import com.looker.droidify.utility.common.extension.Json
import com.looker.droidify.utility.common.extension.asSequence
import com.looker.droidify.utility.common.extension.firstOrNull
import com.looker.droidify.utility.common.extension.parseDictionary
import com.looker.droidify.utility.common.extension.writeDictionary
import com.looker.droidify.utility.common.log
import com.looker.droidify.utility.serialization.product
import com.looker.droidify.utility.serialization.productItem
import com.looker.droidify.utility.serialization.repository
import com.looker.droidify.utility.serialization.serialize
import de.felitendo.felostore.BuildConfig
import de.felitendo.felostore.datastore.model.SortOrder
import de.felitendo.felostore.model.InstalledItem
import de.felitendo.felostore.model.Product
import de.felitendo.felostore.model.ProductItem
import de.felitendo.felostore.model.Repository
import de.felitendo.felostore.utility.common.extension.Json
import de.felitendo.felostore.utility.common.extension.asSequence
import de.felitendo.felostore.utility.common.extension.firstOrNull
import de.felitendo.felostore.utility.common.extension.parseDictionary
import de.felitendo.felostore.utility.common.extension.writeDictionary
import de.felitendo.felostore.utility.common.log
import de.felitendo.felostore.utility.serialization.product
import de.felitendo.felostore.utility.serialization.productItem
import de.felitendo.felostore.utility.serialization.repository
import de.felitendo.felostore.utility.serialization.serialize
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.delay
@@ -190,7 +190,7 @@ object Database {
}
}
private class Helper(context: Context) : SQLiteOpenHelper(context, "droidify", null, 5) {
private class Helper(context: Context) : SQLiteOpenHelper(context, "felostore", null, 5) {
var created = false
private set
var updated = false

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.database
package de.felitendo.felostore.database
import android.database.ContentObservable
import android.database.ContentObserver

View File

@@ -1,11 +1,11 @@
package com.looker.droidify.database
package de.felitendo.felostore.database
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.os.CancellationSignal
import com.looker.droidify.BuildConfig
import com.looker.droidify.utility.common.extension.asSequence
import com.looker.droidify.utility.common.log
import de.felitendo.felostore.BuildConfig
import de.felitendo.felostore.utility.common.extension.asSequence
import de.felitendo.felostore.utility.common.log
class QueryBuilder {

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.database
package de.felitendo.felostore.database
import android.content.Context
import android.database.Cursor

View File

@@ -1,20 +1,20 @@
package com.looker.droidify.database
package de.felitendo.felostore.database
import android.content.Context
import android.net.Uri
import com.fasterxml.jackson.core.JsonToken
import com.looker.droidify.utility.common.Exporter
import com.looker.droidify.utility.common.extension.Json
import com.looker.droidify.utility.common.extension.forEach
import com.looker.droidify.utility.common.extension.forEachKey
import com.looker.droidify.utility.common.extension.parseDictionary
import com.looker.droidify.utility.common.extension.writeArray
import com.looker.droidify.utility.common.extension.writeDictionary
import com.looker.droidify.di.ApplicationScope
import com.looker.droidify.di.IoDispatcher
import com.looker.droidify.model.Repository
import com.looker.droidify.utility.serialization.repository
import com.looker.droidify.utility.serialization.serialize
import de.felitendo.felostore.utility.common.Exporter
import de.felitendo.felostore.utility.common.extension.Json
import de.felitendo.felostore.utility.common.extension.forEach
import de.felitendo.felostore.utility.common.extension.forEachKey
import de.felitendo.felostore.utility.common.extension.parseDictionary
import de.felitendo.felostore.utility.common.extension.writeArray
import de.felitendo.felostore.utility.common.extension.writeDictionary
import de.felitendo.felostore.di.ApplicationScope
import de.felitendo.felostore.di.IoDispatcher
import de.felitendo.felostore.model.Repository
import de.felitendo.felostore.utility.serialization.repository
import de.felitendo.felostore.utility.serialization.serialize
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import javax.inject.Singleton

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.datastore
package de.felitendo.felostore.datastore
import android.net.Uri
import android.util.Log
@@ -12,14 +12,14 @@ import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.core.longPreferencesKey
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.core.stringSetPreferencesKey
import com.looker.droidify.datastore.model.AutoSync
import com.looker.droidify.datastore.model.InstallerType
import com.looker.droidify.datastore.model.ProxyPreference
import com.looker.droidify.datastore.model.ProxyType
import com.looker.droidify.datastore.model.SortOrder
import com.looker.droidify.datastore.model.Theme
import com.looker.droidify.utility.common.Exporter
import com.looker.droidify.utility.common.extension.updateAsMutable
import de.felitendo.felostore.datastore.model.AutoSync
import de.felitendo.felostore.datastore.model.InstallerType
import de.felitendo.felostore.datastore.model.ProxyPreference
import de.felitendo.felostore.datastore.model.ProxyType
import de.felitendo.felostore.datastore.model.SortOrder
import de.felitendo.felostore.datastore.model.Theme
import de.felitendo.felostore.utility.common.Exporter
import de.felitendo.felostore.utility.common.extension.updateAsMutable
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.first

View File

@@ -1,11 +1,11 @@
package com.looker.droidify.datastore
package de.felitendo.felostore.datastore
import androidx.datastore.core.Serializer
import com.looker.droidify.datastore.model.AutoSync
import com.looker.droidify.datastore.model.InstallerType
import com.looker.droidify.datastore.model.ProxyPreference
import com.looker.droidify.datastore.model.SortOrder
import com.looker.droidify.datastore.model.Theme
import de.felitendo.felostore.datastore.model.AutoSync
import de.felitendo.felostore.datastore.model.InstallerType
import de.felitendo.felostore.datastore.model.ProxyPreference
import de.felitendo.felostore.datastore.model.SortOrder
import de.felitendo.felostore.datastore.model.Theme
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
@@ -25,11 +25,11 @@ data class Settings(
val incompatibleVersions: Boolean = false,
val notifyUpdate: Boolean = true,
val unstableUpdate: Boolean = false,
val ignoreSignature: Boolean = false,
val ignoreSignature: Boolean = true,
val theme: Theme = Theme.SYSTEM,
val dynamicTheme: Boolean = false,
val dynamicTheme: Boolean = true,
val installerType: InstallerType = InstallerType.Default,
val autoUpdate: Boolean = false,
val autoUpdate: Boolean = true,
val autoSync: AutoSync = AutoSync.WIFI_ONLY,
val sortOrder: SortOrder = SortOrder.UPDATED,
val proxy: ProxyPreference = ProxyPreference(),

View File

@@ -1,11 +1,11 @@
package com.looker.droidify.datastore
package de.felitendo.felostore.datastore
import android.net.Uri
import com.looker.droidify.datastore.model.AutoSync
import com.looker.droidify.datastore.model.InstallerType
import com.looker.droidify.datastore.model.ProxyType
import com.looker.droidify.datastore.model.SortOrder
import com.looker.droidify.datastore.model.Theme
import de.felitendo.felostore.datastore.model.AutoSync
import de.felitendo.felostore.datastore.model.InstallerType
import de.felitendo.felostore.datastore.model.ProxyType
import de.felitendo.felostore.datastore.model.SortOrder
import de.felitendo.felostore.datastore.model.Theme
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map

View File

@@ -1,9 +1,9 @@
package com.looker.droidify.datastore.exporter
package de.felitendo.felostore.datastore.exporter
import android.content.Context
import android.net.Uri
import com.looker.droidify.utility.common.Exporter
import com.looker.droidify.datastore.Settings
import de.felitendo.felostore.utility.common.Exporter
import de.felitendo.felostore.datastore.Settings
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.cancel

View File

@@ -1,16 +1,16 @@
package com.looker.droidify.datastore.extension
package de.felitendo.felostore.datastore.extension
import android.content.Context
import android.content.res.Configuration
import com.looker.droidify.R
import com.looker.droidify.R.string as stringRes
import com.looker.droidify.R.style as styleRes
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.datastore.model.AutoSync
import com.looker.droidify.datastore.model.InstallerType
import com.looker.droidify.datastore.model.ProxyType
import com.looker.droidify.datastore.model.SortOrder
import com.looker.droidify.datastore.model.Theme
import de.felitendo.felostore.R
import de.felitendo.felostore.R.string as stringRes
import de.felitendo.felostore.R.style as styleRes
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.datastore.model.AutoSync
import de.felitendo.felostore.datastore.model.InstallerType
import de.felitendo.felostore.datastore.model.ProxyType
import de.felitendo.felostore.datastore.model.SortOrder
import de.felitendo.felostore.datastore.model.Theme
import kotlin.time.Duration
fun Configuration.getThemeRes(theme: Theme, dynamicTheme: Boolean) = when (theme) {

View File

@@ -1,7 +1,7 @@
package com.looker.droidify.datastore.migration
package de.felitendo.felostore.datastore.migration
import com.looker.droidify.datastore.PreferenceSettingsRepository.PreferencesKeys.setting
import com.looker.droidify.datastore.Settings
import de.felitendo.felostore.datastore.PreferenceSettingsRepository.PreferencesKeys.setting
import de.felitendo.felostore.datastore.Settings
import kotlinx.coroutines.flow.first
class ProtoToPreferenceMigration(

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.datastore.model
package de.felitendo.felostore.datastore.model
enum class AutoSync {
ALWAYS,

View File

@@ -1,6 +1,6 @@
package com.looker.droidify.datastore.model
package de.felitendo.felostore.datastore.model
import com.looker.droidify.utility.common.device.Miui
import de.felitendo.felostore.utility.common.device.Miui
enum class InstallerType {
LEGACY,

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.datastore.model
package de.felitendo.felostore.datastore.model
import kotlinx.serialization.Serializable

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.datastore.model
package de.felitendo.felostore.datastore.model
enum class ProxyType {
DIRECT,

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.datastore.model
package de.felitendo.felostore.datastore.model
// todo: Add Support for sorting by size
enum class SortOrder {

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.datastore.model
package de.felitendo.felostore.datastore.model
enum class Theme {
SYSTEM,

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.di
package de.felitendo.felostore.di
import dagger.Module
import dagger.Provides

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.di
package de.felitendo.felostore.di
import android.content.Context
import androidx.datastore.core.DataStore
@@ -7,13 +7,13 @@ import androidx.datastore.dataStoreFile
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.preferencesDataStoreFile
import com.looker.droidify.utility.common.Exporter
import com.looker.droidify.datastore.PreferenceSettingsRepository
import com.looker.droidify.datastore.Settings
import com.looker.droidify.datastore.SettingsRepository
import com.looker.droidify.datastore.SettingsSerializer
import com.looker.droidify.datastore.exporter.SettingsExporter
import com.looker.droidify.datastore.migration.ProtoToPreferenceMigration
import de.felitendo.felostore.utility.common.Exporter
import de.felitendo.felostore.datastore.PreferenceSettingsRepository
import de.felitendo.felostore.datastore.Settings
import de.felitendo.felostore.datastore.SettingsRepository
import de.felitendo.felostore.datastore.SettingsSerializer
import de.felitendo.felostore.datastore.exporter.SettingsExporter
import de.felitendo.felostore.datastore.migration.ProtoToPreferenceMigration
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn

View File

@@ -1,8 +1,8 @@
package com.looker.droidify.di
package de.felitendo.felostore.di
import android.content.Context
import com.looker.droidify.datastore.SettingsRepository
import com.looker.droidify.installer.InstallManager
import de.felitendo.felostore.datastore.SettingsRepository
import de.felitendo.felostore.installer.InstallManager
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn

View File

@@ -1,7 +1,7 @@
package com.looker.droidify.di
package de.felitendo.felostore.di
import com.looker.droidify.network.Downloader
import com.looker.droidify.network.KtorDownloader
import de.felitendo.felostore.network.Downloader
import de.felitendo.felostore.network.KtorDownloader
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn

View File

@@ -1,10 +1,10 @@
package com.looker.droidify.domain
package de.felitendo.felostore.domain
import com.looker.droidify.domain.model.App
import com.looker.droidify.domain.model.AppMinimal
import com.looker.droidify.domain.model.Author
import com.looker.droidify.domain.model.Package
import com.looker.droidify.domain.model.PackageName
import de.felitendo.felostore.domain.model.App
import de.felitendo.felostore.domain.model.AppMinimal
import de.felitendo.felostore.domain.model.Author
import de.felitendo.felostore.domain.model.Package
import de.felitendo.felostore.domain.model.PackageName
import kotlinx.coroutines.flow.Flow
interface AppRepository {

View File

@@ -1,6 +1,6 @@
package com.looker.droidify.domain
package de.felitendo.felostore.domain
import com.looker.droidify.domain.model.Repo
import de.felitendo.felostore.domain.model.Repo
import kotlinx.coroutines.flow.Flow
interface RepoRepository {

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.domain.model
package de.felitendo.felostore.domain.model
data class App(
val repoId: Long,

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.domain.model
package de.felitendo.felostore.domain.model
interface DataFile {
val name: String

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.domain.model
package de.felitendo.felostore.domain.model
import java.security.MessageDigest
import java.security.cert.Certificate

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.domain.model
package de.felitendo.felostore.domain.model
data class Package(
val id: Long,

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.domain.model
package de.felitendo.felostore.domain.model
@JvmInline
value class PackageName(val name: String)

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.domain.model
package de.felitendo.felostore.domain.model
data class Repo(
val id: Long,

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.graphics
package de.felitendo.felostore.graphics
import android.graphics.Canvas
import android.graphics.ColorFilter

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.graphics
package de.felitendo.felostore.graphics
import android.graphics.Rect
import android.graphics.drawable.Drawable

View File

@@ -1,17 +1,17 @@
package com.looker.droidify.index
package de.felitendo.felostore.index
import android.content.ContentValues
import android.database.sqlite.SQLiteDatabase
import com.fasterxml.jackson.core.JsonToken
import com.looker.droidify.utility.common.extension.Json
import com.looker.droidify.utility.common.extension.asSequence
import com.looker.droidify.utility.common.extension.collectNotNull
import com.looker.droidify.utility.common.extension.writeDictionary
import com.looker.droidify.model.Product
import com.looker.droidify.model.Release
import com.looker.droidify.utility.serialization.product
import com.looker.droidify.utility.serialization.release
import com.looker.droidify.utility.serialization.serialize
import de.felitendo.felostore.utility.common.extension.Json
import de.felitendo.felostore.utility.common.extension.asSequence
import de.felitendo.felostore.utility.common.extension.collectNotNull
import de.felitendo.felostore.utility.common.extension.writeDictionary
import de.felitendo.felostore.model.Product
import de.felitendo.felostore.model.Release
import de.felitendo.felostore.utility.serialization.product
import de.felitendo.felostore.utility.serialization.release
import de.felitendo.felostore.utility.serialization.serialize
import java.io.ByteArrayOutputStream
import java.io.Closeable
import java.io.File

View File

@@ -1,31 +1,31 @@
package com.looker.droidify.index
package de.felitendo.felostore.index
import android.content.res.Resources
import androidx.core.os.ConfigurationCompat.getLocales
import androidx.core.os.LocaleListCompat
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonToken
import com.looker.droidify.utility.common.extension.Json
import com.looker.droidify.utility.common.extension.collectDistinctNotEmptyStrings
import com.looker.droidify.utility.common.extension.collectNotNull
import com.looker.droidify.utility.common.extension.forEach
import com.looker.droidify.utility.common.extension.forEachKey
import com.looker.droidify.utility.common.extension.illegal
import com.looker.droidify.model.Product
import com.looker.droidify.model.Product.Donate.Bitcoin
import com.looker.droidify.model.Product.Donate.Liberapay
import com.looker.droidify.model.Product.Donate.Litecoin
import com.looker.droidify.model.Product.Donate.OpenCollective
import com.looker.droidify.model.Product.Donate.Regular
import com.looker.droidify.model.Product.Screenshot.Type.LARGE_TABLET
import com.looker.droidify.model.Product.Screenshot.Type.PHONE
import com.looker.droidify.model.Product.Screenshot.Type.SMALL_TABLET
import com.looker.droidify.model.Product.Screenshot.Type.TV
import com.looker.droidify.model.Product.Screenshot.Type.VIDEO
import com.looker.droidify.model.Product.Screenshot.Type.WEAR
import com.looker.droidify.model.Release
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.utility.common.nullIfEmpty
import de.felitendo.felostore.utility.common.extension.Json
import de.felitendo.felostore.utility.common.extension.collectDistinctNotEmptyStrings
import de.felitendo.felostore.utility.common.extension.collectNotNull
import de.felitendo.felostore.utility.common.extension.forEach
import de.felitendo.felostore.utility.common.extension.forEachKey
import de.felitendo.felostore.utility.common.extension.illegal
import de.felitendo.felostore.model.Product
import de.felitendo.felostore.model.Product.Donate.Bitcoin
import de.felitendo.felostore.model.Product.Donate.Liberapay
import de.felitendo.felostore.model.Product.Donate.Litecoin
import de.felitendo.felostore.model.Product.Donate.OpenCollective
import de.felitendo.felostore.model.Product.Donate.Regular
import de.felitendo.felostore.model.Product.Screenshot.Type.LARGE_TABLET
import de.felitendo.felostore.model.Product.Screenshot.Type.PHONE
import de.felitendo.felostore.model.Product.Screenshot.Type.SMALL_TABLET
import de.felitendo.felostore.model.Product.Screenshot.Type.TV
import de.felitendo.felostore.model.Product.Screenshot.Type.VIDEO
import de.felitendo.felostore.model.Product.Screenshot.Type.WEAR
import de.felitendo.felostore.model.Release
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.utility.common.nullIfEmpty
import java.io.InputStream
object IndexV1Parser {

View File

@@ -1,20 +1,20 @@
package com.looker.droidify.index
package de.felitendo.felostore.index
import android.content.Context
import android.net.Uri
import com.looker.droidify.database.Database
import com.looker.droidify.domain.model.fingerprint
import com.looker.droidify.model.Product
import com.looker.droidify.model.Release
import com.looker.droidify.model.Repository
import com.looker.droidify.network.Downloader
import com.looker.droidify.network.NetworkResponse
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.utility.common.cache.Cache
import com.looker.droidify.utility.common.extension.toFormattedString
import com.looker.droidify.utility.common.result.Result
import com.looker.droidify.utility.extension.android.Android
import com.looker.droidify.utility.getProgress
import de.felitendo.felostore.database.Database
import de.felitendo.felostore.domain.model.fingerprint
import de.felitendo.felostore.model.Product
import de.felitendo.felostore.model.Release
import de.felitendo.felostore.model.Repository
import de.felitendo.felostore.network.Downloader
import de.felitendo.felostore.network.NetworkResponse
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.utility.common.cache.Cache
import de.felitendo.felostore.utility.common.extension.toFormattedString
import de.felitendo.felostore.utility.common.result.Result
import de.felitendo.felostore.utility.extension.android.Android
import de.felitendo.felostore.utility.getProgress
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.filter

View File

@@ -1,24 +1,24 @@
package com.looker.droidify.installer
package de.felitendo.felostore.installer
import android.content.Context
import com.looker.droidify.utility.common.extension.addAndCompute
import com.looker.droidify.utility.common.extension.filter
import com.looker.droidify.utility.common.extension.notificationManager
import com.looker.droidify.utility.common.extension.updateAsMutable
import com.looker.droidify.datastore.SettingsRepository
import com.looker.droidify.datastore.get
import com.looker.droidify.datastore.model.InstallerType
import com.looker.droidify.domain.model.PackageName
import com.looker.droidify.installer.installers.Installer
import com.looker.droidify.installer.installers.LegacyInstaller
import com.looker.droidify.installer.installers.root.RootInstaller
import com.looker.droidify.installer.installers.session.SessionInstaller
import com.looker.droidify.installer.installers.shizuku.ShizukuInstaller
import com.looker.droidify.installer.model.InstallItem
import com.looker.droidify.installer.model.InstallState
import com.looker.droidify.installer.notification.createInstallNotification
import com.looker.droidify.installer.notification.installNotification
import com.looker.droidify.installer.notification.removeInstallNotification
import de.felitendo.felostore.utility.common.extension.addAndCompute
import de.felitendo.felostore.utility.common.extension.filter
import de.felitendo.felostore.utility.common.extension.notificationManager
import de.felitendo.felostore.utility.common.extension.updateAsMutable
import de.felitendo.felostore.datastore.SettingsRepository
import de.felitendo.felostore.datastore.get
import de.felitendo.felostore.datastore.model.InstallerType
import de.felitendo.felostore.domain.model.PackageName
import de.felitendo.felostore.installer.installers.Installer
import de.felitendo.felostore.installer.installers.LegacyInstaller
import de.felitendo.felostore.installer.installers.root.RootInstaller
import de.felitendo.felostore.installer.installers.session.SessionInstaller
import de.felitendo.felostore.installer.installers.shizuku.ShizukuInstaller
import de.felitendo.felostore.installer.model.InstallItem
import de.felitendo.felostore.installer.model.InstallState
import de.felitendo.felostore.installer.notification.createInstallNotification
import de.felitendo.felostore.installer.notification.installNotification
import de.felitendo.felostore.installer.notification.removeInstallNotification
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.consumeEach

View File

@@ -0,0 +1,13 @@
package de.felitendo.felostore.installer.installers
import de.felitendo.felostore.domain.model.PackageName
import de.felitendo.felostore.installer.model.InstallItem
import de.felitendo.felostore.installer.model.InstallState
interface Installer : AutoCloseable {
suspend fun install(installItem: InstallItem): InstallState
suspend fun uninstall(packageName: PackageName)
}

View File

@@ -1,12 +1,12 @@
package com.looker.droidify.installer.installers
package de.felitendo.felostore.installer.installers
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import com.looker.droidify.utility.common.extension.getLauncherActivities
import com.looker.droidify.utility.common.extension.getPackageInfoCompat
import com.looker.droidify.utility.common.extension.intent
import de.felitendo.felostore.utility.common.extension.getLauncherActivities
import de.felitendo.felostore.utility.common.extension.getPackageInfoCompat
import de.felitendo.felostore.utility.common.extension.intent
import kotlinx.coroutines.suspendCancellableCoroutine
import rikka.shizuku.ShizukuProvider
import kotlin.coroutines.resume

View File

@@ -1,15 +1,15 @@
package com.looker.droidify.installer.installers
package de.felitendo.felostore.installer.installers
import android.content.Context
import android.content.Intent
import android.util.AndroidRuntimeException
import androidx.core.net.toUri
import com.looker.droidify.domain.model.PackageName
import com.looker.droidify.installer.model.InstallItem
import com.looker.droidify.installer.model.InstallState
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.utility.common.cache.Cache
import com.looker.droidify.utility.common.extension.intent
import de.felitendo.felostore.domain.model.PackageName
import de.felitendo.felostore.installer.model.InstallItem
import de.felitendo.felostore.installer.model.InstallState
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.utility.common.cache.Cache
import de.felitendo.felostore.utility.common.extension.intent
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlin.coroutines.resume

View File

@@ -1,13 +1,13 @@
package com.looker.droidify.installer.installers.root
package de.felitendo.felostore.installer.installers.root
import android.content.Context
import com.looker.droidify.domain.model.PackageName
import com.looker.droidify.installer.installers.Installer
import com.looker.droidify.installer.installers.uninstallPackage
import com.looker.droidify.installer.model.InstallItem
import com.looker.droidify.installer.model.InstallState
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.utility.common.cache.Cache
import de.felitendo.felostore.domain.model.PackageName
import de.felitendo.felostore.installer.installers.Installer
import de.felitendo.felostore.installer.installers.uninstallPackage
import de.felitendo.felostore.installer.model.InstallItem
import de.felitendo.felostore.installer.model.InstallState
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.utility.common.cache.Cache
import com.topjohnwu.superuser.Shell
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlin.coroutines.resume

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.installer.installers.session
package de.felitendo.felostore.installer.installers.session
import android.annotation.SuppressLint
import android.app.PendingIntent
@@ -9,14 +9,14 @@ import android.os.Build
import android.os.Handler
import android.os.Looper
import android.util.Log
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.utility.common.cache.Cache
import com.looker.droidify.utility.common.log
import com.looker.droidify.utility.common.sdkAbove
import com.looker.droidify.domain.model.PackageName
import com.looker.droidify.installer.installers.Installer
import com.looker.droidify.installer.model.InstallItem
import com.looker.droidify.installer.model.InstallState
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.utility.common.cache.Cache
import de.felitendo.felostore.utility.common.log
import de.felitendo.felostore.utility.common.sdkAbove
import de.felitendo.felostore.domain.model.PackageName
import de.felitendo.felostore.installer.installers.Installer
import de.felitendo.felostore.installer.model.InstallItem
import de.felitendo.felostore.installer.model.InstallState
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlin.coroutines.resume

View File

@@ -1,20 +1,20 @@
package com.looker.droidify.installer.installers.session
package de.felitendo.felostore.installer.installers.session
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
import com.looker.droidify.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
import com.looker.droidify.R
import com.looker.droidify.utility.common.createNotificationChannel
import com.looker.droidify.utility.common.extension.getPackageName
import com.looker.droidify.utility.common.extension.notificationManager
import com.looker.droidify.domain.model.toPackageName
import com.looker.droidify.installer.InstallManager
import com.looker.droidify.installer.model.InstallState
import com.looker.droidify.installer.notification.createInstallNotification
import com.looker.droidify.installer.notification.installNotification
import com.looker.droidify.installer.notification.removeInstallNotification
import de.felitendo.felostore.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
import de.felitendo.felostore.R
import de.felitendo.felostore.utility.common.createNotificationChannel
import de.felitendo.felostore.utility.common.extension.getPackageName
import de.felitendo.felostore.utility.common.extension.notificationManager
import de.felitendo.felostore.domain.model.toPackageName
import de.felitendo.felostore.installer.InstallManager
import de.felitendo.felostore.installer.model.InstallState
import de.felitendo.felostore.installer.notification.createInstallNotification
import de.felitendo.felostore.installer.notification.installNotification
import de.felitendo.felostore.installer.notification.removeInstallNotification
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

View File

@@ -1,14 +1,14 @@
package com.looker.droidify.installer.installers.shizuku
package de.felitendo.felostore.installer.installers.shizuku
import android.content.Context
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.utility.common.cache.Cache
import com.looker.droidify.utility.common.extension.size
import com.looker.droidify.domain.model.PackageName
import com.looker.droidify.installer.installers.Installer
import com.looker.droidify.installer.installers.uninstallPackage
import com.looker.droidify.installer.model.InstallItem
import com.looker.droidify.installer.model.InstallState
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.utility.common.cache.Cache
import de.felitendo.felostore.utility.common.extension.size
import de.felitendo.felostore.domain.model.PackageName
import de.felitendo.felostore.installer.installers.Installer
import de.felitendo.felostore.installer.installers.uninstallPackage
import de.felitendo.felostore.installer.model.InstallItem
import de.felitendo.felostore.installer.model.InstallState
import kotlinx.coroutines.suspendCancellableCoroutine
import java.io.BufferedReader
import java.io.InputStream

View File

@@ -1,7 +1,7 @@
package com.looker.droidify.installer.model
package de.felitendo.felostore.installer.model
import com.looker.droidify.domain.model.PackageName
import com.looker.droidify.domain.model.toPackageName
import de.felitendo.felostore.domain.model.PackageName
import de.felitendo.felostore.domain.model.toPackageName
class InstallItem(
val packageName: PackageName,

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.installer.model
package de.felitendo.felostore.installer.model
enum class InstallState { Failed, Pending, Installing, Installed }

View File

@@ -1,14 +1,14 @@
package com.looker.droidify.installer.notification
package de.felitendo.felostore.installer.notification
import android.app.Notification
import android.app.NotificationManager
import android.content.Context
import android.graphics.Color
import androidx.core.app.NotificationCompat
import com.looker.droidify.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
import com.looker.droidify.utility.common.Constants.NOTIFICATION_ID_INSTALL
import com.looker.droidify.installer.model.InstallState
import com.looker.droidify.R
import de.felitendo.felostore.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
import de.felitendo.felostore.utility.common.Constants.NOTIFICATION_ID_INSTALL
import de.felitendo.felostore.installer.model.InstallState
import de.felitendo.felostore.R
fun NotificationManager.installNotification(
packageName: String,

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.model
package de.felitendo.felostore.model
class InstalledItem(
val packageName: String,

View File

@@ -1,8 +1,8 @@
package com.looker.droidify.model
package de.felitendo.felostore.model
import android.content.Context
import com.looker.droidify.utility.common.extension.getColorFromAttr
import com.looker.droidify.utility.common.extension.videoPlaceHolder
import de.felitendo.felostore.utility.common.extension.getColorFromAttr
import de.felitendo.felostore.utility.common.extension.videoPlaceHolder
import com.google.android.material.R as MaterialR
data class Product(

View File

@@ -1,8 +1,8 @@
package com.looker.droidify.model
package de.felitendo.felostore.model
import android.os.Parcelable
import android.view.View
import com.looker.droidify.utility.common.extension.dpi
import de.felitendo.felostore.utility.common.extension.dpi
import kotlinx.parcelize.Parcelize
data class ProductItem(

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.model
package de.felitendo.felostore.model
data class ProductPreference(val ignoreUpdates: Boolean, val ignoreVersionCode: Long) {
fun shouldIgnoreUpdate(versionCode: Long): Boolean {

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.model
package de.felitendo.felostore.model
import android.net.Uri

View File

@@ -0,0 +1,112 @@
package de.felitendo.felostore.model
import java.net.URL
data class Repository(
var id: Long,
val address: String,
val mirrors: List<String>,
val name: String,
val description: String,
val version: Int,
val enabled: Boolean,
val fingerprint: String,
val lastModified: String,
val entityTag: String,
val updated: Long,
val timestamp: Long,
val authentication: String,
) {
fun edit(address: String, fingerprint: String, authentication: String): Repository {
val isAddressChanged = this.address != address
val isFingerprintChanged = this.fingerprint != fingerprint
val shouldForceUpdate = isAddressChanged || isFingerprintChanged
return copy(
address = address,
fingerprint = fingerprint,
lastModified = if (shouldForceUpdate) "" else lastModified,
entityTag = if (shouldForceUpdate) "" else entityTag,
authentication = authentication
)
}
fun update(
mirrors: List<String>,
name: String,
description: String,
version: Int,
lastModified: String,
entityTag: String,
timestamp: Long,
): Repository {
return copy(
mirrors = mirrors,
name = name,
description = description,
version = if (version >= 0) version else this.version,
lastModified = lastModified,
entityTag = entityTag,
updated = System.currentTimeMillis(),
timestamp = timestamp
)
}
fun enable(enabled: Boolean): Repository {
return copy(enabled = enabled, lastModified = "", entityTag = "")
}
@Suppress("SpellCheckingInspection")
companion object {
fun newRepository(
address: String,
fingerprint: String,
authentication: String,
): Repository {
val name = try {
URL(address).let { "${it.host}${it.path}" }
} catch (e: Exception) {
address
}
return defaultRepository(address, name, "", 0, true, fingerprint, authentication)
}
private fun defaultRepository(
address: String,
name: String,
description: String,
version: Int = 21,
enabled: Boolean = false,
fingerprint: String,
authentication: String = "",
): Repository {
return Repository(
-1, address, emptyList(), name, description, version, enabled,
fingerprint, "", "", 0L, 0L, authentication
)
}
val defaultRepositories = listOf(
defaultRepository(
address = "https://fdroid.felo.gg/repo/",
name = "Felo Store",
description = "A List of Modded Android Apps" +
"with advanced features and or premium features unlocked" +
"completely for free. Apps get updated every 3h",
enabled = true,
fingerprint = "5CBEF8C257808D20B65653CBC896F08F0A93F47659859FCD9A6B75FCADDA617D"
)
)
val newlyAdded: List<Repository> = listOf(
defaultRepository(
address = "https://fdroid.ironfoxoss.org/fdroid/repo",
name = "IronFox",
description = "The official repository for IronFox:" +
" A privacy and security-oriented Firefox-based browser for Android.",
fingerprint = "C5E291B5A571F9C8CD9A9799C2C94E02EC9703948893F2CA756D67B94204F904"
)
)
}
}

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.network
package de.felitendo.felostore.network
import java.util.Locale

View File

@@ -1,7 +1,7 @@
package com.looker.droidify.network
package de.felitendo.felostore.network
import com.looker.droidify.network.header.HeadersBuilder
import com.looker.droidify.network.validation.FileValidator
import de.felitendo.felostore.network.header.HeadersBuilder
import de.felitendo.felostore.network.validation.FileValidator
import java.io.File
import java.net.Proxy

View File

@@ -1,11 +1,11 @@
package com.looker.droidify.network
package de.felitendo.felostore.network
import com.looker.droidify.BuildConfig
import com.looker.droidify.network.header.HeadersBuilder
import com.looker.droidify.network.header.KtorHeadersBuilder
import com.looker.droidify.network.validation.FileValidator
import com.looker.droidify.network.validation.ValidationException
import com.looker.droidify.utility.common.extension.size
import de.felitendo.felostore.BuildConfig
import de.felitendo.felostore.network.header.HeadersBuilder
import de.felitendo.felostore.network.header.KtorHeadersBuilder
import de.felitendo.felostore.network.validation.FileValidator
import de.felitendo.felostore.network.validation.ValidationException
import de.felitendo.felostore.utility.common.extension.size
import io.ktor.client.HttpClient
import io.ktor.client.HttpClientConfig
import io.ktor.client.engine.HttpClientEngine
@@ -134,7 +134,7 @@ internal class KtorDownloader(
private const val CONNECTION_TIMEOUT = 30_000L
private const val SOCKET_TIMEOUT = 15_000L
private const val USER_AGENT = "Droid-ify/${BuildConfig.VERSION_NAME}-${BuildConfig.BUILD_TYPE}"
private const val USER_AGENT = "FeloStore/${BuildConfig.VERSION_NAME}-${BuildConfig.BUILD_TYPE}"
private fun HttpClientConfig<*>.userAgentConfig() = install(UserAgent) {
agent = USER_AGENT

View File

@@ -1,6 +1,6 @@
package com.looker.droidify.network
package de.felitendo.felostore.network
import com.looker.droidify.network.validation.ValidationException
import de.felitendo.felostore.network.validation.ValidationException
import java.util.Date
sealed interface NetworkResponse {

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.network.header
package de.felitendo.felostore.network.header
import java.util.Date

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.network.header
package de.felitendo.felostore.network.header
import io.ktor.http.HttpHeaders
import io.ktor.util.encodeBase64

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.network.validation
package de.felitendo.felostore.network.validation
import java.io.File

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.network.validation
package de.felitendo.felostore.network.validation
class ValidationException(override val message: String) : Exception(message)

View File

@@ -1,12 +1,12 @@
package com.looker.droidify.receivers
package de.felitendo.felostore.receivers
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import com.looker.droidify.utility.common.extension.getPackageInfoCompat
import com.looker.droidify.database.Database
import com.looker.droidify.utility.extension.toInstalledItem
import de.felitendo.felostore.utility.common.extension.getPackageInfoCompat
import de.felitendo.felostore.database.Database
import de.felitendo.felostore.utility.extension.toInstalledItem
class InstalledAppReceiver(private val packageManager: PackageManager) : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.service
package de.felitendo.felostore.service
import android.content.ComponentName
import android.content.Context

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.service
package de.felitendo.felostore.service
import android.app.Service
import android.content.Intent

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.service
package de.felitendo.felostore.service
import android.app.PendingIntent
import android.content.Intent
@@ -6,34 +6,34 @@ import android.graphics.Color
import android.net.Uri
import android.util.Log
import androidx.core.app.NotificationCompat
import com.looker.droidify.BuildConfig
import com.looker.droidify.MainActivity
import com.looker.droidify.datastore.SettingsRepository
import com.looker.droidify.datastore.get
import com.looker.droidify.datastore.model.InstallerType
import com.looker.droidify.installer.InstallManager
import com.looker.droidify.installer.model.InstallState
import com.looker.droidify.installer.model.installFrom
import com.looker.droidify.installer.notification.createInstallNotification
import com.looker.droidify.installer.notification.installNotification
import com.looker.droidify.model.Release
import com.looker.droidify.model.Repository
import com.looker.droidify.network.DataSize
import com.looker.droidify.network.Downloader
import com.looker.droidify.network.NetworkResponse
import com.looker.droidify.network.percentBy
import com.looker.droidify.network.validation.ValidationException
import com.looker.droidify.utility.common.Constants
import com.looker.droidify.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.utility.common.cache.Cache
import com.looker.droidify.utility.common.createNotificationChannel
import com.looker.droidify.utility.common.extension.notificationManager
import com.looker.droidify.utility.common.extension.startServiceCompat
import com.looker.droidify.utility.common.extension.stopForegroundCompat
import com.looker.droidify.utility.common.extension.toPendingIntent
import com.looker.droidify.utility.common.extension.updateAsMutable
import com.looker.droidify.utility.common.log
import de.felitendo.felostore.BuildConfig
import de.felitendo.felostore.MainActivity
import de.felitendo.felostore.datastore.SettingsRepository
import de.felitendo.felostore.datastore.get
import de.felitendo.felostore.datastore.model.InstallerType
import de.felitendo.felostore.installer.InstallManager
import de.felitendo.felostore.installer.model.InstallState
import de.felitendo.felostore.installer.model.installFrom
import de.felitendo.felostore.installer.notification.createInstallNotification
import de.felitendo.felostore.installer.notification.installNotification
import de.felitendo.felostore.model.Release
import de.felitendo.felostore.model.Repository
import de.felitendo.felostore.network.DataSize
import de.felitendo.felostore.network.Downloader
import de.felitendo.felostore.network.NetworkResponse
import de.felitendo.felostore.network.percentBy
import de.felitendo.felostore.network.validation.ValidationException
import de.felitendo.felostore.utility.common.Constants
import de.felitendo.felostore.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.utility.common.cache.Cache
import de.felitendo.felostore.utility.common.createNotificationChannel
import de.felitendo.felostore.utility.common.extension.notificationManager
import de.felitendo.felostore.utility.common.extension.startServiceCompat
import de.felitendo.felostore.utility.common.extension.stopForegroundCompat
import de.felitendo.felostore.utility.common.extension.toPendingIntent
import de.felitendo.felostore.utility.common.extension.updateAsMutable
import de.felitendo.felostore.utility.common.log
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
@@ -50,7 +50,7 @@ import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.yield
import java.io.File
import javax.inject.Inject
import com.looker.droidify.R.string as stringRes
import de.felitendo.felostore.R.string as stringRes
@AndroidEntryPoint
class DownloadService : ConnectionService<DownloadService.Binder>() {

View File

@@ -1,18 +1,18 @@
package com.looker.droidify.service
package de.felitendo.felostore.service
import android.content.Context
import androidx.annotation.StringRes
import com.looker.droidify.utility.common.extension.calculateHash
import com.looker.droidify.utility.common.extension.getPackageArchiveInfoCompat
import com.looker.droidify.utility.common.extension.singleSignature
import com.looker.droidify.utility.common.extension.versionCodeCompat
import com.looker.droidify.network.validation.FileValidator
import com.looker.droidify.utility.common.signature.Hash
import com.looker.droidify.network.validation.invalid
import com.looker.droidify.utility.common.signature.verifyHash
import com.looker.droidify.model.Release
import de.felitendo.felostore.utility.common.extension.calculateHash
import de.felitendo.felostore.utility.common.extension.getPackageArchiveInfoCompat
import de.felitendo.felostore.utility.common.extension.singleSignature
import de.felitendo.felostore.utility.common.extension.versionCodeCompat
import de.felitendo.felostore.network.validation.FileValidator
import de.felitendo.felostore.utility.common.signature.Hash
import de.felitendo.felostore.network.validation.invalid
import de.felitendo.felostore.utility.common.signature.verifyHash
import de.felitendo.felostore.model.Release
import java.io.File
import com.looker.droidify.R.string as strings
import de.felitendo.felostore.R.string as strings
class ReleaseFileValidator(
private val context: Context,

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.service
package de.felitendo.felostore.service
import android.annotation.SuppressLint
import android.app.PendingIntent
@@ -15,25 +15,25 @@ import android.text.style.ForegroundColorSpan
import android.view.ContextThemeWrapper
import androidx.core.app.NotificationCompat
import androidx.fragment.app.Fragment
import com.looker.droidify.utility.common.Constants
import com.looker.droidify.utility.common.SdkCheck
import com.looker.droidify.utility.common.createNotificationChannel
import com.looker.droidify.utility.common.extension.getColorFromAttr
import com.looker.droidify.utility.common.extension.notificationManager
import com.looker.droidify.utility.common.extension.startServiceCompat
import com.looker.droidify.utility.common.extension.stopForegroundCompat
import com.looker.droidify.utility.common.result.Result
import com.looker.droidify.utility.common.sdkAbove
import com.looker.droidify.datastore.SettingsRepository
import com.looker.droidify.BuildConfig
import com.looker.droidify.MainActivity
import com.looker.droidify.database.Database
import com.looker.droidify.index.RepositoryUpdater
import com.looker.droidify.model.ProductItem
import com.looker.droidify.model.Repository
import com.looker.droidify.utility.extension.startUpdate
import com.looker.droidify.network.DataSize
import com.looker.droidify.network.percentBy
import de.felitendo.felostore.utility.common.Constants
import de.felitendo.felostore.utility.common.SdkCheck
import de.felitendo.felostore.utility.common.createNotificationChannel
import de.felitendo.felostore.utility.common.extension.getColorFromAttr
import de.felitendo.felostore.utility.common.extension.notificationManager
import de.felitendo.felostore.utility.common.extension.startServiceCompat
import de.felitendo.felostore.utility.common.extension.stopForegroundCompat
import de.felitendo.felostore.utility.common.result.Result
import de.felitendo.felostore.utility.common.sdkAbove
import de.felitendo.felostore.datastore.SettingsRepository
import de.felitendo.felostore.BuildConfig
import de.felitendo.felostore.MainActivity
import de.felitendo.felostore.database.Database
import de.felitendo.felostore.index.RepositoryUpdater
import de.felitendo.felostore.model.ProductItem
import de.felitendo.felostore.model.Repository
import de.felitendo.felostore.utility.extension.startUpdate
import de.felitendo.felostore.network.DataSize
import de.felitendo.felostore.network.percentBy
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -51,12 +51,12 @@ import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import java.lang.ref.WeakReference
import javax.inject.Inject
import com.looker.droidify.R
import de.felitendo.felostore.R
import kotlinx.coroutines.FlowPreview
import kotlin.math.roundToInt
import android.R as AndroidR
import com.looker.droidify.R.string as stringRes
import com.looker.droidify.R.style as styleRes
import de.felitendo.felostore.R.string as stringRes
import de.felitendo.felostore.R.style as styleRes
import kotlinx.coroutines.Job as CoroutinesJob
@AndroidEntryPoint
@@ -521,7 +521,7 @@ class SyncService : ConnectionService<SyncService.Binder>() {
private suspend fun updateAllAppsInternal(skipSignature: Boolean) {
Database.ProductAdapter
.getUpdates(skipSignature)
// Update Droid-ify the last
// Update FeloStore the last
.sortedBy { if (it.packageName == packageName) 1 else -1 }
.map {
Database.InstalledAdapter.get(it.packageName, null) to

View File

@@ -1,7 +1,7 @@
package com.looker.droidify.sync
package de.felitendo.felostore.sync
import com.looker.droidify.domain.model.Fingerprint
import com.looker.droidify.network.validation.ValidationException
import de.felitendo.felostore.domain.model.Fingerprint
import de.felitendo.felostore.network.validation.ValidationException
import java.util.jar.JarEntry
interface IndexValidator {

View File

@@ -1,7 +1,7 @@
package com.looker.droidify.sync
package de.felitendo.felostore.sync
import com.looker.droidify.domain.model.Fingerprint
import com.looker.droidify.domain.model.Repo
import de.felitendo.felostore.domain.model.Fingerprint
import de.felitendo.felostore.domain.model.Repo
import java.io.File
interface Parser<out T> {

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.sync
package de.felitendo.felostore.sync
import android.app.job.JobInfo
import androidx.work.Constraints

View File

@@ -1,7 +1,7 @@
package com.looker.droidify.sync
package de.felitendo.felostore.sync
import com.looker.droidify.domain.model.Fingerprint
import com.looker.droidify.domain.model.Repo
import de.felitendo.felostore.domain.model.Fingerprint
import de.felitendo.felostore.domain.model.Repo
/**
* Expected Architecture: [https://excalidraw.com/#json=JqpGunWTJONjq-ecDNiPg,j9t0X4coeNvIG7B33GTq6A]
@@ -15,6 +15,6 @@ interface Syncable<T> {
suspend fun sync(
repo: Repo,
): Pair<Fingerprint, com.looker.droidify.sync.v2.model.IndexV2?>
): Pair<Fingerprint, de.felitendo.felostore.sync.v2.model.IndexV2?>
}

View File

@@ -1,30 +1,30 @@
package com.looker.droidify.sync.common
package de.felitendo.felostore.sync.common
import com.looker.droidify.sync.v1.model.AppV1
import com.looker.droidify.sync.v1.model.IndexV1
import com.looker.droidify.sync.v1.model.Localized
import com.looker.droidify.sync.v1.model.PackageV1
import com.looker.droidify.sync.v1.model.RepoV1
import com.looker.droidify.sync.v1.model.maxSdk
import com.looker.droidify.sync.v1.model.name
import com.looker.droidify.sync.v2.model.AntiFeatureV2
import com.looker.droidify.sync.v2.model.CategoryV2
import com.looker.droidify.sync.v2.model.FeatureV2
import com.looker.droidify.sync.v2.model.FileV2
import com.looker.droidify.sync.v2.model.IndexV2
import com.looker.droidify.sync.v2.model.LocalizedFiles
import com.looker.droidify.sync.v2.model.LocalizedIcon
import com.looker.droidify.sync.v2.model.LocalizedString
import com.looker.droidify.sync.v2.model.ManifestV2
import com.looker.droidify.sync.v2.model.MetadataV2
import com.looker.droidify.sync.v2.model.MirrorV2
import com.looker.droidify.sync.v2.model.PackageV2
import com.looker.droidify.sync.v2.model.PermissionV2
import com.looker.droidify.sync.v2.model.RepoV2
import com.looker.droidify.sync.v2.model.ScreenshotsV2
import com.looker.droidify.sync.v2.model.SignerV2
import com.looker.droidify.sync.v2.model.UsesSdkV2
import com.looker.droidify.sync.v2.model.VersionV2
import de.felitendo.felostore.sync.v1.model.AppV1
import de.felitendo.felostore.sync.v1.model.IndexV1
import de.felitendo.felostore.sync.v1.model.Localized
import de.felitendo.felostore.sync.v1.model.PackageV1
import de.felitendo.felostore.sync.v1.model.RepoV1
import de.felitendo.felostore.sync.v1.model.maxSdk
import de.felitendo.felostore.sync.v1.model.name
import de.felitendo.felostore.sync.v2.model.AntiFeatureV2
import de.felitendo.felostore.sync.v2.model.CategoryV2
import de.felitendo.felostore.sync.v2.model.FeatureV2
import de.felitendo.felostore.sync.v2.model.FileV2
import de.felitendo.felostore.sync.v2.model.IndexV2
import de.felitendo.felostore.sync.v2.model.LocalizedFiles
import de.felitendo.felostore.sync.v2.model.LocalizedIcon
import de.felitendo.felostore.sync.v2.model.LocalizedString
import de.felitendo.felostore.sync.v2.model.ManifestV2
import de.felitendo.felostore.sync.v2.model.MetadataV2
import de.felitendo.felostore.sync.v2.model.MirrorV2
import de.felitendo.felostore.sync.v2.model.PackageV2
import de.felitendo.felostore.sync.v2.model.PermissionV2
import de.felitendo.felostore.sync.v2.model.RepoV2
import de.felitendo.felostore.sync.v2.model.ScreenshotsV2
import de.felitendo.felostore.sync.v2.model.SignerV2
import de.felitendo.felostore.sync.v2.model.UsesSdkV2
import de.felitendo.felostore.sync.v2.model.VersionV2
private const val V1_LOCALE = "en-US"

View File

@@ -1,9 +1,9 @@
package com.looker.droidify.sync.common
package de.felitendo.felostore.sync.common
import android.content.Context
import com.looker.droidify.utility.common.cache.Cache
import com.looker.droidify.domain.model.Repo
import com.looker.droidify.network.Downloader
import de.felitendo.felostore.utility.common.cache.Cache
import de.felitendo.felostore.domain.model.Repo
import de.felitendo.felostore.network.Downloader
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File

View File

@@ -1,18 +1,18 @@
package com.looker.droidify.sync.common
package de.felitendo.felostore.sync.common
import com.looker.droidify.domain.model.Fingerprint
import com.looker.droidify.domain.model.check
import com.looker.droidify.domain.model.fingerprint
import com.looker.droidify.network.validation.invalid
import com.looker.droidify.sync.utils.certificate
import com.looker.droidify.sync.utils.codeSigner
import de.felitendo.felostore.domain.model.Fingerprint
import de.felitendo.felostore.domain.model.check
import de.felitendo.felostore.domain.model.fingerprint
import de.felitendo.felostore.network.validation.invalid
import de.felitendo.felostore.sync.utils.certificate
import de.felitendo.felostore.sync.utils.codeSigner
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import java.util.jar.JarEntry
class IndexJarValidator(
private val dispatcher: CoroutineDispatcher
) : com.looker.droidify.sync.IndexValidator {
) : de.felitendo.felostore.sync.IndexValidator {
override suspend fun validate(
jarEntry: JarEntry,
expectedFingerprint: Fingerprint?

View File

@@ -1,4 +1,4 @@
package com.looker.droidify.sync.common
package de.felitendo.felostore.sync.common
import kotlinx.serialization.json.Json

Some files were not shown because too many files have changed in this diff Show More