Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
a2a8624
Init Compose HomeScreen
webianks Jan 10, 2026
79bfee3
Compose Init: Bootstrap HomeScreen
webianks Jan 10, 2026
4fc15cf
Compose: MovieScreen + BottomNavigation
webianks Jan 11, 2026
aaf903f
Compose: Architecture Patterns + TvShows
webianks Jan 11, 2026
766ba5e
Compose: Reusability + Basic Search Impl.
webianks Jan 12, 2026
2e1565e
Compose: All other screens in compose + Gradle Upgrade.
webianks Feb 12, 2026
6273af8
Compose: Refinement + Separate Component Files
webianks Feb 13, 2026
a9bde98
Compose: Refactor packages
webianks Feb 13, 2026
a64019f
Compose: Refactor and improve UI/UX
webianks Mar 16, 2026
4eeb150
Compose: Refactor and implement pagination in movies and shows list
webianks Apr 4, 2026
4e432a9
Compose: Fix SearchPreview
webianks Apr 5, 2026
78e1bbe
Compose: Design widget using Glance API
webianks Apr 5, 2026
2bc76d7
Migrate to Android 17
webianks Aug 2, 2026
529ae41
Compose: Add CategorySelector
webianks Aug 2, 2026
0c83c94
Compose: Add Discover, region-aware browsing, and People tab
webianks Aug 18, 2026
f80b710
Compose: Add details screen content-richness batch
webianks Aug 18, 2026
938aab2
Compose: Add TMDB list management, account sync, and logout fixes
webianks Aug 18, 2026
a8eac92
Compose: Add mark-watched widget action and To-Rate widget
webianks Aug 21, 2026
6922e94
Compose: Add long-press quick actions and watchlist bounce animation
webianks Aug 21, 2026
d59ca39
Compose: Replace legacy AppIntro onboarding with an immersive hero an…
webianks Aug 21, 2026
19fd730
Gate Add to List / My Lists behind login, in-place
webianks Aug 21, 2026
da2f323
Fix gallery full-screen, app shortcut routing, and login spinner bugs
webianks Aug 21, 2026
054b63f
Compose: Add combined filmography, external links, and error handling…
webianks Aug 21, 2026
a5ec07d
Improve search: error handling, recent searches, and result fixes
webianks Aug 21, 2026
05ab383
Add clear network error messages and details-screen polish
webianks Aug 22, 2026
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
99 changes: 74 additions & 25 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
plugins {
id 'com.google.devtools.ksp'
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-parcelize'
id 'com.google.dagger.hilt.android'
id 'com.google.gms.google-services'
id 'com.google.devtools.ksp'
id 'org.jetbrains.kotlin.plugin.compose'
id 'com.google.firebase.crashlytics'
}

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'kotlin-parcelize'

