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