Single activity approach (#30)

* CircleCI config fixes

* Implicit deeplinking via navController navigate

* Removed jacoco.exec files. Closes # 32
This commit is contained in:
Melih Aksoy
2019-08-21 17:15:01 +02:00
parent ac588ad89d
commit 2a90aba88b
36 changed files with 402 additions and 322 deletions

Binary file not shown.

View File

@@ -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>

View File

@@ -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)))

View File

@@ -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
}

View File

@@ -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()
}

View File

@@ -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">&paramLaunchId;</string>
<string name="detail_deeplink">&deeplinkDetailPath;/{&paramLaunchId;}</string>
<string name="detail_uri">&deeplinkDetailPath;/%1d</string>
</resources>