47 Commits
main ... main

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

View File

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

View File

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

View File

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

View File

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

9
UPDATING.md Normal file
View File

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

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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