Compare commits
47 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6cd519d0a6 | |||
| a7fa9fcf80 | |||
|
|
e17ca02b6b | ||
|
|
c410026ad8 | ||
|
|
a05b78c6ef | ||
|
|
f545ffae91 | ||
| bb5c1ec1fe | |||
|
|
987af545be | ||
|
|
297ba87f64 | ||
|
|
97f87eb3c8 | ||
|
|
c9100a927a | ||
|
|
bf52c20cb4 | ||
| 0d6e0bbcae | |||
| 0a60e93e66 | |||
| 480d5a885b | |||
| 67206b176e | |||
| 021af3619e | |||
|
|
d11c751f07 | ||
| f552c0bda1 | |||
| fcccc2126a | |||
| 801fa055f4 | |||
| bb00031a7b | |||
| fd97e6e514 | |||
| 08e351eecc | |||
| a730aa478d | |||
| 49def9086b | |||
| 70781e741c | |||
| 7fd7f0af8e | |||
| a7a8f9bce0 | |||
| 8076fbce74 | |||
| 9996ec3f1e | |||
| ab5a200ac8 | |||
| a7f730c0ff | |||
| 0928e06069 | |||
| 14bd5b3ea8 | |||
| a7a3e13b71 | |||
| a84b1190b4 | |||
| 4ab967faf0 | |||
| 39da43e271 | |||
| 8ff5bfc991 | |||
|
|
429081b94d | ||
| 5b1a938ac1 | |||
| f45acb7284 | |||
| 691c59950a | |||
|
|
c8ff87823a | ||
|
|
40391ded24 | ||
|
|
3412ab24b8 |
59
.github/workflows/build_debug.yml
vendored
59
.github/workflows/build_debug.yml
vendored
@@ -1,5 +1,4 @@
|
|||||||
name: Build Debug APK
|
name: Build Debug APK
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
@@ -13,19 +12,15 @@ on:
|
|||||||
- '**.md'
|
- '**.md'
|
||||||
types: submitted
|
types: submitted
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}
|
group: ${{ github.workflow }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
packages: write
|
packages: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository
|
- name: Check out repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -33,10 +28,7 @@ jobs:
|
|||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
- name: Validate Gradle Wrapper
|
- name: Validate Gradle Wrapper
|
||||||
uses: gradle/actions/setup-gradle@v4
|
uses: gradle/wrapper-validation-action@v1
|
||||||
|
|
||||||
- name: Setup Gradle
|
|
||||||
uses: gradle/wrapper-validation-action@v3
|
|
||||||
|
|
||||||
- name: Set up Java 17
|
- name: Set up Java 17
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v4
|
||||||
@@ -45,30 +37,51 @@ jobs:
|
|||||||
distribution: 'adopt'
|
distribution: 'adopt'
|
||||||
cache: gradle
|
cache: gradle
|
||||||
|
|
||||||
|
- name: Setup Android SDK
|
||||||
|
uses: android-actions/setup-android@v2
|
||||||
|
|
||||||
- name: Grant execution permission to Gradle Wrapper
|
- name: Grant execution permission to Gradle Wrapper
|
||||||
run: chmod +x gradlew
|
run: chmod +x gradlew
|
||||||
|
|
||||||
- name: Build Debug APK
|
- name: Build Debug APK
|
||||||
run: ./gradlew assembleDebug
|
run: ./gradlew assembleDebug
|
||||||
|
|
||||||
- name: Sign Apk
|
- name: Display APK directory contents
|
||||||
continue-on-error: true
|
run: |
|
||||||
id: sign_apk
|
echo "Listing app/build/outputs/apk/debug contents:"
|
||||||
uses: r0adkll/sign-android-release@v1
|
ls -la app/build/outputs/apk/debug/
|
||||||
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
|
# Using a manual signing approach instead of the failing action
|
||||||
|
- name: Sign APK manually
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
run: |
|
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
|
- name: Upload the APK
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: debug
|
name: debug
|
||||||
path: app/build/outputs/apk/debug/app-debug*.apk
|
path: app/build/outputs/apk/debug/*.apk
|
||||||
94
.github/workflows/release_build.yml
vendored
94
.github/workflows/release_build.yml
vendored
@@ -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}}
|
|
||||||
28
README.md
28
README.md
@@ -1,14 +1,6 @@
|
|||||||
<div align="center">
|
## Download
|
||||||
|
|
||||||
<img width="" src="metadata/en-US/images/featureGraphic.png" alt="Droid-ify" align="center">
|
- Click [here](https://git.felo.gg/FeloStore/FeloStore/releases/download/v0.0.3/felostore.apk) to download the latest version
|
||||||
|
|
||||||
[](https://github.com/Iamlooker/Droid-ify/stargazers)
|
|
||||||
[](https://github.com/Iamlooker/Droid-ify/blob/master/COPYING)
|
|
||||||
[](https://github.com/Iamlooker/Droid-ify/releases/)
|
|
||||||
[](https://github.com/Iamlooker/Droid-ify/releases/latest)
|
|
||||||
[](https://f-droid.org/packages/com.looker.droidify)
|
|
||||||
</div>
|
|
||||||
<div align="left">
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
@@ -17,10 +9,6 @@
|
|||||||
* Smooth user experience
|
* Smooth user experience
|
||||||
* Feature-rich
|
* 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
|
## Building and Installing
|
||||||
|
|
||||||
1. **Install Android Studio**:
|
1. **Install Android Studio**:
|
||||||
@@ -36,12 +24,6 @@
|
|||||||
- Select "Create New Keystore" and enter the required information, including a password.
|
- Select "Create New Keystore" and enter the required information, including a password.
|
||||||
- Wait for the build process to finish.
|
- Wait for the build process to finish.
|
||||||
|
|
||||||
## TODO
|
|
||||||
|
|
||||||
- [ ] Add support for `index-v2`
|
|
||||||
- [ ] Add detekt code-analysis
|
|
||||||
- [ ] Add GitHub Repo feature
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
|
|
||||||
- Pick any issue you would like to resolve
|
- Pick any issue you would like to resolve
|
||||||
@@ -49,14 +31,10 @@
|
|||||||
- Open a Pull Request
|
- Open a Pull Request
|
||||||
- Your PR will undergo review
|
- Your PR will undergo review
|
||||||
|
|
||||||
## Translations
|
|
||||||
|
|
||||||
[](https://hosted.weblate.org/engage/droidify/?utm_source=widget)
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
```
|
```
|
||||||
Droid-ify
|
FeloStore
|
||||||
|
|
||||||
Copyright (C) 2023 LooKeR
|
Copyright (C) 2023 LooKeR
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ It is only natural that users will grow impatient for an update, thats why I wil
|
|||||||
|
|
||||||
## What now?
|
## What now?
|
||||||
- Next release will be on **19-Aug**, and will contain many bug fixes and stability improvements.
|
- 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.
|
- We will be missing on the new index format introduced by fdroid for some future releases.
|
||||||
|
|||||||
9
UPDATING.md
Normal file
9
UPDATING.md
Normal 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
|
||||||
@@ -12,14 +12,14 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
val latestVersionName = "0.6.5"
|
val latestVersionName = "0.0.3"
|
||||||
namespace = "com.looker.droidify"
|
namespace = "de.felitendo.felostore"
|
||||||
buildToolsVersion = "35.0.0"
|
buildToolsVersion = "35.0.0"
|
||||||
compileSdk = 35
|
compileSdk = 35
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdk = 23
|
minSdk = 23
|
||||||
targetSdk = 35
|
targetSdk = 35
|
||||||
applicationId = "com.looker.droidify"
|
applicationId = "de.felitendo.felostore"
|
||||||
versionCode = 650
|
versionCode = 650
|
||||||
versionName = latestVersionName
|
versionName = latestVersionName
|
||||||
vectorDrawables.useSupportLibrary = false
|
vectorDrawables.useSupportLibrary = false
|
||||||
@@ -56,12 +56,12 @@ android {
|
|||||||
buildTypes {
|
buildTypes {
|
||||||
debug {
|
debug {
|
||||||
applicationIdSuffix = ".debug"
|
applicationIdSuffix = ".debug"
|
||||||
resValue("string", "application_name", "Droid-ify-Debug")
|
resValue("string", "application_name", "Felo Store")
|
||||||
}
|
}
|
||||||
release {
|
release {
|
||||||
isMinifyEnabled = true
|
isMinifyEnabled = true
|
||||||
isShrinkResources = true
|
isShrinkResources = true
|
||||||
resValue("string", "application_name", "Droid-ify")
|
resValue("string", "application_name", "Felo Store")
|
||||||
proguardFiles(
|
proguardFiles(
|
||||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
"proguard.pro"
|
"proguard.pro"
|
||||||
@@ -70,7 +70,7 @@ android {
|
|||||||
create("alpha") {
|
create("alpha") {
|
||||||
initWith(getByName("debug"))
|
initWith(getByName("debug"))
|
||||||
applicationIdSuffix = ".alpha"
|
applicationIdSuffix = ".alpha"
|
||||||
resValue("string", "application_name", "Droid-ify Alpha")
|
resValue("string", "application_name", "Felo Store")
|
||||||
proguardFiles(
|
proguardFiles(
|
||||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
"proguard.pro"
|
"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
@@ -1,10 +1,10 @@
|
|||||||
package com.looker.droidify.index
|
package de.felitendo.felostore.index
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import androidx.test.platform.app.InstrumentationRegistry
|
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.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.looker.droidify.sync
|
package de.felitendo.felostore.sync
|
||||||
|
|
||||||
import com.looker.droidify.network.Downloader
|
import de.felitendo.felostore.network.Downloader
|
||||||
import com.looker.droidify.network.NetworkResponse
|
import de.felitendo.felostore.network.NetworkResponse
|
||||||
import com.looker.droidify.network.ProgressListener
|
import de.felitendo.felostore.network.ProgressListener
|
||||||
import com.looker.droidify.network.header.HeadersBuilder
|
import de.felitendo.felostore.network.header.HeadersBuilder
|
||||||
import com.looker.droidify.network.validation.FileValidator
|
import de.felitendo.felostore.network.validation.FileValidator
|
||||||
import com.looker.droidify.sync.common.assets
|
import de.felitendo.felostore.sync.common.assets
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.ensureActive
|
import kotlinx.coroutines.ensureActive
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
@@ -1,19 +1,19 @@
|
|||||||
package com.looker.droidify.sync
|
package de.felitendo.felostore.sync
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import androidx.test.platform.app.InstrumentationRegistry
|
import androidx.test.platform.app.InstrumentationRegistry
|
||||||
import com.looker.droidify.domain.model.Repo
|
import de.felitendo.felostore.domain.model.Repo
|
||||||
import com.looker.droidify.sync.common.IndexJarValidator
|
import de.felitendo.felostore.sync.common.IndexJarValidator
|
||||||
import com.looker.droidify.sync.common.Izzy
|
import de.felitendo.felostore.sync.common.Izzy
|
||||||
import com.looker.droidify.sync.common.JsonParser
|
import de.felitendo.felostore.sync.common.JsonParser
|
||||||
import com.looker.droidify.sync.common.assets
|
import de.felitendo.felostore.sync.common.assets
|
||||||
import com.looker.droidify.sync.common.downloadIndex
|
import de.felitendo.felostore.sync.common.downloadIndex
|
||||||
import com.looker.droidify.sync.common.benchmark
|
import de.felitendo.felostore.sync.common.benchmark
|
||||||
import com.looker.droidify.sync.v2.EntryParser
|
import de.felitendo.felostore.sync.v2.EntryParser
|
||||||
import com.looker.droidify.sync.v2.EntrySyncable
|
import de.felitendo.felostore.sync.v2.EntrySyncable
|
||||||
import com.looker.droidify.sync.v2.model.Entry
|
import de.felitendo.felostore.sync.v2.model.Entry
|
||||||
import com.looker.droidify.sync.v2.model.IndexV2
|
import de.felitendo.felostore.sync.v2.model.IndexV2
|
||||||
import kotlinx.coroutines.CoroutineDispatcher
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
import kotlinx.coroutines.test.StandardTestDispatcher
|
import kotlinx.coroutines.test.StandardTestDispatcher
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
@@ -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
|
import java.util.jar.JarEntry
|
||||||
|
|
||||||
val FakeIndexValidator = object : IndexValidator {
|
val FakeIndexValidator = object : IndexValidator {
|
||||||
@@ -1,23 +1,23 @@
|
|||||||
package com.looker.droidify.sync
|
package de.felitendo.felostore.sync
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import androidx.test.platform.app.InstrumentationRegistry
|
import androidx.test.platform.app.InstrumentationRegistry
|
||||||
import com.looker.droidify.domain.model.Repo
|
import de.felitendo.felostore.domain.model.Repo
|
||||||
import com.looker.droidify.sync.common.IndexJarValidator
|
import de.felitendo.felostore.sync.common.IndexJarValidator
|
||||||
import com.looker.droidify.sync.common.Izzy
|
import de.felitendo.felostore.sync.common.Izzy
|
||||||
import com.looker.droidify.sync.common.JsonParser
|
import de.felitendo.felostore.sync.common.JsonParser
|
||||||
import com.looker.droidify.sync.common.downloadIndex
|
import de.felitendo.felostore.sync.common.downloadIndex
|
||||||
import com.looker.droidify.sync.common.benchmark
|
import de.felitendo.felostore.sync.common.benchmark
|
||||||
import com.looker.droidify.sync.common.toV2
|
import de.felitendo.felostore.sync.common.toV2
|
||||||
import com.looker.droidify.sync.v1.V1Parser
|
import de.felitendo.felostore.sync.v1.V1Parser
|
||||||
import com.looker.droidify.sync.v1.V1Syncable
|
import de.felitendo.felostore.sync.v1.V1Syncable
|
||||||
import com.looker.droidify.sync.v1.model.IndexV1
|
import de.felitendo.felostore.sync.v1.model.IndexV1
|
||||||
import com.looker.droidify.sync.v2.V2Parser
|
import de.felitendo.felostore.sync.v2.V2Parser
|
||||||
import com.looker.droidify.sync.v2.model.FileV2
|
import de.felitendo.felostore.sync.v2.model.FileV2
|
||||||
import com.looker.droidify.sync.v2.model.IndexV2
|
import de.felitendo.felostore.sync.v2.model.IndexV2
|
||||||
import com.looker.droidify.sync.v2.model.MetadataV2
|
import de.felitendo.felostore.sync.v2.model.MetadataV2
|
||||||
import com.looker.droidify.sync.v2.model.VersionV2
|
import de.felitendo.felostore.sync.v2.model.VersionV2
|
||||||
import kotlinx.coroutines.CoroutineDispatcher
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
import kotlinx.coroutines.test.StandardTestDispatcher
|
import kotlinx.coroutines.test.StandardTestDispatcher
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.sync.common
|
package de.felitendo.felostore.sync.common
|
||||||
|
|
||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
import kotlin.math.sqrt
|
import kotlin.math.sqrt
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.looker.droidify.sync.common
|
package de.felitendo.felostore.sync.common
|
||||||
|
|
||||||
import com.looker.droidify.domain.model.Authentication
|
import de.felitendo.felostore.domain.model.Authentication
|
||||||
import com.looker.droidify.domain.model.Fingerprint
|
import de.felitendo.felostore.domain.model.Fingerprint
|
||||||
import com.looker.droidify.domain.model.Repo
|
import de.felitendo.felostore.domain.model.Repo
|
||||||
import com.looker.droidify.domain.model.VersionInfo
|
import de.felitendo.felostore.domain.model.VersionInfo
|
||||||
|
|
||||||
val Izzy = Repo(
|
val Izzy = Repo(
|
||||||
id = 1L,
|
id = 1L,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.sync.common
|
package de.felitendo.felostore.sync.common
|
||||||
|
|
||||||
import androidx.test.platform.app.InstrumentationRegistry
|
import androidx.test.platform.app.InstrumentationRegistry
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
android:required="false" />
|
android:required="false" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".Droidify"
|
android:name=".FeloStore"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:banner="@drawable/tv_banner"
|
android:banner="@drawable/tv_banner"
|
||||||
android:enableOnBackInvokedCallback="true"
|
android:enableOnBackInvokedCallback="true"
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
tools:ignore="UnusedAttribute">
|
tools:ignore="UnusedAttribute">
|
||||||
|
|
||||||
<receiver
|
<receiver
|
||||||
android:name=".Droidify$BootReceiver"
|
android:name=".FeloStore$BootReceiver"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
<category android:name="android.intent.category.BROWSABLE" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
|
||||||
<data android:scheme="https" />
|
<data android:scheme="https" />
|
||||||
<data android:host="droidify.eu.org" />
|
<data android:host="felostore.eu.org" />
|
||||||
<data android:pathPattern="/app/.*" />
|
<data android:pathPattern="/app/.*" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
)
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify
|
package de.felitendo.felostore
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
@@ -21,30 +21,30 @@ import coil3.disk.DiskCache
|
|||||||
import coil3.disk.directory
|
import coil3.disk.directory
|
||||||
import coil3.memory.MemoryCache
|
import coil3.memory.MemoryCache
|
||||||
import coil3.request.crossfade
|
import coil3.request.crossfade
|
||||||
import com.looker.droidify.content.ProductPreferences
|
import de.felitendo.felostore.content.ProductPreferences
|
||||||
import com.looker.droidify.database.Database
|
import de.felitendo.felostore.database.Database
|
||||||
import com.looker.droidify.datastore.SettingsRepository
|
import de.felitendo.felostore.datastore.SettingsRepository
|
||||||
import com.looker.droidify.datastore.get
|
import de.felitendo.felostore.datastore.get
|
||||||
import com.looker.droidify.datastore.model.AutoSync
|
import de.felitendo.felostore.datastore.model.AutoSync
|
||||||
import com.looker.droidify.datastore.model.ProxyPreference
|
import de.felitendo.felostore.datastore.model.ProxyPreference
|
||||||
import com.looker.droidify.datastore.model.ProxyType
|
import de.felitendo.felostore.datastore.model.ProxyType
|
||||||
import com.looker.droidify.index.RepositoryUpdater
|
import de.felitendo.felostore.index.RepositoryUpdater
|
||||||
import com.looker.droidify.installer.InstallManager
|
import de.felitendo.felostore.installer.InstallManager
|
||||||
import com.looker.droidify.network.Downloader
|
import de.felitendo.felostore.network.Downloader
|
||||||
import com.looker.droidify.receivers.InstalledAppReceiver
|
import de.felitendo.felostore.receivers.InstalledAppReceiver
|
||||||
import com.looker.droidify.service.Connection
|
import de.felitendo.felostore.service.Connection
|
||||||
import com.looker.droidify.service.SyncService
|
import de.felitendo.felostore.service.SyncService
|
||||||
import com.looker.droidify.sync.SyncPreference
|
import de.felitendo.felostore.sync.SyncPreference
|
||||||
import com.looker.droidify.sync.toJobNetworkType
|
import de.felitendo.felostore.sync.toJobNetworkType
|
||||||
import com.looker.droidify.utility.common.Constants
|
import de.felitendo.felostore.utility.common.Constants
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.utility.common.cache.Cache
|
import de.felitendo.felostore.utility.common.cache.Cache
|
||||||
import com.looker.droidify.utility.common.extension.getDrawableCompat
|
import de.felitendo.felostore.utility.common.extension.getDrawableCompat
|
||||||
import com.looker.droidify.utility.common.extension.getInstalledPackagesCompat
|
import de.felitendo.felostore.utility.common.extension.getInstalledPackagesCompat
|
||||||
import com.looker.droidify.utility.common.extension.jobScheduler
|
import de.felitendo.felostore.utility.common.extension.jobScheduler
|
||||||
import com.looker.droidify.utility.common.log
|
import de.felitendo.felostore.utility.common.log
|
||||||
import com.looker.droidify.utility.extension.toInstalledItem
|
import de.felitendo.felostore.utility.extension.toInstalledItem
|
||||||
import com.looker.droidify.work.CleanUpWorker
|
import de.felitendo.felostore.work.CleanUpWorker
|
||||||
import dagger.hilt.android.HiltAndroidApp
|
import dagger.hilt.android.HiltAndroidApp
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -60,7 +60,7 @@ import kotlin.time.Duration.Companion.INFINITE
|
|||||||
import kotlin.time.Duration.Companion.hours
|
import kotlin.time.Duration.Companion.hours
|
||||||
|
|
||||||
@HiltAndroidApp
|
@HiltAndroidApp
|
||||||
class Droidify : Application(), SingletonImageLoader.Factory, Configuration.Provider {
|
class FeloStore : Application(), SingletonImageLoader.Factory, Configuration.Provider {
|
||||||
|
|
||||||
private val parentJob = SupervisorJob()
|
private val parentJob = SupervisorJob()
|
||||||
private val appScope = CoroutineScope(Dispatchers.Default + parentJob)
|
private val appScope = CoroutineScope(Dispatchers.Default + parentJob)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify
|
package de.felitendo.felostore
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
@@ -14,26 +14,26 @@ import androidx.core.view.WindowCompat
|
|||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.commit
|
import androidx.fragment.app.commit
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.looker.droidify.utility.common.DeeplinkType
|
import de.felitendo.felostore.utility.common.DeeplinkType
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.utility.common.deeplinkType
|
import de.felitendo.felostore.utility.common.deeplinkType
|
||||||
import com.looker.droidify.utility.common.extension.homeAsUp
|
import de.felitendo.felostore.utility.common.extension.homeAsUp
|
||||||
import com.looker.droidify.utility.common.extension.inputManager
|
import de.felitendo.felostore.utility.common.extension.inputManager
|
||||||
import com.looker.droidify.utility.common.getInstallPackageName
|
import de.felitendo.felostore.utility.common.getInstallPackageName
|
||||||
import com.looker.droidify.utility.common.requestNotificationPermission
|
import de.felitendo.felostore.utility.common.requestNotificationPermission
|
||||||
import com.looker.droidify.database.CursorOwner
|
import de.felitendo.felostore.database.CursorOwner
|
||||||
import com.looker.droidify.datastore.SettingsRepository
|
import de.felitendo.felostore.datastore.SettingsRepository
|
||||||
import com.looker.droidify.datastore.extension.getThemeRes
|
import de.felitendo.felostore.datastore.extension.getThemeRes
|
||||||
import com.looker.droidify.datastore.get
|
import de.felitendo.felostore.datastore.get
|
||||||
import com.looker.droidify.installer.InstallManager
|
import de.felitendo.felostore.installer.InstallManager
|
||||||
import com.looker.droidify.installer.model.installFrom
|
import de.felitendo.felostore.installer.model.installFrom
|
||||||
import com.looker.droidify.ui.appDetail.AppDetailFragment
|
import de.felitendo.felostore.ui.appDetail.AppDetailFragment
|
||||||
import com.looker.droidify.ui.favourites.FavouritesFragment
|
import de.felitendo.felostore.ui.favourites.FavouritesFragment
|
||||||
import com.looker.droidify.ui.repository.EditRepositoryFragment
|
import de.felitendo.felostore.ui.repository.EditRepositoryFragment
|
||||||
import com.looker.droidify.ui.repository.RepositoriesFragment
|
import de.felitendo.felostore.ui.repository.RepositoriesFragment
|
||||||
import com.looker.droidify.ui.repository.RepositoryFragment
|
import de.felitendo.felostore.ui.repository.RepositoryFragment
|
||||||
import com.looker.droidify.ui.settings.SettingsFragment
|
import de.felitendo.felostore.ui.settings.SettingsFragment
|
||||||
import com.looker.droidify.ui.tabsFragment.TabsFragment
|
import de.felitendo.felostore.ui.tabsFragment.TabsFragment
|
||||||
import dagger.hilt.EntryPoint
|
import dagger.hilt.EntryPoint
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
package com.looker.droidify.content
|
package de.felitendo.felostore.content
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import com.looker.droidify.utility.common.extension.Json
|
import de.felitendo.felostore.utility.common.extension.Json
|
||||||
import com.looker.droidify.utility.common.extension.parseDictionary
|
import de.felitendo.felostore.utility.common.extension.parseDictionary
|
||||||
import com.looker.droidify.utility.common.extension.writeDictionary
|
import de.felitendo.felostore.utility.common.extension.writeDictionary
|
||||||
import com.looker.droidify.model.ProductPreference
|
import de.felitendo.felostore.model.ProductPreference
|
||||||
import com.looker.droidify.database.Database
|
import de.felitendo.felostore.database.Database
|
||||||
import com.looker.droidify.utility.serialization.productPreference
|
import de.felitendo.felostore.utility.serialization.productPreference
|
||||||
import com.looker.droidify.utility.serialization.serialize
|
import de.felitendo.felostore.utility.serialization.serialize
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.nio.charset.Charset
|
import java.nio.charset.Charset
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.looker.droidify.database
|
package de.felitendo.felostore.database
|
||||||
|
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.loader.app.LoaderManager
|
import androidx.loader.app.LoaderManager
|
||||||
import androidx.loader.content.Loader
|
import androidx.loader.content.Loader
|
||||||
import com.looker.droidify.datastore.model.SortOrder
|
import de.felitendo.felostore.datastore.model.SortOrder
|
||||||
import com.looker.droidify.model.ProductItem
|
import de.felitendo.felostore.model.ProductItem
|
||||||
|
|
||||||
class CursorOwner : Fragment(), LoaderManager.LoaderCallbacks<Cursor> {
|
class CursorOwner : Fragment(), LoaderManager.LoaderCallbacks<Cursor> {
|
||||||
sealed class Request {
|
sealed class Request {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.database
|
package de.felitendo.felostore.database
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -9,22 +9,22 @@ import android.os.CancellationSignal
|
|||||||
import androidx.core.database.sqlite.transaction
|
import androidx.core.database.sqlite.transaction
|
||||||
import com.fasterxml.jackson.core.JsonGenerator
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import com.looker.droidify.BuildConfig
|
import de.felitendo.felostore.BuildConfig
|
||||||
import com.looker.droidify.datastore.model.SortOrder
|
import de.felitendo.felostore.datastore.model.SortOrder
|
||||||
import com.looker.droidify.model.InstalledItem
|
import de.felitendo.felostore.model.InstalledItem
|
||||||
import com.looker.droidify.model.Product
|
import de.felitendo.felostore.model.Product
|
||||||
import com.looker.droidify.model.ProductItem
|
import de.felitendo.felostore.model.ProductItem
|
||||||
import com.looker.droidify.model.Repository
|
import de.felitendo.felostore.model.Repository
|
||||||
import com.looker.droidify.utility.common.extension.Json
|
import de.felitendo.felostore.utility.common.extension.Json
|
||||||
import com.looker.droidify.utility.common.extension.asSequence
|
import de.felitendo.felostore.utility.common.extension.asSequence
|
||||||
import com.looker.droidify.utility.common.extension.firstOrNull
|
import de.felitendo.felostore.utility.common.extension.firstOrNull
|
||||||
import com.looker.droidify.utility.common.extension.parseDictionary
|
import de.felitendo.felostore.utility.common.extension.parseDictionary
|
||||||
import com.looker.droidify.utility.common.extension.writeDictionary
|
import de.felitendo.felostore.utility.common.extension.writeDictionary
|
||||||
import com.looker.droidify.utility.common.log
|
import de.felitendo.felostore.utility.common.log
|
||||||
import com.looker.droidify.utility.serialization.product
|
import de.felitendo.felostore.utility.serialization.product
|
||||||
import com.looker.droidify.utility.serialization.productItem
|
import de.felitendo.felostore.utility.serialization.productItem
|
||||||
import com.looker.droidify.utility.serialization.repository
|
import de.felitendo.felostore.utility.serialization.repository
|
||||||
import com.looker.droidify.utility.serialization.serialize
|
import de.felitendo.felostore.utility.serialization.serialize
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.channels.awaitClose
|
import kotlinx.coroutines.channels.awaitClose
|
||||||
import kotlinx.coroutines.delay
|
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
|
var created = false
|
||||||
private set
|
private set
|
||||||
var updated = false
|
var updated = false
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.database
|
package de.felitendo.felostore.database
|
||||||
|
|
||||||
import android.database.ContentObservable
|
import android.database.ContentObservable
|
||||||
import android.database.ContentObserver
|
import android.database.ContentObserver
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.looker.droidify.database
|
package de.felitendo.felostore.database
|
||||||
|
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
import android.os.CancellationSignal
|
import android.os.CancellationSignal
|
||||||
import com.looker.droidify.BuildConfig
|
import de.felitendo.felostore.BuildConfig
|
||||||
import com.looker.droidify.utility.common.extension.asSequence
|
import de.felitendo.felostore.utility.common.extension.asSequence
|
||||||
import com.looker.droidify.utility.common.log
|
import de.felitendo.felostore.utility.common.log
|
||||||
|
|
||||||
class QueryBuilder {
|
class QueryBuilder {
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.database
|
package de.felitendo.felostore.database
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
package com.looker.droidify.database
|
package de.felitendo.felostore.database
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.fasterxml.jackson.core.JsonToken
|
import com.fasterxml.jackson.core.JsonToken
|
||||||
import com.looker.droidify.utility.common.Exporter
|
import de.felitendo.felostore.utility.common.Exporter
|
||||||
import com.looker.droidify.utility.common.extension.Json
|
import de.felitendo.felostore.utility.common.extension.Json
|
||||||
import com.looker.droidify.utility.common.extension.forEach
|
import de.felitendo.felostore.utility.common.extension.forEach
|
||||||
import com.looker.droidify.utility.common.extension.forEachKey
|
import de.felitendo.felostore.utility.common.extension.forEachKey
|
||||||
import com.looker.droidify.utility.common.extension.parseDictionary
|
import de.felitendo.felostore.utility.common.extension.parseDictionary
|
||||||
import com.looker.droidify.utility.common.extension.writeArray
|
import de.felitendo.felostore.utility.common.extension.writeArray
|
||||||
import com.looker.droidify.utility.common.extension.writeDictionary
|
import de.felitendo.felostore.utility.common.extension.writeDictionary
|
||||||
import com.looker.droidify.di.ApplicationScope
|
import de.felitendo.felostore.di.ApplicationScope
|
||||||
import com.looker.droidify.di.IoDispatcher
|
import de.felitendo.felostore.di.IoDispatcher
|
||||||
import com.looker.droidify.model.Repository
|
import de.felitendo.felostore.model.Repository
|
||||||
import com.looker.droidify.utility.serialization.repository
|
import de.felitendo.felostore.utility.serialization.repository
|
||||||
import com.looker.droidify.utility.serialization.serialize
|
import de.felitendo.felostore.utility.serialization.serialize
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.datastore
|
package de.felitendo.felostore.datastore
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.util.Log
|
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.longPreferencesKey
|
||||||
import androidx.datastore.preferences.core.stringPreferencesKey
|
import androidx.datastore.preferences.core.stringPreferencesKey
|
||||||
import androidx.datastore.preferences.core.stringSetPreferencesKey
|
import androidx.datastore.preferences.core.stringSetPreferencesKey
|
||||||
import com.looker.droidify.datastore.model.AutoSync
|
import de.felitendo.felostore.datastore.model.AutoSync
|
||||||
import com.looker.droidify.datastore.model.InstallerType
|
import de.felitendo.felostore.datastore.model.InstallerType
|
||||||
import com.looker.droidify.datastore.model.ProxyPreference
|
import de.felitendo.felostore.datastore.model.ProxyPreference
|
||||||
import com.looker.droidify.datastore.model.ProxyType
|
import de.felitendo.felostore.datastore.model.ProxyType
|
||||||
import com.looker.droidify.datastore.model.SortOrder
|
import de.felitendo.felostore.datastore.model.SortOrder
|
||||||
import com.looker.droidify.datastore.model.Theme
|
import de.felitendo.felostore.datastore.model.Theme
|
||||||
import com.looker.droidify.utility.common.Exporter
|
import de.felitendo.felostore.utility.common.Exporter
|
||||||
import com.looker.droidify.utility.common.extension.updateAsMutable
|
import de.felitendo.felostore.utility.common.extension.updateAsMutable
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.looker.droidify.datastore
|
package de.felitendo.felostore.datastore
|
||||||
|
|
||||||
import androidx.datastore.core.Serializer
|
import androidx.datastore.core.Serializer
|
||||||
import com.looker.droidify.datastore.model.AutoSync
|
import de.felitendo.felostore.datastore.model.AutoSync
|
||||||
import com.looker.droidify.datastore.model.InstallerType
|
import de.felitendo.felostore.datastore.model.InstallerType
|
||||||
import com.looker.droidify.datastore.model.ProxyPreference
|
import de.felitendo.felostore.datastore.model.ProxyPreference
|
||||||
import com.looker.droidify.datastore.model.SortOrder
|
import de.felitendo.felostore.datastore.model.SortOrder
|
||||||
import com.looker.droidify.datastore.model.Theme
|
import de.felitendo.felostore.datastore.model.Theme
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
import java.io.OutputStream
|
import java.io.OutputStream
|
||||||
@@ -25,11 +25,11 @@ data class Settings(
|
|||||||
val incompatibleVersions: Boolean = false,
|
val incompatibleVersions: Boolean = false,
|
||||||
val notifyUpdate: Boolean = true,
|
val notifyUpdate: Boolean = true,
|
||||||
val unstableUpdate: Boolean = false,
|
val unstableUpdate: Boolean = false,
|
||||||
val ignoreSignature: Boolean = false,
|
val ignoreSignature: Boolean = true,
|
||||||
val theme: Theme = Theme.SYSTEM,
|
val theme: Theme = Theme.SYSTEM,
|
||||||
val dynamicTheme: Boolean = false,
|
val dynamicTheme: Boolean = true,
|
||||||
val installerType: InstallerType = InstallerType.Default,
|
val installerType: InstallerType = InstallerType.Default,
|
||||||
val autoUpdate: Boolean = false,
|
val autoUpdate: Boolean = true,
|
||||||
val autoSync: AutoSync = AutoSync.WIFI_ONLY,
|
val autoSync: AutoSync = AutoSync.WIFI_ONLY,
|
||||||
val sortOrder: SortOrder = SortOrder.UPDATED,
|
val sortOrder: SortOrder = SortOrder.UPDATED,
|
||||||
val proxy: ProxyPreference = ProxyPreference(),
|
val proxy: ProxyPreference = ProxyPreference(),
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.looker.droidify.datastore
|
package de.felitendo.felostore.datastore
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.looker.droidify.datastore.model.AutoSync
|
import de.felitendo.felostore.datastore.model.AutoSync
|
||||||
import com.looker.droidify.datastore.model.InstallerType
|
import de.felitendo.felostore.datastore.model.InstallerType
|
||||||
import com.looker.droidify.datastore.model.ProxyType
|
import de.felitendo.felostore.datastore.model.ProxyType
|
||||||
import com.looker.droidify.datastore.model.SortOrder
|
import de.felitendo.felostore.datastore.model.SortOrder
|
||||||
import com.looker.droidify.datastore.model.Theme
|
import de.felitendo.felostore.datastore.model.Theme
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.looker.droidify.datastore.exporter
|
package de.felitendo.felostore.datastore.exporter
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.looker.droidify.utility.common.Exporter
|
import de.felitendo.felostore.utility.common.Exporter
|
||||||
import com.looker.droidify.datastore.Settings
|
import de.felitendo.felostore.datastore.Settings
|
||||||
import kotlinx.coroutines.CoroutineDispatcher
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.cancel
|
import kotlinx.coroutines.cancel
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
package com.looker.droidify.datastore.extension
|
package de.felitendo.felostore.datastore.extension
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import com.looker.droidify.R
|
import de.felitendo.felostore.R
|
||||||
import com.looker.droidify.R.string as stringRes
|
import de.felitendo.felostore.R.string as stringRes
|
||||||
import com.looker.droidify.R.style as styleRes
|
import de.felitendo.felostore.R.style as styleRes
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.datastore.model.AutoSync
|
import de.felitendo.felostore.datastore.model.AutoSync
|
||||||
import com.looker.droidify.datastore.model.InstallerType
|
import de.felitendo.felostore.datastore.model.InstallerType
|
||||||
import com.looker.droidify.datastore.model.ProxyType
|
import de.felitendo.felostore.datastore.model.ProxyType
|
||||||
import com.looker.droidify.datastore.model.SortOrder
|
import de.felitendo.felostore.datastore.model.SortOrder
|
||||||
import com.looker.droidify.datastore.model.Theme
|
import de.felitendo.felostore.datastore.model.Theme
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
|
|
||||||
fun Configuration.getThemeRes(theme: Theme, dynamicTheme: Boolean) = when (theme) {
|
fun Configuration.getThemeRes(theme: Theme, dynamicTheme: Boolean) = when (theme) {
|
||||||
@@ -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 de.felitendo.felostore.datastore.PreferenceSettingsRepository.PreferencesKeys.setting
|
||||||
import com.looker.droidify.datastore.Settings
|
import de.felitendo.felostore.datastore.Settings
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
|
|
||||||
class ProtoToPreferenceMigration(
|
class ProtoToPreferenceMigration(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.datastore.model
|
package de.felitendo.felostore.datastore.model
|
||||||
|
|
||||||
enum class AutoSync {
|
enum class AutoSync {
|
||||||
ALWAYS,
|
ALWAYS,
|
||||||
@@ -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 {
|
enum class InstallerType {
|
||||||
LEGACY,
|
LEGACY,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.datastore.model
|
package de.felitendo.felostore.datastore.model
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.datastore.model
|
package de.felitendo.felostore.datastore.model
|
||||||
|
|
||||||
enum class ProxyType {
|
enum class ProxyType {
|
||||||
DIRECT,
|
DIRECT,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.datastore.model
|
package de.felitendo.felostore.datastore.model
|
||||||
|
|
||||||
// todo: Add Support for sorting by size
|
// todo: Add Support for sorting by size
|
||||||
enum class SortOrder {
|
enum class SortOrder {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.datastore.model
|
package de.felitendo.felostore.datastore.model
|
||||||
|
|
||||||
enum class Theme {
|
enum class Theme {
|
||||||
SYSTEM,
|
SYSTEM,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.di
|
package de.felitendo.felostore.di
|
||||||
|
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.di
|
package de.felitendo.felostore.di
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.datastore.core.DataStore
|
import androidx.datastore.core.DataStore
|
||||||
@@ -7,13 +7,13 @@ import androidx.datastore.dataStoreFile
|
|||||||
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
|
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
|
||||||
import androidx.datastore.preferences.core.Preferences
|
import androidx.datastore.preferences.core.Preferences
|
||||||
import androidx.datastore.preferences.preferencesDataStoreFile
|
import androidx.datastore.preferences.preferencesDataStoreFile
|
||||||
import com.looker.droidify.utility.common.Exporter
|
import de.felitendo.felostore.utility.common.Exporter
|
||||||
import com.looker.droidify.datastore.PreferenceSettingsRepository
|
import de.felitendo.felostore.datastore.PreferenceSettingsRepository
|
||||||
import com.looker.droidify.datastore.Settings
|
import de.felitendo.felostore.datastore.Settings
|
||||||
import com.looker.droidify.datastore.SettingsRepository
|
import de.felitendo.felostore.datastore.SettingsRepository
|
||||||
import com.looker.droidify.datastore.SettingsSerializer
|
import de.felitendo.felostore.datastore.SettingsSerializer
|
||||||
import com.looker.droidify.datastore.exporter.SettingsExporter
|
import de.felitendo.felostore.datastore.exporter.SettingsExporter
|
||||||
import com.looker.droidify.datastore.migration.ProtoToPreferenceMigration
|
import de.felitendo.felostore.datastore.migration.ProtoToPreferenceMigration
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.looker.droidify.di
|
package de.felitendo.felostore.di
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.looker.droidify.datastore.SettingsRepository
|
import de.felitendo.felostore.datastore.SettingsRepository
|
||||||
import com.looker.droidify.installer.InstallManager
|
import de.felitendo.felostore.installer.InstallManager
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.looker.droidify.di
|
package de.felitendo.felostore.di
|
||||||
|
|
||||||
import com.looker.droidify.network.Downloader
|
import de.felitendo.felostore.network.Downloader
|
||||||
import com.looker.droidify.network.KtorDownloader
|
import de.felitendo.felostore.network.KtorDownloader
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.looker.droidify.domain
|
package de.felitendo.felostore.domain
|
||||||
|
|
||||||
import com.looker.droidify.domain.model.App
|
import de.felitendo.felostore.domain.model.App
|
||||||
import com.looker.droidify.domain.model.AppMinimal
|
import de.felitendo.felostore.domain.model.AppMinimal
|
||||||
import com.looker.droidify.domain.model.Author
|
import de.felitendo.felostore.domain.model.Author
|
||||||
import com.looker.droidify.domain.model.Package
|
import de.felitendo.felostore.domain.model.Package
|
||||||
import com.looker.droidify.domain.model.PackageName
|
import de.felitendo.felostore.domain.model.PackageName
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
interface AppRepository {
|
interface AppRepository {
|
||||||
@@ -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
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
interface RepoRepository {
|
interface RepoRepository {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.domain.model
|
package de.felitendo.felostore.domain.model
|
||||||
|
|
||||||
data class App(
|
data class App(
|
||||||
val repoId: Long,
|
val repoId: Long,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.domain.model
|
package de.felitendo.felostore.domain.model
|
||||||
|
|
||||||
interface DataFile {
|
interface DataFile {
|
||||||
val name: String
|
val name: String
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.domain.model
|
package de.felitendo.felostore.domain.model
|
||||||
|
|
||||||
import java.security.MessageDigest
|
import java.security.MessageDigest
|
||||||
import java.security.cert.Certificate
|
import java.security.cert.Certificate
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.domain.model
|
package de.felitendo.felostore.domain.model
|
||||||
|
|
||||||
data class Package(
|
data class Package(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.domain.model
|
package de.felitendo.felostore.domain.model
|
||||||
|
|
||||||
@JvmInline
|
@JvmInline
|
||||||
value class PackageName(val name: String)
|
value class PackageName(val name: String)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.domain.model
|
package de.felitendo.felostore.domain.model
|
||||||
|
|
||||||
data class Repo(
|
data class Repo(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.graphics
|
package de.felitendo.felostore.graphics
|
||||||
|
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.graphics.ColorFilter
|
import android.graphics.ColorFilter
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.graphics
|
package de.felitendo.felostore.graphics
|
||||||
|
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
package com.looker.droidify.index
|
package de.felitendo.felostore.index
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
import com.fasterxml.jackson.core.JsonToken
|
import com.fasterxml.jackson.core.JsonToken
|
||||||
import com.looker.droidify.utility.common.extension.Json
|
import de.felitendo.felostore.utility.common.extension.Json
|
||||||
import com.looker.droidify.utility.common.extension.asSequence
|
import de.felitendo.felostore.utility.common.extension.asSequence
|
||||||
import com.looker.droidify.utility.common.extension.collectNotNull
|
import de.felitendo.felostore.utility.common.extension.collectNotNull
|
||||||
import com.looker.droidify.utility.common.extension.writeDictionary
|
import de.felitendo.felostore.utility.common.extension.writeDictionary
|
||||||
import com.looker.droidify.model.Product
|
import de.felitendo.felostore.model.Product
|
||||||
import com.looker.droidify.model.Release
|
import de.felitendo.felostore.model.Release
|
||||||
import com.looker.droidify.utility.serialization.product
|
import de.felitendo.felostore.utility.serialization.product
|
||||||
import com.looker.droidify.utility.serialization.release
|
import de.felitendo.felostore.utility.serialization.release
|
||||||
import com.looker.droidify.utility.serialization.serialize
|
import de.felitendo.felostore.utility.serialization.serialize
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.io.Closeable
|
import java.io.Closeable
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -1,31 +1,31 @@
|
|||||||
package com.looker.droidify.index
|
package de.felitendo.felostore.index
|
||||||
|
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import androidx.core.os.ConfigurationCompat.getLocales
|
import androidx.core.os.ConfigurationCompat.getLocales
|
||||||
import androidx.core.os.LocaleListCompat
|
import androidx.core.os.LocaleListCompat
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import com.fasterxml.jackson.core.JsonToken
|
import com.fasterxml.jackson.core.JsonToken
|
||||||
import com.looker.droidify.utility.common.extension.Json
|
import de.felitendo.felostore.utility.common.extension.Json
|
||||||
import com.looker.droidify.utility.common.extension.collectDistinctNotEmptyStrings
|
import de.felitendo.felostore.utility.common.extension.collectDistinctNotEmptyStrings
|
||||||
import com.looker.droidify.utility.common.extension.collectNotNull
|
import de.felitendo.felostore.utility.common.extension.collectNotNull
|
||||||
import com.looker.droidify.utility.common.extension.forEach
|
import de.felitendo.felostore.utility.common.extension.forEach
|
||||||
import com.looker.droidify.utility.common.extension.forEachKey
|
import de.felitendo.felostore.utility.common.extension.forEachKey
|
||||||
import com.looker.droidify.utility.common.extension.illegal
|
import de.felitendo.felostore.utility.common.extension.illegal
|
||||||
import com.looker.droidify.model.Product
|
import de.felitendo.felostore.model.Product
|
||||||
import com.looker.droidify.model.Product.Donate.Bitcoin
|
import de.felitendo.felostore.model.Product.Donate.Bitcoin
|
||||||
import com.looker.droidify.model.Product.Donate.Liberapay
|
import de.felitendo.felostore.model.Product.Donate.Liberapay
|
||||||
import com.looker.droidify.model.Product.Donate.Litecoin
|
import de.felitendo.felostore.model.Product.Donate.Litecoin
|
||||||
import com.looker.droidify.model.Product.Donate.OpenCollective
|
import de.felitendo.felostore.model.Product.Donate.OpenCollective
|
||||||
import com.looker.droidify.model.Product.Donate.Regular
|
import de.felitendo.felostore.model.Product.Donate.Regular
|
||||||
import com.looker.droidify.model.Product.Screenshot.Type.LARGE_TABLET
|
import de.felitendo.felostore.model.Product.Screenshot.Type.LARGE_TABLET
|
||||||
import com.looker.droidify.model.Product.Screenshot.Type.PHONE
|
import de.felitendo.felostore.model.Product.Screenshot.Type.PHONE
|
||||||
import com.looker.droidify.model.Product.Screenshot.Type.SMALL_TABLET
|
import de.felitendo.felostore.model.Product.Screenshot.Type.SMALL_TABLET
|
||||||
import com.looker.droidify.model.Product.Screenshot.Type.TV
|
import de.felitendo.felostore.model.Product.Screenshot.Type.TV
|
||||||
import com.looker.droidify.model.Product.Screenshot.Type.VIDEO
|
import de.felitendo.felostore.model.Product.Screenshot.Type.VIDEO
|
||||||
import com.looker.droidify.model.Product.Screenshot.Type.WEAR
|
import de.felitendo.felostore.model.Product.Screenshot.Type.WEAR
|
||||||
import com.looker.droidify.model.Release
|
import de.felitendo.felostore.model.Release
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.utility.common.nullIfEmpty
|
import de.felitendo.felostore.utility.common.nullIfEmpty
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
object IndexV1Parser {
|
object IndexV1Parser {
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
package com.looker.droidify.index
|
package de.felitendo.felostore.index
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.looker.droidify.database.Database
|
import de.felitendo.felostore.database.Database
|
||||||
import com.looker.droidify.domain.model.fingerprint
|
import de.felitendo.felostore.domain.model.fingerprint
|
||||||
import com.looker.droidify.model.Product
|
import de.felitendo.felostore.model.Product
|
||||||
import com.looker.droidify.model.Release
|
import de.felitendo.felostore.model.Release
|
||||||
import com.looker.droidify.model.Repository
|
import de.felitendo.felostore.model.Repository
|
||||||
import com.looker.droidify.network.Downloader
|
import de.felitendo.felostore.network.Downloader
|
||||||
import com.looker.droidify.network.NetworkResponse
|
import de.felitendo.felostore.network.NetworkResponse
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.utility.common.cache.Cache
|
import de.felitendo.felostore.utility.common.cache.Cache
|
||||||
import com.looker.droidify.utility.common.extension.toFormattedString
|
import de.felitendo.felostore.utility.common.extension.toFormattedString
|
||||||
import com.looker.droidify.utility.common.result.Result
|
import de.felitendo.felostore.utility.common.result.Result
|
||||||
import com.looker.droidify.utility.extension.android.Android
|
import de.felitendo.felostore.utility.extension.android.Android
|
||||||
import com.looker.droidify.utility.getProgress
|
import de.felitendo.felostore.utility.getProgress
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.flow.drop
|
import kotlinx.coroutines.flow.drop
|
||||||
import kotlinx.coroutines.flow.filter
|
import kotlinx.coroutines.flow.filter
|
||||||
@@ -1,24 +1,24 @@
|
|||||||
package com.looker.droidify.installer
|
package de.felitendo.felostore.installer
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.looker.droidify.utility.common.extension.addAndCompute
|
import de.felitendo.felostore.utility.common.extension.addAndCompute
|
||||||
import com.looker.droidify.utility.common.extension.filter
|
import de.felitendo.felostore.utility.common.extension.filter
|
||||||
import com.looker.droidify.utility.common.extension.notificationManager
|
import de.felitendo.felostore.utility.common.extension.notificationManager
|
||||||
import com.looker.droidify.utility.common.extension.updateAsMutable
|
import de.felitendo.felostore.utility.common.extension.updateAsMutable
|
||||||
import com.looker.droidify.datastore.SettingsRepository
|
import de.felitendo.felostore.datastore.SettingsRepository
|
||||||
import com.looker.droidify.datastore.get
|
import de.felitendo.felostore.datastore.get
|
||||||
import com.looker.droidify.datastore.model.InstallerType
|
import de.felitendo.felostore.datastore.model.InstallerType
|
||||||
import com.looker.droidify.domain.model.PackageName
|
import de.felitendo.felostore.domain.model.PackageName
|
||||||
import com.looker.droidify.installer.installers.Installer
|
import de.felitendo.felostore.installer.installers.Installer
|
||||||
import com.looker.droidify.installer.installers.LegacyInstaller
|
import de.felitendo.felostore.installer.installers.LegacyInstaller
|
||||||
import com.looker.droidify.installer.installers.root.RootInstaller
|
import de.felitendo.felostore.installer.installers.root.RootInstaller
|
||||||
import com.looker.droidify.installer.installers.session.SessionInstaller
|
import de.felitendo.felostore.installer.installers.session.SessionInstaller
|
||||||
import com.looker.droidify.installer.installers.shizuku.ShizukuInstaller
|
import de.felitendo.felostore.installer.installers.shizuku.ShizukuInstaller
|
||||||
import com.looker.droidify.installer.model.InstallItem
|
import de.felitendo.felostore.installer.model.InstallItem
|
||||||
import com.looker.droidify.installer.model.InstallState
|
import de.felitendo.felostore.installer.model.InstallState
|
||||||
import com.looker.droidify.installer.notification.createInstallNotification
|
import de.felitendo.felostore.installer.notification.createInstallNotification
|
||||||
import com.looker.droidify.installer.notification.installNotification
|
import de.felitendo.felostore.installer.notification.installNotification
|
||||||
import com.looker.droidify.installer.notification.removeInstallNotification
|
import de.felitendo.felostore.installer.notification.removeInstallNotification
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.channels.Channel
|
import kotlinx.coroutines.channels.Channel
|
||||||
import kotlinx.coroutines.channels.consumeEach
|
import kotlinx.coroutines.channels.consumeEach
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.looker.droidify.installer.installers
|
package de.felitendo.felostore.installer.installers
|
||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import com.looker.droidify.utility.common.extension.getLauncherActivities
|
import de.felitendo.felostore.utility.common.extension.getLauncherActivities
|
||||||
import com.looker.droidify.utility.common.extension.getPackageInfoCompat
|
import de.felitendo.felostore.utility.common.extension.getPackageInfoCompat
|
||||||
import com.looker.droidify.utility.common.extension.intent
|
import de.felitendo.felostore.utility.common.extension.intent
|
||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import rikka.shizuku.ShizukuProvider
|
import rikka.shizuku.ShizukuProvider
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
package com.looker.droidify.installer.installers
|
package de.felitendo.felostore.installer.installers
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.util.AndroidRuntimeException
|
import android.util.AndroidRuntimeException
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import com.looker.droidify.domain.model.PackageName
|
import de.felitendo.felostore.domain.model.PackageName
|
||||||
import com.looker.droidify.installer.model.InstallItem
|
import de.felitendo.felostore.installer.model.InstallItem
|
||||||
import com.looker.droidify.installer.model.InstallState
|
import de.felitendo.felostore.installer.model.InstallState
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.utility.common.cache.Cache
|
import de.felitendo.felostore.utility.common.cache.Cache
|
||||||
import com.looker.droidify.utility.common.extension.intent
|
import de.felitendo.felostore.utility.common.extension.intent
|
||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
|
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package com.looker.droidify.installer.installers.root
|
package de.felitendo.felostore.installer.installers.root
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.looker.droidify.domain.model.PackageName
|
import de.felitendo.felostore.domain.model.PackageName
|
||||||
import com.looker.droidify.installer.installers.Installer
|
import de.felitendo.felostore.installer.installers.Installer
|
||||||
import com.looker.droidify.installer.installers.uninstallPackage
|
import de.felitendo.felostore.installer.installers.uninstallPackage
|
||||||
import com.looker.droidify.installer.model.InstallItem
|
import de.felitendo.felostore.installer.model.InstallItem
|
||||||
import com.looker.droidify.installer.model.InstallState
|
import de.felitendo.felostore.installer.model.InstallState
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.utility.common.cache.Cache
|
import de.felitendo.felostore.utility.common.cache.Cache
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.installer.installers.session
|
package de.felitendo.felostore.installer.installers.session
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
@@ -9,14 +9,14 @@ import android.os.Build
|
|||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.utility.common.cache.Cache
|
import de.felitendo.felostore.utility.common.cache.Cache
|
||||||
import com.looker.droidify.utility.common.log
|
import de.felitendo.felostore.utility.common.log
|
||||||
import com.looker.droidify.utility.common.sdkAbove
|
import de.felitendo.felostore.utility.common.sdkAbove
|
||||||
import com.looker.droidify.domain.model.PackageName
|
import de.felitendo.felostore.domain.model.PackageName
|
||||||
import com.looker.droidify.installer.installers.Installer
|
import de.felitendo.felostore.installer.installers.Installer
|
||||||
import com.looker.droidify.installer.model.InstallItem
|
import de.felitendo.felostore.installer.model.InstallItem
|
||||||
import com.looker.droidify.installer.model.InstallState
|
import de.felitendo.felostore.installer.model.InstallState
|
||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
|
|
||||||
@@ -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.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageInstaller
|
import android.content.pm.PackageInstaller
|
||||||
import com.looker.droidify.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
import de.felitendo.felostore.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
||||||
import com.looker.droidify.R
|
import de.felitendo.felostore.R
|
||||||
import com.looker.droidify.utility.common.createNotificationChannel
|
import de.felitendo.felostore.utility.common.createNotificationChannel
|
||||||
import com.looker.droidify.utility.common.extension.getPackageName
|
import de.felitendo.felostore.utility.common.extension.getPackageName
|
||||||
import com.looker.droidify.utility.common.extension.notificationManager
|
import de.felitendo.felostore.utility.common.extension.notificationManager
|
||||||
import com.looker.droidify.domain.model.toPackageName
|
import de.felitendo.felostore.domain.model.toPackageName
|
||||||
import com.looker.droidify.installer.InstallManager
|
import de.felitendo.felostore.installer.InstallManager
|
||||||
import com.looker.droidify.installer.model.InstallState
|
import de.felitendo.felostore.installer.model.InstallState
|
||||||
import com.looker.droidify.installer.notification.createInstallNotification
|
import de.felitendo.felostore.installer.notification.createInstallNotification
|
||||||
import com.looker.droidify.installer.notification.installNotification
|
import de.felitendo.felostore.installer.notification.installNotification
|
||||||
import com.looker.droidify.installer.notification.removeInstallNotification
|
import de.felitendo.felostore.installer.notification.removeInstallNotification
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
package com.looker.droidify.installer.installers.shizuku
|
package de.felitendo.felostore.installer.installers.shizuku
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.utility.common.cache.Cache
|
import de.felitendo.felostore.utility.common.cache.Cache
|
||||||
import com.looker.droidify.utility.common.extension.size
|
import de.felitendo.felostore.utility.common.extension.size
|
||||||
import com.looker.droidify.domain.model.PackageName
|
import de.felitendo.felostore.domain.model.PackageName
|
||||||
import com.looker.droidify.installer.installers.Installer
|
import de.felitendo.felostore.installer.installers.Installer
|
||||||
import com.looker.droidify.installer.installers.uninstallPackage
|
import de.felitendo.felostore.installer.installers.uninstallPackage
|
||||||
import com.looker.droidify.installer.model.InstallItem
|
import de.felitendo.felostore.installer.model.InstallItem
|
||||||
import com.looker.droidify.installer.model.InstallState
|
import de.felitendo.felostore.installer.model.InstallState
|
||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import java.io.BufferedReader
|
import java.io.BufferedReader
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.looker.droidify.installer.model
|
package de.felitendo.felostore.installer.model
|
||||||
|
|
||||||
import com.looker.droidify.domain.model.PackageName
|
import de.felitendo.felostore.domain.model.PackageName
|
||||||
import com.looker.droidify.domain.model.toPackageName
|
import de.felitendo.felostore.domain.model.toPackageName
|
||||||
|
|
||||||
class InstallItem(
|
class InstallItem(
|
||||||
val packageName: PackageName,
|
val packageName: PackageName,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.installer.model
|
package de.felitendo.felostore.installer.model
|
||||||
|
|
||||||
enum class InstallState { Failed, Pending, Installing, Installed }
|
enum class InstallState { Failed, Pending, Installing, Installed }
|
||||||
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
package com.looker.droidify.installer.notification
|
package de.felitendo.felostore.installer.notification
|
||||||
|
|
||||||
import android.app.Notification
|
import android.app.Notification
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import com.looker.droidify.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
import de.felitendo.felostore.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
||||||
import com.looker.droidify.utility.common.Constants.NOTIFICATION_ID_INSTALL
|
import de.felitendo.felostore.utility.common.Constants.NOTIFICATION_ID_INSTALL
|
||||||
import com.looker.droidify.installer.model.InstallState
|
import de.felitendo.felostore.installer.model.InstallState
|
||||||
import com.looker.droidify.R
|
import de.felitendo.felostore.R
|
||||||
|
|
||||||
fun NotificationManager.installNotification(
|
fun NotificationManager.installNotification(
|
||||||
packageName: String,
|
packageName: String,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.model
|
package de.felitendo.felostore.model
|
||||||
|
|
||||||
class InstalledItem(
|
class InstalledItem(
|
||||||
val packageName: String,
|
val packageName: String,
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.looker.droidify.model
|
package de.felitendo.felostore.model
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.looker.droidify.utility.common.extension.getColorFromAttr
|
import de.felitendo.felostore.utility.common.extension.getColorFromAttr
|
||||||
import com.looker.droidify.utility.common.extension.videoPlaceHolder
|
import de.felitendo.felostore.utility.common.extension.videoPlaceHolder
|
||||||
import com.google.android.material.R as MaterialR
|
import com.google.android.material.R as MaterialR
|
||||||
|
|
||||||
data class Product(
|
data class Product(
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.looker.droidify.model
|
package de.felitendo.felostore.model
|
||||||
|
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.looker.droidify.utility.common.extension.dpi
|
import de.felitendo.felostore.utility.common.extension.dpi
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
data class ProductItem(
|
data class ProductItem(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.model
|
package de.felitendo.felostore.model
|
||||||
|
|
||||||
data class ProductPreference(val ignoreUpdates: Boolean, val ignoreVersionCode: Long) {
|
data class ProductPreference(val ignoreUpdates: Boolean, val ignoreVersionCode: Long) {
|
||||||
fun shouldIgnoreUpdate(versionCode: Long): Boolean {
|
fun shouldIgnoreUpdate(versionCode: Long): Boolean {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.model
|
package de.felitendo.felostore.model
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
|
||||||
112
app/src/main/kotlin/de/felitendo/felostore/model/Repository.kt
Normal file
112
app/src/main/kotlin/de/felitendo/felostore/model/Repository.kt
Normal 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"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.network
|
package de.felitendo.felostore.network
|
||||||
|
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.looker.droidify.network
|
package de.felitendo.felostore.network
|
||||||
|
|
||||||
import com.looker.droidify.network.header.HeadersBuilder
|
import de.felitendo.felostore.network.header.HeadersBuilder
|
||||||
import com.looker.droidify.network.validation.FileValidator
|
import de.felitendo.felostore.network.validation.FileValidator
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.net.Proxy
|
import java.net.Proxy
|
||||||
|
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.looker.droidify.network
|
package de.felitendo.felostore.network
|
||||||
|
|
||||||
import com.looker.droidify.BuildConfig
|
import de.felitendo.felostore.BuildConfig
|
||||||
import com.looker.droidify.network.header.HeadersBuilder
|
import de.felitendo.felostore.network.header.HeadersBuilder
|
||||||
import com.looker.droidify.network.header.KtorHeadersBuilder
|
import de.felitendo.felostore.network.header.KtorHeadersBuilder
|
||||||
import com.looker.droidify.network.validation.FileValidator
|
import de.felitendo.felostore.network.validation.FileValidator
|
||||||
import com.looker.droidify.network.validation.ValidationException
|
import de.felitendo.felostore.network.validation.ValidationException
|
||||||
import com.looker.droidify.utility.common.extension.size
|
import de.felitendo.felostore.utility.common.extension.size
|
||||||
import io.ktor.client.HttpClient
|
import io.ktor.client.HttpClient
|
||||||
import io.ktor.client.HttpClientConfig
|
import io.ktor.client.HttpClientConfig
|
||||||
import io.ktor.client.engine.HttpClientEngine
|
import io.ktor.client.engine.HttpClientEngine
|
||||||
@@ -134,7 +134,7 @@ internal class KtorDownloader(
|
|||||||
|
|
||||||
private const val CONNECTION_TIMEOUT = 30_000L
|
private const val CONNECTION_TIMEOUT = 30_000L
|
||||||
private const val SOCKET_TIMEOUT = 15_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) {
|
private fun HttpClientConfig<*>.userAgentConfig() = install(UserAgent) {
|
||||||
agent = USER_AGENT
|
agent = USER_AGENT
|
||||||
@@ -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
|
import java.util.Date
|
||||||
|
|
||||||
sealed interface NetworkResponse {
|
sealed interface NetworkResponse {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.network.header
|
package de.felitendo.felostore.network.header
|
||||||
|
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.network.header
|
package de.felitendo.felostore.network.header
|
||||||
|
|
||||||
import io.ktor.http.HttpHeaders
|
import io.ktor.http.HttpHeaders
|
||||||
import io.ktor.util.encodeBase64
|
import io.ktor.util.encodeBase64
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.network.validation
|
package de.felitendo.felostore.network.validation
|
||||||
|
|
||||||
import java.io.File
|
import java.io.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)
|
class ValidationException(override val message: String) : Exception(message)
|
||||||
|
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.looker.droidify.receivers
|
package de.felitendo.felostore.receivers
|
||||||
|
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import com.looker.droidify.utility.common.extension.getPackageInfoCompat
|
import de.felitendo.felostore.utility.common.extension.getPackageInfoCompat
|
||||||
import com.looker.droidify.database.Database
|
import de.felitendo.felostore.database.Database
|
||||||
import com.looker.droidify.utility.extension.toInstalledItem
|
import de.felitendo.felostore.utility.extension.toInstalledItem
|
||||||
|
|
||||||
class InstalledAppReceiver(private val packageManager: PackageManager) : BroadcastReceiver() {
|
class InstalledAppReceiver(private val packageManager: PackageManager) : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.service
|
package de.felitendo.felostore.service
|
||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.service
|
package de.felitendo.felostore.service
|
||||||
|
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.service
|
package de.felitendo.felostore.service
|
||||||
|
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -6,34 +6,34 @@ import android.graphics.Color
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import com.looker.droidify.BuildConfig
|
import de.felitendo.felostore.BuildConfig
|
||||||
import com.looker.droidify.MainActivity
|
import de.felitendo.felostore.MainActivity
|
||||||
import com.looker.droidify.datastore.SettingsRepository
|
import de.felitendo.felostore.datastore.SettingsRepository
|
||||||
import com.looker.droidify.datastore.get
|
import de.felitendo.felostore.datastore.get
|
||||||
import com.looker.droidify.datastore.model.InstallerType
|
import de.felitendo.felostore.datastore.model.InstallerType
|
||||||
import com.looker.droidify.installer.InstallManager
|
import de.felitendo.felostore.installer.InstallManager
|
||||||
import com.looker.droidify.installer.model.InstallState
|
import de.felitendo.felostore.installer.model.InstallState
|
||||||
import com.looker.droidify.installer.model.installFrom
|
import de.felitendo.felostore.installer.model.installFrom
|
||||||
import com.looker.droidify.installer.notification.createInstallNotification
|
import de.felitendo.felostore.installer.notification.createInstallNotification
|
||||||
import com.looker.droidify.installer.notification.installNotification
|
import de.felitendo.felostore.installer.notification.installNotification
|
||||||
import com.looker.droidify.model.Release
|
import de.felitendo.felostore.model.Release
|
||||||
import com.looker.droidify.model.Repository
|
import de.felitendo.felostore.model.Repository
|
||||||
import com.looker.droidify.network.DataSize
|
import de.felitendo.felostore.network.DataSize
|
||||||
import com.looker.droidify.network.Downloader
|
import de.felitendo.felostore.network.Downloader
|
||||||
import com.looker.droidify.network.NetworkResponse
|
import de.felitendo.felostore.network.NetworkResponse
|
||||||
import com.looker.droidify.network.percentBy
|
import de.felitendo.felostore.network.percentBy
|
||||||
import com.looker.droidify.network.validation.ValidationException
|
import de.felitendo.felostore.network.validation.ValidationException
|
||||||
import com.looker.droidify.utility.common.Constants
|
import de.felitendo.felostore.utility.common.Constants
|
||||||
import com.looker.droidify.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
import de.felitendo.felostore.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.utility.common.cache.Cache
|
import de.felitendo.felostore.utility.common.cache.Cache
|
||||||
import com.looker.droidify.utility.common.createNotificationChannel
|
import de.felitendo.felostore.utility.common.createNotificationChannel
|
||||||
import com.looker.droidify.utility.common.extension.notificationManager
|
import de.felitendo.felostore.utility.common.extension.notificationManager
|
||||||
import com.looker.droidify.utility.common.extension.startServiceCompat
|
import de.felitendo.felostore.utility.common.extension.startServiceCompat
|
||||||
import com.looker.droidify.utility.common.extension.stopForegroundCompat
|
import de.felitendo.felostore.utility.common.extension.stopForegroundCompat
|
||||||
import com.looker.droidify.utility.common.extension.toPendingIntent
|
import de.felitendo.felostore.utility.common.extension.toPendingIntent
|
||||||
import com.looker.droidify.utility.common.extension.updateAsMutable
|
import de.felitendo.felostore.utility.common.extension.updateAsMutable
|
||||||
import com.looker.droidify.utility.common.log
|
import de.felitendo.felostore.utility.common.log
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
@@ -50,7 +50,7 @@ import kotlinx.coroutines.sync.withLock
|
|||||||
import kotlinx.coroutines.yield
|
import kotlinx.coroutines.yield
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import com.looker.droidify.R.string as stringRes
|
import de.felitendo.felostore.R.string as stringRes
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class DownloadService : ConnectionService<DownloadService.Binder>() {
|
class DownloadService : ConnectionService<DownloadService.Binder>() {
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
package com.looker.droidify.service
|
package de.felitendo.felostore.service
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import com.looker.droidify.utility.common.extension.calculateHash
|
import de.felitendo.felostore.utility.common.extension.calculateHash
|
||||||
import com.looker.droidify.utility.common.extension.getPackageArchiveInfoCompat
|
import de.felitendo.felostore.utility.common.extension.getPackageArchiveInfoCompat
|
||||||
import com.looker.droidify.utility.common.extension.singleSignature
|
import de.felitendo.felostore.utility.common.extension.singleSignature
|
||||||
import com.looker.droidify.utility.common.extension.versionCodeCompat
|
import de.felitendo.felostore.utility.common.extension.versionCodeCompat
|
||||||
import com.looker.droidify.network.validation.FileValidator
|
import de.felitendo.felostore.network.validation.FileValidator
|
||||||
import com.looker.droidify.utility.common.signature.Hash
|
import de.felitendo.felostore.utility.common.signature.Hash
|
||||||
import com.looker.droidify.network.validation.invalid
|
import de.felitendo.felostore.network.validation.invalid
|
||||||
import com.looker.droidify.utility.common.signature.verifyHash
|
import de.felitendo.felostore.utility.common.signature.verifyHash
|
||||||
import com.looker.droidify.model.Release
|
import de.felitendo.felostore.model.Release
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import com.looker.droidify.R.string as strings
|
import de.felitendo.felostore.R.string as strings
|
||||||
|
|
||||||
class ReleaseFileValidator(
|
class ReleaseFileValidator(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.service
|
package de.felitendo.felostore.service
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
@@ -15,25 +15,25 @@ import android.text.style.ForegroundColorSpan
|
|||||||
import android.view.ContextThemeWrapper
|
import android.view.ContextThemeWrapper
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.looker.droidify.utility.common.Constants
|
import de.felitendo.felostore.utility.common.Constants
|
||||||
import com.looker.droidify.utility.common.SdkCheck
|
import de.felitendo.felostore.utility.common.SdkCheck
|
||||||
import com.looker.droidify.utility.common.createNotificationChannel
|
import de.felitendo.felostore.utility.common.createNotificationChannel
|
||||||
import com.looker.droidify.utility.common.extension.getColorFromAttr
|
import de.felitendo.felostore.utility.common.extension.getColorFromAttr
|
||||||
import com.looker.droidify.utility.common.extension.notificationManager
|
import de.felitendo.felostore.utility.common.extension.notificationManager
|
||||||
import com.looker.droidify.utility.common.extension.startServiceCompat
|
import de.felitendo.felostore.utility.common.extension.startServiceCompat
|
||||||
import com.looker.droidify.utility.common.extension.stopForegroundCompat
|
import de.felitendo.felostore.utility.common.extension.stopForegroundCompat
|
||||||
import com.looker.droidify.utility.common.result.Result
|
import de.felitendo.felostore.utility.common.result.Result
|
||||||
import com.looker.droidify.utility.common.sdkAbove
|
import de.felitendo.felostore.utility.common.sdkAbove
|
||||||
import com.looker.droidify.datastore.SettingsRepository
|
import de.felitendo.felostore.datastore.SettingsRepository
|
||||||
import com.looker.droidify.BuildConfig
|
import de.felitendo.felostore.BuildConfig
|
||||||
import com.looker.droidify.MainActivity
|
import de.felitendo.felostore.MainActivity
|
||||||
import com.looker.droidify.database.Database
|
import de.felitendo.felostore.database.Database
|
||||||
import com.looker.droidify.index.RepositoryUpdater
|
import de.felitendo.felostore.index.RepositoryUpdater
|
||||||
import com.looker.droidify.model.ProductItem
|
import de.felitendo.felostore.model.ProductItem
|
||||||
import com.looker.droidify.model.Repository
|
import de.felitendo.felostore.model.Repository
|
||||||
import com.looker.droidify.utility.extension.startUpdate
|
import de.felitendo.felostore.utility.extension.startUpdate
|
||||||
import com.looker.droidify.network.DataSize
|
import de.felitendo.felostore.network.DataSize
|
||||||
import com.looker.droidify.network.percentBy
|
import de.felitendo.felostore.network.percentBy
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -51,12 +51,12 @@ import kotlinx.coroutines.sync.withLock
|
|||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import com.looker.droidify.R
|
import de.felitendo.felostore.R
|
||||||
import kotlinx.coroutines.FlowPreview
|
import kotlinx.coroutines.FlowPreview
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
import android.R as AndroidR
|
import android.R as AndroidR
|
||||||
import com.looker.droidify.R.string as stringRes
|
import de.felitendo.felostore.R.string as stringRes
|
||||||
import com.looker.droidify.R.style as styleRes
|
import de.felitendo.felostore.R.style as styleRes
|
||||||
import kotlinx.coroutines.Job as CoroutinesJob
|
import kotlinx.coroutines.Job as CoroutinesJob
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
@@ -521,7 +521,7 @@ class SyncService : ConnectionService<SyncService.Binder>() {
|
|||||||
private suspend fun updateAllAppsInternal(skipSignature: Boolean) {
|
private suspend fun updateAllAppsInternal(skipSignature: Boolean) {
|
||||||
Database.ProductAdapter
|
Database.ProductAdapter
|
||||||
.getUpdates(skipSignature)
|
.getUpdates(skipSignature)
|
||||||
// Update Droid-ify the last
|
// Update FeloStore the last
|
||||||
.sortedBy { if (it.packageName == packageName) 1 else -1 }
|
.sortedBy { if (it.packageName == packageName) 1 else -1 }
|
||||||
.map {
|
.map {
|
||||||
Database.InstalledAdapter.get(it.packageName, null) to
|
Database.InstalledAdapter.get(it.packageName, null) to
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
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 com.looker.droidify.network.validation.ValidationException
|
import de.felitendo.felostore.network.validation.ValidationException
|
||||||
import java.util.jar.JarEntry
|
import java.util.jar.JarEntry
|
||||||
|
|
||||||
interface IndexValidator {
|
interface IndexValidator {
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
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 com.looker.droidify.domain.model.Repo
|
import de.felitendo.felostore.domain.model.Repo
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
interface Parser<out T> {
|
interface Parser<out T> {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.sync
|
package de.felitendo.felostore.sync
|
||||||
|
|
||||||
import android.app.job.JobInfo
|
import android.app.job.JobInfo
|
||||||
import androidx.work.Constraints
|
import androidx.work.Constraints
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
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 com.looker.droidify.domain.model.Repo
|
import de.felitendo.felostore.domain.model.Repo
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Expected Architecture: [https://excalidraw.com/#json=JqpGunWTJONjq-ecDNiPg,j9t0X4coeNvIG7B33GTq6A]
|
* Expected Architecture: [https://excalidraw.com/#json=JqpGunWTJONjq-ecDNiPg,j9t0X4coeNvIG7B33GTq6A]
|
||||||
@@ -15,6 +15,6 @@ interface Syncable<T> {
|
|||||||
|
|
||||||
suspend fun sync(
|
suspend fun sync(
|
||||||
repo: Repo,
|
repo: Repo,
|
||||||
): Pair<Fingerprint, com.looker.droidify.sync.v2.model.IndexV2?>
|
): Pair<Fingerprint, de.felitendo.felostore.sync.v2.model.IndexV2?>
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 de.felitendo.felostore.sync.v1.model.AppV1
|
||||||
import com.looker.droidify.sync.v1.model.IndexV1
|
import de.felitendo.felostore.sync.v1.model.IndexV1
|
||||||
import com.looker.droidify.sync.v1.model.Localized
|
import de.felitendo.felostore.sync.v1.model.Localized
|
||||||
import com.looker.droidify.sync.v1.model.PackageV1
|
import de.felitendo.felostore.sync.v1.model.PackageV1
|
||||||
import com.looker.droidify.sync.v1.model.RepoV1
|
import de.felitendo.felostore.sync.v1.model.RepoV1
|
||||||
import com.looker.droidify.sync.v1.model.maxSdk
|
import de.felitendo.felostore.sync.v1.model.maxSdk
|
||||||
import com.looker.droidify.sync.v1.model.name
|
import de.felitendo.felostore.sync.v1.model.name
|
||||||
import com.looker.droidify.sync.v2.model.AntiFeatureV2
|
import de.felitendo.felostore.sync.v2.model.AntiFeatureV2
|
||||||
import com.looker.droidify.sync.v2.model.CategoryV2
|
import de.felitendo.felostore.sync.v2.model.CategoryV2
|
||||||
import com.looker.droidify.sync.v2.model.FeatureV2
|
import de.felitendo.felostore.sync.v2.model.FeatureV2
|
||||||
import com.looker.droidify.sync.v2.model.FileV2
|
import de.felitendo.felostore.sync.v2.model.FileV2
|
||||||
import com.looker.droidify.sync.v2.model.IndexV2
|
import de.felitendo.felostore.sync.v2.model.IndexV2
|
||||||
import com.looker.droidify.sync.v2.model.LocalizedFiles
|
import de.felitendo.felostore.sync.v2.model.LocalizedFiles
|
||||||
import com.looker.droidify.sync.v2.model.LocalizedIcon
|
import de.felitendo.felostore.sync.v2.model.LocalizedIcon
|
||||||
import com.looker.droidify.sync.v2.model.LocalizedString
|
import de.felitendo.felostore.sync.v2.model.LocalizedString
|
||||||
import com.looker.droidify.sync.v2.model.ManifestV2
|
import de.felitendo.felostore.sync.v2.model.ManifestV2
|
||||||
import com.looker.droidify.sync.v2.model.MetadataV2
|
import de.felitendo.felostore.sync.v2.model.MetadataV2
|
||||||
import com.looker.droidify.sync.v2.model.MirrorV2
|
import de.felitendo.felostore.sync.v2.model.MirrorV2
|
||||||
import com.looker.droidify.sync.v2.model.PackageV2
|
import de.felitendo.felostore.sync.v2.model.PackageV2
|
||||||
import com.looker.droidify.sync.v2.model.PermissionV2
|
import de.felitendo.felostore.sync.v2.model.PermissionV2
|
||||||
import com.looker.droidify.sync.v2.model.RepoV2
|
import de.felitendo.felostore.sync.v2.model.RepoV2
|
||||||
import com.looker.droidify.sync.v2.model.ScreenshotsV2
|
import de.felitendo.felostore.sync.v2.model.ScreenshotsV2
|
||||||
import com.looker.droidify.sync.v2.model.SignerV2
|
import de.felitendo.felostore.sync.v2.model.SignerV2
|
||||||
import com.looker.droidify.sync.v2.model.UsesSdkV2
|
import de.felitendo.felostore.sync.v2.model.UsesSdkV2
|
||||||
import com.looker.droidify.sync.v2.model.VersionV2
|
import de.felitendo.felostore.sync.v2.model.VersionV2
|
||||||
|
|
||||||
private const val V1_LOCALE = "en-US"
|
private const val V1_LOCALE = "en-US"
|
||||||
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.looker.droidify.sync.common
|
package de.felitendo.felostore.sync.common
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.looker.droidify.utility.common.cache.Cache
|
import de.felitendo.felostore.utility.common.cache.Cache
|
||||||
import com.looker.droidify.domain.model.Repo
|
import de.felitendo.felostore.domain.model.Repo
|
||||||
import com.looker.droidify.network.Downloader
|
import de.felitendo.felostore.network.Downloader
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.io.File
|
import java.io.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 de.felitendo.felostore.domain.model.Fingerprint
|
||||||
import com.looker.droidify.domain.model.check
|
import de.felitendo.felostore.domain.model.check
|
||||||
import com.looker.droidify.domain.model.fingerprint
|
import de.felitendo.felostore.domain.model.fingerprint
|
||||||
import com.looker.droidify.network.validation.invalid
|
import de.felitendo.felostore.network.validation.invalid
|
||||||
import com.looker.droidify.sync.utils.certificate
|
import de.felitendo.felostore.sync.utils.certificate
|
||||||
import com.looker.droidify.sync.utils.codeSigner
|
import de.felitendo.felostore.sync.utils.codeSigner
|
||||||
import kotlinx.coroutines.CoroutineDispatcher
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.util.jar.JarEntry
|
import java.util.jar.JarEntry
|
||||||
|
|
||||||
class IndexJarValidator(
|
class IndexJarValidator(
|
||||||
private val dispatcher: CoroutineDispatcher
|
private val dispatcher: CoroutineDispatcher
|
||||||
) : com.looker.droidify.sync.IndexValidator {
|
) : de.felitendo.felostore.sync.IndexValidator {
|
||||||
override suspend fun validate(
|
override suspend fun validate(
|
||||||
jarEntry: JarEntry,
|
jarEntry: JarEntry,
|
||||||
expectedFingerprint: Fingerprint?
|
expectedFingerprint: Fingerprint?
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.looker.droidify.sync.common
|
package de.felitendo.felostore.sync.common
|
||||||
|
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user