mirror of
https://github.com/melihaksoy/Android-Kotlin-Modulerized-CleanArchitecture.git
synced 2026-03-17 23:14:07 +01:00
Single activity approach (#30)
* CircleCI config fixes * Implicit deeplinking via navController navigate * Removed jacoco.exec files. Closes # 32
This commit is contained in:
BIN
core/jacoco.exec
BIN
core/jacoco.exec
Binary file not shown.
@@ -1,5 +1,6 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.melih.core">
|
||||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.melih.core">
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
</manifest>
|
||||
|
||||
@@ -1,16 +1,12 @@
|
||||
package com.melih.core.actions
|
||||
|
||||
import android.content.Intent
|
||||
|
||||
const val EXTRA_LAUNCH_ID = "extras:detail:launchid"
|
||||
import android.net.Uri
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
import com.melih.core.R
|
||||
|
||||
/**
|
||||
* Navigation actions for navigation between feature activities
|
||||
*/
|
||||
object Actions {
|
||||
|
||||
fun openDetailFor(id: Long) =
|
||||
Intent("action.dashboard.open")
|
||||
.putExtra(EXTRA_LAUNCH_ID, id)
|
||||
|
||||
}
|
||||
fun Fragment.openDetail(id: Long) =
|
||||
NavHostFragment.findNavController(this).navigate(Uri.parse(getString(R.string.detail_uri, id)))
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
package com.melih.core.base.lifecycle
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.annotation.IdRes
|
||||
import androidx.annotation.LayoutRes
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.databinding.ViewDataBinding
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
import androidx.navigation.ui.NavigationUI
|
||||
import dagger.android.support.DaggerAppCompatActivity
|
||||
|
||||
const val NAV_HOST_FRAGMENT_TAG = "nav_host_fragment_tag"
|
||||
|
||||
/**
|
||||
* Base class of all Activity classes
|
||||
*/
|
||||
abstract class BaseActivity<T : ViewDataBinding> : DaggerAppCompatActivity() {
|
||||
|
||||
protected lateinit var binding: T
|
||||
protected lateinit var navHostFragment: NavHostFragment
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
binding = DataBindingUtil.setContentView(this, getLayoutId())
|
||||
binding.lifecycleOwner = this
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
navHostFragment = createNavHostFragment()
|
||||
|
||||
supportFragmentManager
|
||||
.beginTransaction()
|
||||
.add(addNavHostTo(), navHostFragment, NAV_HOST_FRAGMENT_TAG)
|
||||
.commitNow()
|
||||
} else {
|
||||
navHostFragment = supportFragmentManager
|
||||
.findFragmentByTag(NAV_HOST_FRAGMENT_TAG) as NavHostFragment
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSupportNavigateUp(): Boolean {
|
||||
if (!NavigationUI.navigateUp(navHostFragment.navController, null)) {
|
||||
onBackPressed()
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
@LayoutRes
|
||||
abstract fun getLayoutId(): Int
|
||||
|
||||
abstract fun createNavHostFragment(): NavHostFragment
|
||||
|
||||
@IdRes
|
||||
abstract fun addNavHostTo(): Int
|
||||
}
|
||||
@@ -8,9 +8,8 @@ import androidx.annotation.LayoutRes
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.databinding.ViewDataBinding
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.melih.core.R
|
||||
import com.melih.repository.interactors.base.Reason
|
||||
|
||||
/**
|
||||
@@ -23,7 +22,6 @@ abstract class BaseFragment<T : ViewDataBinding> : Fragment() {
|
||||
|
||||
// region Properties
|
||||
|
||||
protected lateinit var navController: NavController
|
||||
protected lateinit var binding: T
|
||||
// endregion
|
||||
|
||||
@@ -34,7 +32,6 @@ abstract class BaseFragment<T : ViewDataBinding> : Fragment() {
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
navController = NavHostFragment.findNavController(this)
|
||||
binding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false)
|
||||
binding.lifecycleOwner = this
|
||||
return binding.root
|
||||
@@ -45,7 +42,7 @@ abstract class BaseFragment<T : ViewDataBinding> : Fragment() {
|
||||
binding.root,
|
||||
resources.getString(reason.messageRes),
|
||||
Snackbar.LENGTH_INDEFINITE
|
||||
).setAction(com.melih.core.R.string.retry) {
|
||||
).setAction(R.string.retry) {
|
||||
block()
|
||||
}.show()
|
||||
}
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!DOCTYPE
|
||||
resources[<!ENTITY deeplinkNamespace "rocket-science://"><!ENTITY deeplinkDetailPath "&deeplinkNamespace;detail"><!ENTITY paramLaunchId "launch-id">]>
|
||||
|
||||
<resources>
|
||||
<string name="dummy_long_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
|
||||
incididunt ut labore et dolore
|
||||
magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
|
||||
consequat. Duis aute irure dolor in
|
||||
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
|
||||
non proident, sunt in culpa qui officia
|
||||
deserunt mollit anim id est laborum
|
||||
</string>
|
||||
<string name="retry">Retry</string>
|
||||
|
||||
<string name="retry">Retry</string>
|
||||
|
||||
<!--Actions-->
|
||||
<string name="action_detail">action.detail.open</string>
|
||||
<string name="detail_param_launch_id">¶mLaunchId;</string>
|
||||
<string name="detail_deeplink">&deeplinkDetailPath;/{¶mLaunchId;}</string>
|
||||
<string name="detail_uri">&deeplinkDetailPath;/%1d</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user