Skip to content
Open
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
35 changes: 35 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Default ignored files
/shelf/
/workspace.xml
# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Log/OS Files
*.log

# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.apk
output.json

# IntelliJ
*.iml
.idea/

# Keystore files
*.jks
*.keystore

# Google Services (e.g. APIs or Firebase)
google-services.json

# Android Profiling
*.hprof
/.gradle/
/.idea/
Binary file not shown.
Empty file.
Binary file not shown.
Binary file not shown.
Binary file added .gradle/7.0.2/fileChanges/last-build.bin
Binary file not shown.
Binary file added .gradle/7.0.2/fileHashes/fileHashes.bin
Binary file not shown.
Binary file added .gradle/7.0.2/fileHashes/fileHashes.lock
Binary file not shown.
Binary file added .gradle/7.0.2/fileHashes/resourceHashesCache.bin
Binary file not shown.
Empty file added .gradle/7.0.2/gc.properties
Empty file.
Binary file added .gradle/7.0.2/javaCompile/classAnalysis.bin
Binary file not shown.
Binary file added .gradle/7.0.2/javaCompile/jarAnalysis.bin
Binary file not shown.
Binary file added .gradle/7.0.2/javaCompile/javaCompile.lock
Binary file not shown.
Binary file added .gradle/7.0.2/javaCompile/taskHistory.bin
Binary file not shown.
Binary file added .gradle/buildOutputCleanup/buildOutputCleanup.lock
Binary file not shown.
2 changes: 2 additions & 0 deletions .gradle/buildOutputCleanup/cache.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#Mon Dec 20 22:03:19 IRST 2021
gradle.version=7.0.2
Binary file added .gradle/buildOutputCleanup/outputFiles.bin
Binary file not shown.
Binary file added .gradle/checksums/checksums.lock
Binary file not shown.
Binary file added .gradle/checksums/md5-checksums.bin
Binary file not shown.
Binary file added .gradle/checksums/sha1-checksums.bin
Binary file not shown.
Empty file added .gradle/vcs-1/gc.properties
Empty file.
52 changes: 14 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,20 @@
# Work sample - Application developer
# Daresay Movie App

## Assignment

