Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
59 changes: 51 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,54 @@
# Appteka [![Appteka](https://img.shields.io/badge/dynamic/json?color=32A304&label=Appteka&query=%24.newer.ver_name&url=https%3A%2F%2Fappteka.store%2F%2Fapi%2F1%2Fupdate%3Fbuild%3D1)](https://appteka.store)
Appteka is a free Android apps market. Download [Appteka](https://appteka.store) to get access to hundreds of thousands free Android apps made by talented developers all over the world.
# Appteka
[![Appteka](https://img.shields.io/badge/dynamic/json?color=32A304&label=Appteka&query=%24.newer.ver_name&url=https%3A%2F%2Fappteka.store%2F%2Fapi%2F1%2Fupdate%3Fbuild%3D1)](https://appteka.store)

![Screenshot](art/main.jpg "Main")
![Screenshot](art/app.jpg "App")
Appteka is a free Android apps market.
Download **[Appteka](https://appteka.store)** to get access to hundreds of thousands of free Android apps made by developers all around the world.

![Screenshot](art/upload.jpg "Upload")
![Screenshot](art/profile.jpg "Profile")
---

![Screenshot](art/topics.jpg "Topics")
![Screenshot](art/chat.jpg "Chat")
## 📸 Screenshots

### ⭐ Main Screens
| Home | App Details |
|------|-------------|
| ![Home](art/main.jpg) | ![App](art/app.jpg) |

### ⭐ Upload & Profile
| Upload Screen | Profile Screen |
|---------------|----------------|
| ![Upload](art/upload.jpg) | ![Profile](art/profile.jpg) |

### ⭐ Topics & Chat
| Topics | Chat |
|--------|------|
| ![Topics](art/topics.jpg) | ![Chat](art/chat.jpg) |

---

## 📝 Changelog (Custom Build by Ameer Muawiya)

> **Note:**
> This is a customized build of **Appteka**.
> **All original credit belongs solely to the official Appteka developers.**
> This build only includes visual and functional improvements while preserving the core project.

### 🚀 Recent Changes & Enhancements
- Complete UI migration to **Material 3 Expressive** design system.
- Added **Download button pinning** on the home screen for quicker access.
- Introduced an option to **save downloaded files directly to device storage**.
- Fully redesigned **Settings Activity** using modern Material 3 patterns.
- Migrated **all dialogs** to Material 3 components.
- Added four theme modes: **System**, **Light**, **Dark**, and **Battery Saver** (for older devices).
- Added toggle for **Dynamic Colors** (Monet / Material You).
- Fixed a crash in **Store Fragment** when opening certain apps.
- Numerous UI refinements, improved spacing, better animations, and smoother transitions.
- Various bug fixes and performance improvements across the app.

---

## 👤 Custom Build Contributor
- **Modified & Enhanced by:** *Ameer Muawiya*

## 🎖 Full Credit
All original code and development work belongs to the
**Official Appteka Developers** — they deserve full recognition for creating this project.
88 changes: 69 additions & 19 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ plugins {
}

android {
namespace = 'com.tomclaw.appsend'
compileSdk = 36

signingConfigs {
release {
if (project.hasProperty("storeFile")) storeFile file("$rootDir/" + project.storeFile)
Expand All @@ -15,46 +18,46 @@ android {
if (project.hasProperty("keyPassword")) keyPassword project.keyPassword
}
}
//noinspection GradleDependency
compileSdk = 36
namespace = 'com.tomclaw.appsend'

defaultConfig {
applicationId "com.tomclaw.appsend"
minSdkVersion 21
//noinspection OldTargetApi
targetSdkVersion 33
versionCode project.hasProperty("versionCode") ? Integer.parseInt(project.versionCode) : 929
versionName = "18.0"
targetSdkVersion 34
versionCode project.hasProperty("versionCode")
? Integer.parseInt(project.versionCode)
: 929
versionName "18.0"
}

buildTypes {
release {
minifyEnabled true
debuggable false
shrinkResources = true
jniDebuggable false
signingConfig = signingConfigs.release
minifyEnabled true
shrinkResources true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}

debug {
debuggable true
jniDebuggable true
signingConfig = signingConfigs.debug
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
shrinkResources false
signingConfig signingConfigs.debug
proguardFiles getDefaultProguardFile('proguard-android.txt')
}
}

buildFeatures {
buildConfig = true
}

dependenciesInfo {
includeInApk = false
includeInBundle = false
}

buildFeatures {
buildConfig = true
}

lint {
abortOnError = false
}
Expand All @@ -74,8 +77,9 @@ android {
offline = { applicationVariant -> false }
enableAnalytics = true
}
<<<<<<< HEAD
dependencies {
implementation project(path: ':preference-fragment')
implementation 'androidx.preference:preference:1.2.1'
implementation 'com.github.solkin:simple-image-loader:v0.9.6'
implementation 'com.github.solkin:disk-lru-cache:v1.7'
//noinspection GradleDependency
Expand All @@ -101,14 +105,60 @@ android {
implementation 'com.squareup.retrofit2:converter-gson:3.0.0'
implementation 'com.squareup.retrofit2:adapter-rxjava3:3.0.0'
implementation 'com.caverock:androidsvg-aar:1.4'
implementation 'me.zhanghai.android.materialratingbar:library:1.4.0'
implementation 'com.greysonparrelli.permiso:permiso:0.3.0'
implementation 'com.github.avito-tech:Konveyor:0.42.2'
implementation 'com.github.rubensousa:BottomSheetBuilder:1.6.0'
debugImplementation 'com.github.chuckerteam.chucker:library:4.2.0'
releaseImplementation 'com.github.chuckerteam.chucker:library-no-op:4.2.0'
implementation 'org.androidannotations:androidannotations-api:4.8.0'
testImplementation 'junit:junit:4.13.2'
implementation 'io.appmetrica.analytics:analytics:7.14.0'
}
=======
}

dependencies {
implementation project(':libraries:materialRatingBar')

implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

implementation 'androidx.core:core-ktx:1.17.0'
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'androidx.recyclerview:recyclerview:1.4.0'
implementation 'androidx.preference:preference:1.2.1'
implementation 'androidx.startup:startup-runtime:1.2.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'androidx.annotation:annotation:1.9.1'
kapt 'androidx.annotation:annotation:1.9.1'

implementation 'com.google.android.material:material:1.14.0-alpha07'
implementation 'com.google.code.gson:gson:2.13.2'

implementation 'com.google.dagger:dagger:2.57.2'
kapt 'com.google.dagger:dagger-compiler:2.57.2'
kapt 'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.9.0'

implementation 'io.reactivex.rxjava3:rxjava:3.1.12'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
implementation 'io.reactivex.rxjava3:rxkotlin:3.0.1'
implementation 'com.jakewharton.rxrelay3:rxrelay:3.0.1'

implementation 'com.squareup.okhttp3:okhttp:5.3.2'
implementation 'com.squareup.retrofit2:retrofit:3.0.0'
implementation 'com.squareup.retrofit2:converter-gson:3.0.0'
implementation 'com.squareup.retrofit2:adapter-rxjava3:3.0.0'

implementation 'com.github.solkin:simple-image-loader:v0.9.6'
implementation 'com.github.solkin:disk-lru-cache:v1.7'
implementation 'com.caverock:androidsvg-aar:1.4'
implementation 'com.greysonparrelli.permiso:permiso:0.3.0'
implementation 'com.github.avito-tech:Konveyor:0.42.2'
implementation 'org.androidannotations:androidannotations-api:4.8.0'

debugImplementation 'com.github.chuckerteam.chucker:library:4.2.0'
releaseImplementation 'com.github.chuckerteam.chucker:library-no-op:4.2.0'

implementation 'io.appmetrica.analytics:analytics:7.14.0'

testImplementation 'junit:junit:4.13.2'
>>>>>>> da48609 (- Switched back to custom MaterialRatingBar due to unlimited stars issue in the official RatingBar when using match_parent width, and removed deprecated APIs from the custom implementation.)
}
50 changes: 26 additions & 24 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,28 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.REQUEST_INSTALL_PACKAGES"
tools:remove="android:maxSdkVersion" />
<uses-permission
android:name="android.permission.REQUEST_DELETE_PACKAGES"
tools:remove="android:maxSdkVersion" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
android:name="android.permission.POST_NOTIFICATIONS"
tools:targetApi="33" />

<application
android:name=".Appteka"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_descriptor"
android:enableOnBackInvokedCallback="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
Expand Down Expand Up @@ -53,32 +55,27 @@
android:name=".screen.details.DetailsActivity"
android:exported="true"
android:label="@string/details_activity">
<intent-filter android:autoVerify="true"
tools:targetApi="23">
<intent-filter android:autoVerify="true" tools:targetApi="23">
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="appsend.store" />
<data android:host="appteka.store" />
<data android:pathPrefix="/app" />
</intent-filter>
<intent-filter android:autoVerify="true"
tools:targetApi="23">
<intent-filter android:autoVerify="true" tools:targetApi="23">
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="play.google.com" />
<data android:pathPrefix="/store/apps/details" />
</intent-filter>
</activity>

<activity
android:name=".screen.rate.RateActivity"
android:label="@string/rate_app" />
Expand All @@ -100,13 +97,10 @@
android:exported="true"
android:label="@string/profile"
android:windowSoftInputMode="stateHidden">
<intent-filter android:autoVerify="true"
tools:targetApi="23">
<intent-filter android:autoVerify="true" tools:targetApi="23">
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="appsend.store" />
Expand All @@ -115,6 +109,7 @@
<data android:pathPrefix="/profile" />
</intent-filter>
</activity>

<activity android:name=".screen.reviews.ReviewsActivity" />
<activity
android:name=".screen.home.HomeActivity"
Expand All @@ -128,6 +123,7 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name=".screen.ratings.RatingsActivity" />
<activity android:name=".screen.agreement.AgreementActivity" />
<activity android:name=".screen.about.AboutActivity" />
Expand All @@ -141,14 +137,20 @@
<activity android:name=".screen.unpublish.UnpublishActivity" />
<activity android:name=".screen.uploads.UploadsActivity" />

<service android:name=".download.DownloadService" />
<service
android:name=".download.DownloadService"
android:exported="false"
android:foregroundServiceType="dataSync" />

<service android:name=".upload.UploadService" />
<service
android:name=".upload.UploadService"
android:exported="false"
android:foregroundServiceType="dataSync" />

<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
</application>

</manifest>
</manifest>
13 changes: 9 additions & 4 deletions app/src/main/java/com/tomclaw/appsend/Appteka.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package com.tomclaw.appsend;

import static java.util.Collections.singletonList;
import static com.tomclaw.appsend.util.ThemesKt.initTheme;

import java.util.Arrays;

import android.app.Application;
import android.os.Build;

import androidx.appcompat.app.AppCompatDelegate;
import androidx.preference.PreferenceManager;

import com.tomclaw.appsend.di.AppComponent;
import com.tomclaw.appsend.di.AppModule;
Expand All @@ -30,9 +35,6 @@
import java.io.IOException;
import java.util.concurrent.Executors;

/**
* Created by ivsolkin on 21.03.17.
*/
public class Appteka extends Application {

private static Appteka app;
Expand All @@ -55,6 +57,9 @@ public void onCreate() {
injector.getMigration();

injector.analytics.register();

// Initialize theme from ThemesKt
initTheme(this);
}

public static AppComponent getComponent() {
Expand Down Expand Up @@ -92,4 +97,4 @@ public static Appteka app() {
return app;
}

}
}
Loading
Loading