Skip to content

Commit

Permalink
Merge pull request #16 from binaryshrey/feat/v1.3
Browse files Browse the repository at this point in the history
Feat/v1.3
  • Loading branch information
binaryshrey committed Aug 31, 2023
2 parents 72690d0 + 151b1c1 commit 20d005c
Show file tree
Hide file tree
Showing 35 changed files with 475 additions and 57 deletions.
53 changes: 44 additions & 9 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ plugins {
id 'kotlin-android'
id 'org.jetbrains.kotlin.kapt'
id 'com.google.gms.google-services'
id 'kotlin-kapt'
id 'com.google.dagger.hilt.android'

}

Expand All @@ -16,7 +18,7 @@ android {
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "dev.shreyansh.dice.HiltTestRunner"
}

buildTypes {
Expand All @@ -37,6 +39,10 @@ android {
}
}

kapt {
correctErrorTypes true
}

dependencies {

implementation 'androidx.core:core-ktx:1.7.0'
Expand All @@ -49,22 +55,17 @@ dependencies {
implementation 'androidx.preference:preference-ktx:1.2.0'
implementation 'androidx.preference:preference:1.2.0'

testImplementation 'junit:junit:4.13.2'

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

implementation 'androidx.legacy:legacy-support-v4:1.0.0'

implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'

implementation 'com.jakewharton.timber:timber:5.0.1'
implementation 'androidx.core:core-splashscreen:1.0.0'
implementation "androidx.datastore:datastore-preferences:1.0.0"
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1"
implementation("androidx.datastore:datastore-preferences-core:1.0.0")

//firebase
implementation platform('com.google.firebase:firebase-bom:31.1.1')

Expand All @@ -74,4 +75,38 @@ dependencies {

//lottie
implementation "com.airbnb.android:lottie:3.4.0"

//hilt
implementation "com.google.dagger:hilt-android:2.44"
kapt "com.google.dagger:hilt-compiler:2.44"

//timber
implementation 'com.jakewharton.timber:timber:5.0.1'


// Local Unit Tests
implementation "androidx.test:core:1.5.0"
implementation 'androidx.test.ext:junit-ktx:1.1.5'


testImplementation "junit:junit:4.13.2"
testImplementation "androidx.arch.core:core-testing:2.2.0"
testImplementation "org.robolectric:robolectric:4.3.1"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4"
testImplementation "com.google.truth:truth:1.1.4"

// Instrumented Unit Tests
androidTestImplementation "junit:junit:4.13.2"
androidTestImplementation "androidx.arch.core:core-testing:2.2.0"
//androidTestImplementation "org.robolectric:robolectric:4.3.1"
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4"
androidTestImplementation "com.google.truth:truth:1.1.4"
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

androidTestImplementation "org.mockito:mockito-core:2.25.0"
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.38.1'
kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.38.1'

debugImplementation "androidx.fragment:fragment-testing:1.6.1"
}
49 changes: 49 additions & 0 deletions app/src/androidTest/java/dev/shreyansh/dice/HiltExt.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package dev.shreyansh.dice

import android.content.ComponentName
import android.content.Intent
import android.os.Bundle
import androidx.annotation.StyleRes
import androidx.core.util.Preconditions
import androidx.fragment.app.Fragment
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider

/**
* launchFragmentInContainer from the androidx.fragment:fragment-testing library
* is NOT possible to use right now as it uses a hardcoded Activity under the hood
* (i.e. [EmptyFragmentActivity]) which is not annotated with @AndroidEntryPoint.
*
* As a workaround, use this function that is equivalent. It requires you to add
* [HiltTestActivity] in the debug folder and include it in the debug AndroidManifest.xml file
* as can be found in this project.
*/
inline fun <reified T : Fragment> launchFragmentInHiltContainer(
fragmentArgs: Bundle? = null,
@StyleRes themeResId: Int = R.style.FragmentScenarioEmptyFragmentActivityTheme,
crossinline action: Fragment.() -> Unit = {}
) {
val startActivityIntent = Intent.makeMainActivity(
ComponentName(
ApplicationProvider.getApplicationContext(),
HiltTestActivity::class.java
)
).putExtra(
"androidx.fragment.app.testing.FragmentScenario.EmptyFragmentActivity.THEME_EXTRAS_BUNDLE_KEY",
themeResId
)

ActivityScenario.launch<HiltTestActivity>(startActivityIntent).onActivity { activity ->
val fragment: Fragment = activity.supportFragmentManager.fragmentFactory.instantiate(
Preconditions.checkNotNull(T::class.java.classLoader),
T::class.java.name
)
fragment.arguments = fragmentArgs
activity.supportFragmentManager
.beginTransaction()
.add(android.R.id.content, fragment, "")
.commitNow()

fragment.action()
}
}
17 changes: 17 additions & 0 deletions app/src/androidTest/java/dev/shreyansh/dice/HiltTestRunner.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package dev.shreyansh.dice

import android.app.Application
import android.content.Context
import androidx.test.runner.AndroidJUnitRunner
import dagger.hilt.android.testing.HiltTestApplication

class HiltTestRunner : AndroidJUnitRunner() {

override fun newApplication(
cl: ClassLoader?,
className: String?,
context: Context?
): Application {
return super.newApplication(cl, HiltTestApplication::class.java.name, context)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package dev.shreyansh.dice.ui.intro

import android.os.Bundle
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.fragment.app.testing.FragmentScenario
import androidx.fragment.app.testing.launchFragmentInContainer
import androidx.lifecycle.Lifecycle
import androidx.test.espresso.Espresso
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SmallTest
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Assert.*
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import dev.shreyansh.dice.R
import dev.shreyansh.dice.launchFragmentInHiltContainer
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.junit.Rule

@ExperimentalCoroutinesApi
@MediumTest
@HiltAndroidTest
@RunWith(AndroidJUnit4::class)
class IntroFragmentTest{

@get:Rule
var hiltRule = HiltAndroidRule(this)

@get:Rule
var instantTaskExecutorRule = InstantTaskExecutorRule()

@Before
fun setup() {
hiltRule.inject()
}


@Test
fun testFrag(){
launchFragmentInHiltContainer<IntroFragment>(Bundle(),R.style.Theme_AppCompat)
Espresso.onView(withId(R.id.appname_textView))
.check(ViewAssertions.matches(ViewMatchers.withText("DICE")))


}
}
12 changes: 12 additions & 0 deletions app/src/debug/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="dev.shreyansh.dice">

<application>
<activity
android:name=".HiltTestActivity"
android:exported="false"
android:theme="@style/Theme.Dice" />
</application>

</manifest>
7 changes: 7 additions & 0 deletions app/src/debug/java/dev/shreyansh/dice/HiltTestActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package dev.shreyansh.dice

import androidx.appcompat.app.AppCompatActivity
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class HiltTestActivity : AppCompatActivity()
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

<uses-permission android:name="android.permission.VIBRATE" />
<application
android:name=".DiceApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/dev/shreyansh/dice/DiceApplication.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package dev.shreyansh.dice

import android.app.Application
import dagger.hilt.android.HiltAndroidApp
import timber.log.Timber

@HiltAndroidApp
class DiceApplication : Application() {

override fun onCreate() {
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/dev/shreyansh/dice/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import androidx.databinding.DataBindingUtil
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI
import dagger.hilt.android.AndroidEntryPoint
import dev.shreyansh.dice.databinding.ActivityMainBinding

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

private lateinit var binding : ActivityMainBinding
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/dev/shreyansh/dice/SettingsFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import android.os.Bundle
import androidx.appcompat.app.AppCompatDelegate
import androidx.fragment.app.activityViewModels
import androidx.preference.PreferenceFragmentCompat
import dagger.hilt.android.AndroidEntryPoint
import dev.shreyansh.dice.viewModel.DiceViewModel

@AndroidEntryPoint
class SettingsFragment : PreferenceFragmentCompat() , SharedPreferences.OnSharedPreferenceChangeListener {

private val viewModel: DiceViewModel by activityViewModels()
Expand Down
22 changes: 22 additions & 0 deletions app/src/main/java/dev/shreyansh/dice/di/AppModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package dev.shreyansh.dice.di

import android.content.Context
import android.net.ConnectivityManager
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton


@Module
@InstallIn(SingletonComponent::class)
class AppModule {

@Singleton
@Provides
fun provideNetworkConnDeps(@ApplicationContext context: Context) : ConnectivityManager{
return context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ import android.view.ViewGroup
import android.widget.Toast
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.activityViewModels
import dagger.hilt.android.AndroidEntryPoint
import dev.shreyansh.dice.R
import dev.shreyansh.dice.databinding.FragmentAboutBinding
import dev.shreyansh.dice.viewModel.DiceViewModel


@AndroidEntryPoint
class AboutFragment : Fragment() {

private lateinit var binding : FragmentAboutBinding
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ import androidx.preference.PreferenceManager
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.firebase.auth.FirebaseAuth
import dagger.hilt.android.AndroidEntryPoint
import dev.shreyansh.dice.R
import dev.shreyansh.dice.databinding.FragmentBoardFourBinding
import dev.shreyansh.dice.viewModel.DiceViewModel


@AndroidEntryPoint
class BoardFourFragment : Fragment() {

private lateinit var binding : FragmentBoardFourBinding
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@ import androidx.preference.PreferenceManager
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.firebase.auth.FirebaseAuth
import dagger.hilt.android.AndroidEntryPoint
import dev.shreyansh.dice.R
import dev.shreyansh.dice.databinding.FragmentBoardOneBinding
import dev.shreyansh.dice.viewModel.DiceViewModel


@AndroidEntryPoint
class BoardOneFragment : Fragment() {

private lateinit var binding: FragmentBoardOneBinding
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@ import androidx.preference.PreferenceManager
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.firebase.auth.FirebaseAuth
import dagger.hilt.android.AndroidEntryPoint
import dev.shreyansh.dice.R
import dev.shreyansh.dice.databinding.FragmentBoardThreeBinding
import dev.shreyansh.dice.viewModel.DiceViewModel


@AndroidEntryPoint
class BoardThreeFragment : Fragment() {

private lateinit var binding : FragmentBoardThreeBinding
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@ import androidx.preference.PreferenceManager
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.firebase.auth.FirebaseAuth
import dagger.hilt.android.AndroidEntryPoint
import dev.shreyansh.dice.R
import dev.shreyansh.dice.databinding.FragmentBoardTwoBinding
import dev.shreyansh.dice.viewModel.DiceViewModel


@AndroidEntryPoint
class BoardTwoFragment : Fragment() {

private lateinit var binding: FragmentBoardTwoBinding
Expand Down
Loading

0 comments on commit 20d005c

Please sign in to comment.