Skip to content

Kotlinized the entire app for Kotlin beginners #2

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

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
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
54 changes: 41 additions & 13 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
compileSdkVersion 27
buildToolsVersion "27.0.3"

defaultConfig {
applicationId "io.caster.simplemvp"
minSdkVersion 16
targetSdkVersion 23
targetSdkVersion 27
versionCode 1
versionName "1.0"
}
Expand All @@ -20,16 +22,42 @@ android {
}
}

kotlin {
experimental {
coroutines "enable"
}
}

androidExtensions {
experimental true
}

kapt {
generateStubs true
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
testCompile "org.mockito:mockito-core:1.10.19"
implementation fileTree(dir: 'libs', include: ['*.jar'])

// Test dependencies
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.16.0'

// Kotlin dependencies
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlinVer"
implementation "org.jetbrains.anko:anko:$ankoVer"
implementation "org.jetbrains.anko:anko-design:$ankoVer"

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
// Support Library dependencies
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.android.support:design:27.1.0'
implementation 'com.android.support:support-v4:27.1.0'

compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.google.dagger:dagger:2.0.2'
apt 'com.google.dagger:dagger-compiler:2.0.2'
provided 'javax.annotation:jsr250-api:1.0'
// Dagger 2 dependencies
implementation 'com.google.dagger:dagger:2.15'
implementation 'com.google.dagger:dagger-android:2.15'
implementation 'com.google.dagger:dagger-android-support:2.15'
kapt 'com.google.dagger:dagger-compiler:2.15'
kapt 'com.google.dagger:dagger-android-processor:2.15'
compileOnly 'javax.annotation:jsr250-api:1.0'
}
13 changes: 0 additions & 13 deletions app/src/androidTest/java/io/caster/simplemvp/ApplicationTest.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package io.caster.simplemvp

import android.app.Application
import android.test.ApplicationTestCase

/**
* [Testing Fundamentals](http://d.android.com/tools/testing/testing_android.html)
*/
class ApplicationTest : ApplicationTestCase<Application>(Application::class.java)
12 changes: 0 additions & 12 deletions app/src/main/java/io/caster/simplemvp/AppComponent.java

This file was deleted.

11 changes: 11 additions & 0 deletions app/src/main/java/io/caster/simplemvp/AppComponent.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package io.caster.simplemvp

import dagger.Component
import io.caster.simplemvp.view.fragment.UserFragment
import javax.inject.Singleton

@Singleton
@Component(modules = [AppModule::class])
interface AppComponent {
fun inject(target: UserFragment)
}
23 changes: 0 additions & 23 deletions app/src/main/java/io/caster/simplemvp/AppModule.java

This file was deleted.

19 changes: 19 additions & 0 deletions app/src/main/java/io/caster/simplemvp/AppModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package io.caster.simplemvp

import dagger.Module
import dagger.Provides
import io.caster.simplemvp.presentation.UserPresenter
import io.caster.simplemvp.presentation.UserPresenterImpl
import io.caster.simplemvp.repository.InMemoryUserRepositoryImpl
import io.caster.simplemvp.repository.UserRepository
import javax.inject.Singleton

@Module
class AppModule {
@Provides
@Singleton
fun provideUserRepository(): UserRepository = InMemoryUserRepositoryImpl()

@Provides
fun provideUserPresenter(userRepository: UserRepository): UserPresenter = UserPresenterImpl(userRepository)
}
21 changes: 0 additions & 21 deletions app/src/main/java/io/caster/simplemvp/MvpApplication.java

This file was deleted.

14 changes: 14 additions & 0 deletions app/src/main/java/io/caster/simplemvp/MvpApplication.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.caster.simplemvp

import android.app.Application

class MvpApplication : Application() {

var component: AppComponent? = null

override fun onCreate() {
super.onCreate()

component = DaggerAppComponent.builder().appModule(AppModule()).build()
}
}
32 changes: 0 additions & 32 deletions app/src/main/java/io/caster/simplemvp/model/User.java

This file was deleted.

7 changes: 7 additions & 0 deletions app/src/main/java/io/caster/simplemvp/model/User.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.caster.simplemvp.model

data class User (
var id: Int = 0,
var firstName: String? = null,
var lastName: String? = null
)

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package io.caster.simplemvp.presentation

import io.caster.simplemvp.view.UserView

interface UserPresenter {
fun loadUserDetails()

fun setView(view: UserView)

fun saveUser()
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package io.caster.simplemvp.presentation

import io.caster.simplemvp.model.User
import io.caster.simplemvp.repository.UserRepository
import io.caster.simplemvp.view.UserView

class UserPresenterImpl(val userRepository: UserRepository) : UserPresenter {

private var view: UserView? = null
private var u: User? = null

override fun loadUserDetails() {
val userId = view!!.userId
u = userRepository.getUser(userId)
if (u == null) {
view!!.showUserNotFoundMessage()
} else {
view!!.displayFirstName(u!!.firstName!!)
view!!.displayLastName(u!!.lastName!!)
}
}

override fun setView(view: UserView) {
this.view = view
loadUserDetails()
}

override fun saveUser() {
if (u != null) {
if (view!!.firstName.trim { it <= ' ' } == "" || view!!.lastName.trim { it <= ' ' } == "") {
view!!.showUserNameIsRequired()
} else {
u!!.firstName = view!!.firstName
u!!.lastName = view!!.lastName
userRepository.save(u!!)
view!!.showUserSavedMessage()
}

}
}
}
Loading