Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compose design added #2

Merged
merged 3 commits into from
Sep 27, 2023
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
19 changes: 19 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import java.util.Properties
plugins {
alias(libs.plugins.androidApplication)
alias(libs.plugins.kotlinAndroid)
alias(libs.plugins.kotlinSerialization)
}

android {
Expand Down Expand Up @@ -67,6 +68,24 @@ dependencies {
implementation(libs.ui.graphics)
implementation(libs.ui.tooling.preview)
implementation(libs.material3)
//
implementation(libs.viewmodel.compose)
implementation(libs.compose.ui.util)

//retrofit
implementation(libs.retrofit)
//okhttp
implementation(platform(libs.okhttp.bom))
implementation(libs.okhttp)
implementation(libs.okhttp.interceptor)
//kotlin serialization
implementation(libs.kotlin.serialization)
implementation(libs.kotlin.serialization.converter)
//coil
implementation(libs.coil)
implementation(project(mapOf("path" to ":karousel")))

//testing libraries
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.test.ext.junit)
androidTestImplementation(libs.espresso.core)
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET"/>

<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
Expand All @@ -10,6 +12,7 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:name=".FilmoApplication"
android:theme="@style/Theme.Filmo"
tools:targetApi="31">
<activity
Expand Down
13 changes: 13 additions & 0 deletions app/src/main/java/com/pramodbharti/filmo/FilmoApplication.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.pramodbharti.filmo

import android.app.Application
import com.pramodbharti.filmo.data.di.AppContainer
import com.pramodbharti.filmo.data.di.DefaultAppContainer

class FilmoApplication : Application() {
lateinit var container: AppContainer
override fun onCreate() {
super.onCreate()
container = DefaultAppContainer()
}
}
22 changes: 1 addition & 21 deletions app/src/main/java/com/pramodbharti/filmo/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@ import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.core.os.BuildCompat
import com.pramodbharti.filmo.ui.theme.FilmoTheme

class MainActivity : ComponentActivity() {
Expand All @@ -23,25 +19,9 @@ class MainActivity : ComponentActivity() {
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")

}
}
}
}
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hello $name!",
modifier = modifier
)
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
FilmoTheme {
Greeting("Android")
}
}
4 changes: 4 additions & 0 deletions app/src/main/java/com/pramodbharti/filmo/data/Constants.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.pramodbharti.filmo.data

const val BASE_URL = "https://api.themoviedb.org/3/"
const val DISCOVER_MOVIES = "discover/movie"
45 changes: 45 additions & 0 deletions app/src/main/java/com/pramodbharti/filmo/data/di/AppContainer.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.pramodbharti.filmo.data.di

import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import com.pramodbharti.filmo.data.BASE_URL
import com.pramodbharti.filmo.data.network.HeaderInterceptor
import com.pramodbharti.filmo.data.network.MoviesApiService
import com.pramodbharti.filmo.data.repositories.MoviesRepository
import com.pramodbharti.filmo.data.repositories.NetworkMoviesRepository
import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import retrofit2.Converter
import retrofit2.Retrofit

interface AppContainer {
val moviesRepository: MoviesRepository
}

class DefaultAppContainer : AppContainer {

private val client = OkHttpClient
.Builder()
.addInterceptor(HeaderInterceptor())
.build()

private val json = Json {
ignoreUnknownKeys = true
isLenient = true
}

private val retrofit = Retrofit
.Builder()
.client(client)
.baseUrl(BASE_URL)
.addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
.build()

private val moviesApiService by lazy {
retrofit.create(MoviesApiService::class.java)
}
override val moviesRepository: MoviesRepository by lazy {
NetworkMoviesRepository(moviesApiService)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.pramodbharti.filmo.data.network

import com.pramodbharti.filmo.BuildConfig
import okhttp3.Interceptor
import okhttp3.Response

class HeaderInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
return chain
.proceed(
chain
.request()
.newBuilder()
.addHeader("Authorization", "Bearer ${BuildConfig.ACCESS_TOKEN}")
.build()
)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.pramodbharti.filmo.data.network

import com.pramodbharti.filmo.data.DISCOVER_MOVIES
import com.pramodbharti.filmo.data.network.models.MoviesResponse
import retrofit2.http.GET

interface MoviesApiService {
@GET(DISCOVER_MOVIES)
suspend fun getDiscoverMovies(): MoviesResponse
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.pramodbharti.filmo.data.network.models

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class CastResponse(
val id: Int,
val name: String,
val gender: Int,
@SerialName("profile_path")
val profilePath: String,
val character: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.pramodbharti.filmo.data.network.models

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class MovieResponse(
val id: Int,
val adult: Boolean,
@SerialName("backdrop_path")
val backdropPath: String,
@SerialName("original_language")
val originalLanguage: String,
@SerialName("original_title")
val originalTitle: String,
val overview: String,
val popularity: String,
@SerialName("poster_path")
val posterPath: String,
@SerialName("release_date")
val releaseDate: String,
val title: String,
val video: Boolean,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.pramodbharti.filmo.data.network.models

import kotlinx.serialization.Serializable

@Serializable
data class MoviesResponse(
val results:List<MovieResponse>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.pramodbharti.filmo.data.repositories

import com.pramodbharti.filmo.data.network.models.MoviesResponse

interface MoviesRepository {
suspend fun getDiscoverMovies(): MoviesResponse
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.pramodbharti.filmo.data.repositories

import com.pramodbharti.filmo.data.network.MoviesApiService

class NetworkMoviesRepository(private val moviesApiService: MoviesApiService) : MoviesRepository {
override suspend fun getDiscoverMovies() = moviesApiService.getDiscoverMovies()
}
7 changes: 7 additions & 0 deletions app/src/main/java/com/pramodbharti/filmo/ui/Constants.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.pramodbharti.filmo.ui

object Constants {
const val IMAGE_URL_ORIGINAL = "https://image.tmdb.org/t/p/original"
const val IMAGE_URL_500 = "https://image.tmdb.org/t/p/w500"
const val IMAGE_URL_300 = "https://image.tmdb.org/t/p/w300"
}
25 changes: 25 additions & 0 deletions app/src/main/java/com/pramodbharti/filmo/ui/components/Utils.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.pramodbharti.filmo.ui.components

import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.pager.PagerState
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.util.lerp
import kotlin.math.absoluteValue

@OptIn(ExperimentalFoundationApi::class)
fun Modifier.carouselTransition(page: Int, pagerState: PagerState) =
graphicsLayer {
val pageOffset =
((pagerState.currentPage - page) + pagerState.currentPageOffsetFraction).absoluteValue

val transformation =
lerp(
start = 0.7f,
stop = 1f,
fraction = 1f - pageOffset.coerceIn(0f, 1f)
)
alpha = transformation
scaleY = transformation
}

15 changes: 15 additions & 0 deletions app/src/main/java/com/pramodbharti/filmo/ui/models/MovieItem.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.pramodbharti.filmo.ui.models

import androidx.annotation.DrawableRes

data class MovieItem(
val id: Int,
val title: String,
@DrawableRes
val poster: Int,
@DrawableRes
val backdrop: Int,
val releaseDate: String
)


Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.pramodbharti.filmo.ui.screens.details

import androidx.annotation.DrawableRes

data class Cast(
val name: String,
@DrawableRes
val photo: Int
)
Loading