- Build an awesome movie app that shows popular and high rated movies.
- Code it for the platform (Android, iOS, web) you applied for or the one you prefer.
![1](https://user-images.githubusercontent.com/16135942/147400151-eb54c4b0-bfbf-4856-80e0-4e0677223c96.jpg)
![2](https://user-images.githubusercontent.com/16135942/147400152-d1195ff3-2c18-4228-846e-7c07dacb3b37.jpg)
![3](https://user-images.githubusercontent.com/16135942/147400153-662858f6-4844-4caa-b081-0014657d6156.jpg)
![4](https://user-images.githubusercontent.com/16135942/147400154-51958097-2bf9-45d1-9550-12a080b9b67f.jpg)
![5](https://user-images.githubusercontent.com/16135942/147400155-56e7effc-5a9c-4d15-b19b-c2bc9dfcfb85.jpg)
![6](https://user-images.githubusercontent.com/16135942/147400156-5d72d780-6947-4b73-bf8c-12ccbc79ce5e.jpg)
![7](https://user-images.githubusercontent.com/16135942/147400158-2c593eb7-6841-4d77-ab13-84a0d1b3e134.jpg)

## Requirements

- Use an open https://developers.themoviedb.org/open source API. Please read the API [Authentication section](https://developers.themoviedb.org/3/getting-started/authentication) to get started.
- Discover most popular and highly rated movies.
- Display the movies with creative look and feel of an app to meet design guidelines for your platform (Material Design etc.).
- Launch a detail screen whenever a particular movie is selected.
## What did I Do

## Examples of bonus features

- Allow user to save a favorite movie for offline access.
- Allow user to read movie reviews.

## We expect you to

- Write clean code.
- Create a responsive design.
- Handle error cases.
- Use the latest libraries and technologies.
- Tested code is a big plus.

### User experience

The features of the app might be few, but we expect you to deliver a solution with a high user experience. Imagine this application to be used by real users, with real needs. Make it interesting, fun and intuitive to use. And of course you are allowed to extend your applications functionality.

### Code

We expect that the code is of high quality and under source control. Expect the solution to be continuously worked on by other developers and should therefore be easy to understand, adjust and extend. True beauty starts on the inside!

## Delivery

Fork the repository, code in your fork and make a pull request when done. A nice commit history describing your work is preferred over squashing it into one commit.
Also send us an e-mail to let us know!

### Good luck!

---
- Movie App using MVVM Architecture
- Main Fragment for showing four Categories of Movies
- DetailsFragment for showing movie Details like Director, budget, list of Cast and Posters and even Reviews!
- Profile fragment fow showing Users most favorite Movies depends on his Tastes.
- Fully Internet base Application.

1 change: 1 addition & 0 deletions app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
262 changes: 262 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,262 @@
plugins {
id 'com.android.application'
id 'dagger.hilt.android.plugin'
id 'kotlin-android'
id 'kotlin-kapt'
id 'kotlin-parcelize'
id("io.gitlab.arturbosch.detekt") version "1.18.1"
id("org.jlleitschuh.gradle.ktlint") version "10.2.0"
}

android {
compileSdk 31
buildToolsVersion '30.0.3'

defaultConfig {
applicationId "com.arashafsharpour.daresaymovie"
minSdk 21
targetSdk 31
versionCode 1
versionName "1.0"
multiDexEnabled = true
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

javaCompileOptions {
annotationProcessorOptions {
arguments += ["room.schemaLocation" : "$projectDir/schemas".toString()]
}
}
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}


lintOptions {
disable 'TypographyFractions','TypographyQuotes'
enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
checkOnly 'NewApi', 'InlinedApi'
quiet true
abortOnError true
ignoreWarnings true
}

ktlint {
debug.set(false)
version.set("10.2.0")
verbose.set(true)
android.set(true)
outputToConsole.set(true)
ignoreFailures.set(false)
enableExperimentalRules.set(true)
filter {
exclude("**/generated/**")
include("**/kotlin/**")
}
}

detekt {
config = rootProject.files("config/detekt/detekt.yml")
reports {
html {
enabled = true
destination = file("build/reports/detekt.html")
}
}
}




kotlinOptions {
jvmTarget = java_version.toString()
useIR = true
}
buildFeatures {
dataBinding true
}

packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
exclude("META-INF/*.kotlin_module")
}

kotlinOptions {
jvmTarget = '1.8'
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions.freeCompilerArgs += ["-Xopt-in=kotlin.time.ExperimentalTime"]
kotlinOptions.freeCompilerArgs += ["-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi"]
}
}

dependencies {

implementation 'androidx.test.espresso:espresso-idling-resource:3.4.0'
def room_version = "2.3.0"

implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
implementation "androidx.fragment:fragment-ktx:1.4.0"

implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
implementation 'androidx.core:core-ktx:1.7.0'

// Room and Architectural Components
implementation "androidx.room:room-ktx:$room_version"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
implementation "androidx.legacy:legacy-support-v4:1.0.0"
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.4.0"
testImplementation "androidx.arch.core:core-testing:2.1.0"

// binding
implementation ("com.github.skydoves:bindables:1.0.9") {
exclude group: "com.google.android.material"
}

//Hilt
implementation "com.google.dagger:hilt-android:$hilt_version"
kapt "com.google.dagger:hilt-compiler:$hilt_version"

implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
kapt "androidx.hilt:hilt-compiler:1.0.0"

implementation 'androidx.annotation:annotation:1.3.0'
implementation 'androidx.multidex:multidex:2.0.1'

// Architectural Components
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'


//Network
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation "com.squareup.okhttp3:logging-interceptor:4.9.0"
testImplementation "com.squareup.okhttp3:mockwebserver:4.9.0"
api 'com.fasterxml.jackson.core:jackson-core:2.12.3'
api 'com.squareup.retrofit2:converter-jackson:2.9.0'
api "com.fasterxml.jackson.module:jackson-module-kotlin:2.12.3"

testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

// Coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1'

// Coroutine Lifecycle Scopes
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.0"

// Navigation Components
implementation "androidx.navigation:navigation-fragment-ktx:2.3.5"
implementation "androidx.navigation:navigation-ui-ktx:2.3.5"

// Glide
implementation 'com.github.bumptech.glide:glide:4.12.0'
kapt 'com.github.bumptech.glide:compiler:4.12.0'
implementation 'jp.wasabeef:glide-transformations:4.3.0'

// Dagger Core
implementation "com.google.dagger:dagger:2.40.1"
kapt "com.google.dagger:dagger-compiler:2.40.1"

// // Dagger Android
api 'com.google.dagger:dagger-android:2.38.1'
api 'com.google.dagger:dagger-android-support:2.38.1'
kapt 'com.google.dagger:dagger-android-processor:2.38.1'

// Activity KTX for ViewModels()
implementation "androidx.activity:activity-ktx:1.4.0"


// For instrumentation tests
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.38.1'
kaptAndroidTest 'com.google.dagger:hilt-compiler:2.40.1'

// For local unit tests
testImplementation "junit:junit:4.13.2"
testImplementation "androidx.test:core:1.4.0"
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
testImplementation "org.mockito:mockito-inline:3.12.4"
testImplementation "app.cash.turbine:turbine:0.6.1"
testImplementation "org.robolectric:robolectric:4.6.1"
androidTestImplementation "com.google.truth:truth:1.1.3"
androidTestImplementation "androidx.test.ext:junit:1.1.3"
androidTestImplementation "com.android.support.test:runner:1.0.2"
androidTestImplementation "androidx.test.espresso:espresso-core:3.4.0"

// Timber
implementation 'com.jakewharton.timber:timber:5.0.0'

//Transformation UI
implementation "com.github.skydoves:transformationlayout:1.1.0"

// gradation
implementation "com.github.skydoves:rainbow:1.0.3"

implementation 'android.arch.lifecycle:extensions:1.1.1'

//Jackson
implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.12.3"


// Import the BoM for the Firebase platform
implementation platform('com.google.firebase:firebase-bom:28.4.1')

// Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation 'com.google.firebase:firebase-messaging-ktx:23.0.0'
implementation 'com.google.firebase:firebase-analytics-ktx:20.0.0'

//SharedPreferences
implementation "androidx.preference:preference-ktx:1.1.1"

//Window
implementation "androidx.window:window:1.0.0-beta04"

//Calligraphy
implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'

//Blurry
implementation 'jp.wasabeef:blurry:4.0.0'

//Lottie
implementation 'com.airbnb.android:lottie:4.2.1'

//Paging
implementation "androidx.paging:paging-runtime:3.1.0"

//Circle Image View
implementation 'de.hdodenhof:circleimageview:3.1.0'
}

kapt {
correctErrorTypes true
}
21 changes: 21 additions & 0 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
Loading