repositories {
google()
mavenCentral()
Expand All @@ -16,9 +17,9 @@ repositories {
android {
defaultConfig {
applicationId "tech.salroid.filmy"
compileSdk 36
compileSdk = 37
minSdk 24
targetSdk 36
targetSdk 37
versionCode 24
versionName "3.1.0"
multiDexEnabled true
Expand All @@ -34,6 +35,15 @@ android {
buildConfigField("String", "OMDB_API_KEY", "\"" + getOMDBApiKey() + "\"")
buildConfigField("String", "YOUTUBE_API_KEY", "\"" + getYoutubeApiKey() + "\"")
}

releaseUnminified {
initWith release
minifyEnabled false
shrinkResources false
signingConfig signingConfigs.debug
matchingFallbacks = ['release']
}

debug {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField("String", "TMDB_API_KEY", "\"" + getTMDBApiKey() + "\"")
Expand All @@ -50,8 +60,9 @@ android {
}

buildFeatures {
viewBinding = true
buildConfig = true
viewBinding true
buildConfig true
compose true
}
namespace 'tech.salroid.filmy'
}
Expand Down Expand Up @@ -85,57 +96,95 @@ dependencies {
implementation 'com.google.android.material:material:1.13.0'
implementation "androidx.constraintlayout:constraintlayout:2.2.1"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2'
implementation 'androidx.compose.ui:ui-text-google-fonts:1.10.6'

implementation "androidx.core:core-ktx:1.17.0"
implementation "androidx.activity:activity-ktx:1.11.0"

def paging_version = "3.3.5"
def paging_version = "3.4.2"
implementation "androidx.paging:paging-runtime-ktx:$paging_version"
implementation "androidx.paging:paging-compose:$paging_version"

implementation 'androidx.browser:browser:1.9.0'
implementation "androidx.work:work-runtime:2.10.5"
implementation 'androidx.browser:browser:1.10.0'
implementation "androidx.work:work-runtime:2.11.2"
implementation 'androidx.palette:palette-ktx:1.0.0'
implementation "androidx.concurrent:concurrent-futures-ktx:1.3.0"
implementation 'com.github.bumptech.glide:glide:5.0.5'
ksp 'com.github.bumptech.glide:ksp:5.0.5'

implementation 'com.github.paolorotolo:appintro:4.1.0'
implementation "androidx.preference:preference-ktx:1.2.1"
implementation "androidx.fragment:fragment-ktx:1.8.9"
implementation "androidx.core:core-splashscreen:1.0.1"
implementation "androidx.core:core-splashscreen:1.2.0"
implementation 'com.squareup.retrofit2:retrofit:3.0.0'
implementation 'com.squareup.retrofit2:converter-gson:3.0.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation 'com.squareup.okhttp3:logging-interceptor:5.3.2'
implementation 'com.squareup.okhttp3:okhttp:5.3.2'
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
implementation 'com.facebook.shimmer:shimmer:0.5.0'

def lottieVersion = "3.4.0"
implementation "com.airbnb.android:lottie:$lottieVersion"
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.2.0"

def lifecycle_version = "2.9.4"
def lifecycle_version = "2.10.0"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"

def roomVersion = "2.8.1"
def roomVersion = "2.8.4"
implementation "androidx.room:room-runtime:$roomVersion"
implementation "androidx.room:room-ktx:$roomVersion"
implementation "androidx.room:room-paging:$roomVersion"
ksp "androidx.room:room-compiler:$roomVersion"

// Dagger Hilt
implementation "com.google.dagger:hilt-android:2.60.1"
ksp "com.google.dagger:hilt-compiler:2.60.1"
def daggerHiltVersion = "2.60.1"
implementation "com.google.dagger:hilt-android:$daggerHiltVersion"
ksp "com.google.dagger:hilt-compiler:$daggerHiltVersion"

// Navigation
def nav_version = "2.9.5"
def nav_version = "2.9.7"
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

implementation platform('com.google.firebase:firebase-bom:34.3.0')
def lottieVersion = "6.7.1"
implementation "com.airbnb.android:lottie:$lottieVersion"

// Compose
implementation "com.google.android.material:compose-theme-adapter:1.2.1"

// Firebase
implementation platform('com.google.firebase:firebase-bom:34.11.0')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-crashlytics'

// Compose
def composeBom = platform('androidx.compose:compose-bom:2026.03.01')
implementation composeBom
androidTestImplementation composeBom
implementation("androidx.compose.material3:material3:1.5.0-alpha16")
implementation("androidx.compose.material:material-icons-core")
implementation("androidx.compose.material:material-icons-extended")
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose'
implementation 'androidx.activity:activity-compose'
implementation 'androidx.compose.material3.adaptive:adaptive-android'
implementation("androidx.hilt:hilt-navigation-compose:1.3.0")
implementation("io.coil-kt.coil3:coil-compose:3.4.0")
implementation("io.coil-kt.coil3:coil-network-okhttp:3.4.0")
implementation 'androidx.compose.ui:ui-tooling-preview'
debugImplementation 'androidx.compose.ui:ui-tooling'
releaseUnminifiedImplementation 'androidx.compose.ui:ui-tooling'

// Glance
implementation "androidx.glance:glance-appwidget:1.1.1"
implementation "androidx.glance:glance-material3:1.1.1"

//debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'

testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'junit:junit:4.13.2'
androidTestImplementation "androidx.test.espresso:espresso-core:3.7.0"
androidTestImplementation "androidx.test:runner:1.7.0"
androidTestImplementation "androidx.test:rules:1.7.0"
androidTestImplementation 'androidx.test:core-ktx:1.7.0'

// Compose
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test")
testImplementation("app.cash.turbine:turbine")
}
22 changes: 16 additions & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@
<application
android:name=".FilmyApplication"
android:allowBackup="true"
android:enableOnBackInvokedCallback="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:resizeableActivity="true"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:targetApi="n">
>

<activity
android:name=".ui.home.MainActivity"
android:name=".ui.home.MainActivityCompose"
android:exported="true"
android:theme="@style/Theme.App.Starting">

Expand Down Expand Up @@ -58,11 +58,10 @@
<activity android:name=".ui.cast_crew.AllCastCrewActivity" />
<activity android:name=".ui.settings.LicenseActivity" />
<activity android:name=".ui.settings.AboutActivity" />
<activity android:name=".ui.intro.FilmyIntroActivity" />

<receiver
android:name=".ui.widget.FilmyWidgetProvider"
android:exported="false">
android:name=".ui.widget.WatchlistWidgetReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
Expand All @@ -71,5 +70,16 @@
android:resource="@xml/filmy_widget_info" />
</receiver>

<receiver
android:name=".ui.widget.ToRateWidgetReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/filmy_to_rate_widget_info" />
</receiver>

</application>
</manifest>
Loading