Skip to content

Commit

Permalink
arch转kotlin
Browse files Browse the repository at this point in the history
  • Loading branch information
K0170016 authored and K0170016 committed Jun 25, 2019
1 parent 32f1da4 commit 4b1a6ee
Show file tree
Hide file tree
Showing 103 changed files with 1,560 additions and 2,205 deletions.
15 changes: 4 additions & 11 deletions core-arch/build.gradle
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: "kotlin-allopen"
apply plugin: 'kotlin-kapt'
apply plugin: 'com.github.dcendents.android-maven'

group = "com.github.coolfire2015"

//指定会打开类的注解的列表
allOpen {
annotation("com.huyingbao.core.common.annotation.AllOpen")
}

android {
//编译版本
compileSdkVersion COMPILE_SDK_VERSION as int
Expand All @@ -34,7 +28,7 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//Lambda表达式需要
//Java1.8支持
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
Expand All @@ -43,10 +37,6 @@ android {
kotlinOptions {
jvmTarget = "1.8"
}
//Kotlin 实验功能
androidExtensions {
experimental = true
}
}

//将源代码打包进aar
Expand All @@ -69,6 +59,9 @@ dependencies {
//RxJava
api "io.reactivex.rxjava2:rxjava:${RX_JAVA_2}"
api "io.reactivex.rxjava2:rxandroid:${RX_ANDROID_2}"
api "io.reactivex.rxjava2:rxkotlin:${RX_KOTLIN_2}"
//Kotlin支持
api "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${KOTLIN_VERSION}"
//Dagger
api "com.google.dagger:dagger:${DAGGER}"
//Dagger-Android
Expand Down
33 changes: 12 additions & 21 deletions core-arch/src/main/java/com/huyingbao/core/arch/RxApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,40 +7,32 @@ import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry

import dagger.android.DaggerApplication
import java.lang.reflect.InvocationTargetException

import javax.inject.Inject

import dagger.android.DaggerApplication

import com.huyingbao.core.arch.RxFlux.TAG

/**
* Application实现Dagger.Android依赖注入。
*
*
* 通过反射获取RxAppLifecycleOwner,并实现生命周期状态分发到[RxAppLifecycle]。
*
*
* Created by liujunfeng on 2019/1/1.
*/
abstract class RxApp : DaggerApplication() {
@Inject
internal var mRxFlux: RxFlux? = null
lateinit var rxFlux: RxFlux

private var mLifecycleOwner: LifecycleOwner? = null
private var lifecycleOwner: LifecycleOwner? = null

private// These exceptions can't be squashed across all versions of Android.
val annotationGeneratedRxAppLifecycleOwner: LifecycleOwner?
private val annotationGeneratedRxAppLifecycleOwner: LifecycleOwner?
get() {
var result: LifecycleOwner? = null
try {
val clazz = Class.forName("com.huyingbao.core.arch.RxAppLifecycleOwner") as Class<LifecycleOwner>
result = clazz.getConstructor(Application::class.java!!).newInstance(this)
result = clazz.getConstructor(Application::class.java).newInstance(this)
} catch (e: ClassNotFoundException) {
if (Log.isLoggable(TAG, Log.WARN)) {
Log.w(TAG, "Failed to find RxAppLifecycleOwner. You should include an"
if (Log.isLoggable(RxFlux.TAG, Log.WARN)) {
Log.w(RxFlux.TAG, "Failed to find RxAppLifecycleOwner. You should include an"
+ " annotationProcessor compile dependency on com.github.coolfire2015.RxFluxArchitecture:core-arch-processor"
+ " in your application and a @RxAppObserver annotated RxAppLifecycle subclass"
+ " and a @RxAppOwner annotated RxApp implementation")
Expand All @@ -54,30 +46,29 @@ abstract class RxApp : DaggerApplication() {
} catch (e: InvocationTargetException) {
throwIncorrectRxAppLifecycle(e)
}

return result
}

override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
mLifecycleOwner = annotationGeneratedRxAppLifecycleOwner
lifecycleOwner = annotationGeneratedRxAppLifecycleOwner
}

override fun onCreate() {
super.onCreate()
//application创建的时候调用该方法,使RxFlux可以接受Activity生命周期回调
registerActivityLifecycleCallbacks(mRxFlux)
(mLifecycleOwner!!.lifecycle as LifecycleRegistry).handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
registerActivityLifecycleCallbacks(rxFlux)
(lifecycleOwner?.lifecycle as LifecycleRegistry).handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
}

override fun onLowMemory() {
super.onLowMemory()
(mLifecycleOwner!!.lifecycle as LifecycleRegistry).handleLifecycleEvent(Lifecycle.Event.ON_STOP)
(lifecycleOwner?.lifecycle as LifecycleRegistry).handleLifecycleEvent(Lifecycle.Event.ON_STOP)
}

override fun onTerminate() {
super.onTerminate()
(mLifecycleOwner!!.lifecycle as LifecycleRegistry).handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
(lifecycleOwner?.lifecycle as LifecycleRegistry).handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
}

private fun throwIncorrectRxAppLifecycle(e: Exception) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import androidx.lifecycle.OnLifecycleEvent
*
* Created by liujunfeng on 2019/1/1.
*/
abstract class RxAppLifecycle(protected var mApplication: Application) : LifecycleObserver {
abstract class RxAppLifecycle(protected var application: Application) : LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
abstract fun onCreate()
Expand Down
149 changes: 42 additions & 107 deletions core-arch/src/main/java/com/huyingbao/core/arch/RxFlux.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,113 +5,70 @@ import android.app.Application
import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager

import com.huyingbao.core.arch.action.RxActionManager
import com.huyingbao.core.arch.dispatcher.RxDispatcher
import com.huyingbao.core.arch.lifecycle.RxActivityLifecycleObserver
import com.huyingbao.core.arch.lifecycle.RxFragmentLifecycleObserver
import com.huyingbao.core.arch.view.RxSubscriberView

import java.util.Stack

import java.util.*
import javax.inject.Inject
import javax.inject.Singleton

/**
* 自动跟踪Activity/Fragment的生命周期,管理Activity/Fragment订阅,必须在Application创建的时候调用该类的实例方法, 并仅调用一次。
*
*
* Created by liujunfeng on 2019/1/1.
*/
@Singleton
class RxFlux
/**
* Inject 标记用于提供依赖的方法
*
*
* 构造器注入的局限:如果有多个构造器,我们只能标注其中一个,无法标注多个
*
*
* 标注在public方法上,Dagger2会在构造器执行之后立即调用这个方法,可以提供this对象
* Created by liujunfeng on 2019/1/1.
*/
@Inject
constructor() : FragmentManager.FragmentLifecycleCallbacks(), Application.ActivityLifecycleCallbacks {
@Singleton
class RxFlux @Inject constructor() :
FragmentManager.FragmentLifecycleCallbacks(),
Application.ActivityLifecycleCallbacks {
/**
* Inject 用来标记需要注入的依赖
* 被标注的属性不能使用private修饰,否则无法注入
*
* @param rxBus
* [Inject] 用来标记需要注入的依赖, 被标注的属性不能使用private修饰,否则无法注入
*/
@Inject
internal var mRxDispatcher: RxDispatcher? = null
lateinit var rxDispatcher: RxDispatcher
@Inject
internal var mRxActionManager: RxActionManager? = null
lateinit var rxActionManager: RxActionManager

private var mActivityCounter: Int = 0
private val mActivityStack: Stack<Activity>
private var activityCounter: Int = 0
private val activityStack: Stack<Activity> = Stack()

init {
mActivityCounter = 0
mActivityStack = Stack()
}

override fun onActivityCreated(activity: Activity, bundle: Bundle) {
mActivityCounter++
mActivityStack.add(activity)
override fun onActivityCreated(activity: Activity?, bundle: Bundle?) {
activityCounter++
activityStack.add(activity)
if (activity is FragmentActivity) {
activity.lifecycle
.addObserver(RxActivityLifecycleObserver(activity))
activity.supportFragmentManager
.registerFragmentLifecycleCallbacks(this, true)
activity.lifecycle.addObserver(RxActivityLifecycleObserver(activity))
activity.supportFragmentManager.registerFragmentLifecycleCallbacks(this, true)
}
}

override fun onActivityStarted(activity: Activity) {}

override fun onFragmentPreAttached(fm: FragmentManager, f: Fragment, context: Context) {
super.onFragmentPreAttached(fm, f, context)
override fun onActivityStarted(activity: Activity?) {
}

override fun onFragmentAttached(fm: FragmentManager, f: Fragment, context: Context) {
super.onFragmentAttached(fm, f, context)
f.lifecycle.addObserver(RxFragmentLifecycleObserver(f))
}

override fun onFragmentPreCreated(fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) {
super.onFragmentPreCreated(fm, f, savedInstanceState)
}

override fun onFragmentCreated(fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) {
super.onFragmentCreated(fm, f, savedInstanceState)
}

override fun onFragmentViewCreated(fm: FragmentManager, f: Fragment, v: View, savedInstanceState: Bundle?) {
super.onFragmentViewCreated(fm, f, v, savedInstanceState)
}

override fun onFragmentActivityCreated(fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) {
super.onFragmentActivityCreated(fm, f, savedInstanceState)
}

override fun onFragmentStarted(fm: FragmentManager, f: Fragment) {
super.onFragmentStarted(fm, f)
}


/**
* [RxSubscriberView]注册订阅
*/
override fun onActivityResumed(activity: Activity) {
override fun onActivityResumed(activity: Activity?) {
if (activity is RxSubscriberView) {
if (mRxDispatcher!!.isSubscribe(this)) {
if (rxDispatcher.isSubscribe(this)) {
return
}
Log.i(TAG, "Subscribe RxFluxActivity : " + activity.javaClass.getSimpleName())
mRxDispatcher!!.subscribeRxView(activity as RxSubscriberView)
Log.i(TAG, "Subscribe RxFluxActivity : " + activity.javaClass.simpleName)
rxDispatcher.subscribeRxView(activity as RxSubscriberView)
}
}

Expand All @@ -121,22 +78,21 @@ constructor() : FragmentManager.FragmentLifecycleCallbacks(), Application.Activi
override fun onFragmentResumed(fm: FragmentManager, f: Fragment) {
super.onFragmentResumed(fm, f)
if (f is RxSubscriberView) {
if (mRxDispatcher!!.isSubscribe(this)) {
if (rxDispatcher.isSubscribe(this)) {
return
}
Log.i(TAG, "Subscribe RxFluxFragment : " + f.javaClass.getSimpleName())
mRxDispatcher!!.subscribeRxView(f as RxSubscriberView)
Log.i(TAG, "Subscribe RxFluxFragment : " + f.javaClass.simpleName)
rxDispatcher.subscribeRxView(f as RxSubscriberView)
}
}


/**
* [RxSubscriberView]取消订阅
*/
override fun onActivityPaused(activity: Activity) {
override fun onActivityPaused(activity: Activity?) {
if (activity is RxSubscriberView) {
Log.i(TAG, "Unsubscribe RxFluxActivity : " + activity.javaClass.getSimpleName())
mRxDispatcher!!.unsubscribeRxView(activity as RxSubscriberView)
Log.i(TAG, "Unsubscribe RxFluxActivity : " + activity.javaClass.simpleName)
rxDispatcher.unsubscribeRxView(activity as RxSubscriberView)
}
}

Expand All @@ -146,47 +102,26 @@ constructor() : FragmentManager.FragmentLifecycleCallbacks(), Application.Activi
override fun onFragmentPaused(fm: FragmentManager, f: Fragment) {
super.onFragmentPaused(fm, f)
if (f is RxSubscriberView) {
Log.i(TAG, "Unsubscribe RxFluxFragment : " + f.javaClass.getSimpleName())
mRxDispatcher!!.unsubscribeRxView(f as RxSubscriberView)
Log.i(TAG, "Unsubscribe RxFluxFragment : " + f.javaClass.simpleName)
rxDispatcher.unsubscribeRxView(f as RxSubscriberView)
}
}

override fun onActivityStopped(activity: Activity) {}

override fun onFragmentStopped(fm: FragmentManager, f: Fragment) {
super.onFragmentStopped(fm, f)
}
override fun onActivityStopped(activity: Activity?) {}

override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {}
override fun onActivitySaveInstanceState(activity: Activity?, bundle: Bundle?) {}

override fun onFragmentSaveInstanceState(fm: FragmentManager, f: Fragment, outState: Bundle) {
super.onFragmentSaveInstanceState(fm, f, outState)
}

override fun onActivityDestroyed(activity: Activity) {
mActivityCounter--
mActivityStack.remove(activity)
if (mActivityCounter == 0 || mActivityStack.size == 0) {
override fun onActivityDestroyed(activity: Activity?) {
activityCounter--
activityStack.remove(activity)
if (activityCounter == 0 || activityStack.size == 0) {
shutdown()
}
}

override fun onFragmentViewDestroyed(fm: FragmentManager, f: Fragment) {
super.onFragmentViewDestroyed(fm, f)
}

override fun onFragmentDestroyed(fm: FragmentManager, f: Fragment) {
super.onFragmentDestroyed(fm, f)
}

override fun onFragmentDetached(fm: FragmentManager, f: Fragment) {
super.onFragmentDetached(fm, f)
}


fun finishAllActivity() {
while (!mActivityStack.empty()) {
mActivityStack.pop().finish()
while (!activityStack.empty()) {
activityStack.pop().finish()
}
}

Expand All @@ -195,19 +130,19 @@ constructor() : FragmentManager.FragmentLifecycleCallbacks(), Application.Activi
}

private fun shutdown() {
mRxActionManager!!.clear()
mRxDispatcher!!.unsubscribeAll()
rxActionManager.clear()
rxDispatcher.unsubscribeAll()
}

private fun finishActivity(activity: Activity?) {
if (activity != null) {
mActivityStack.remove(activity)
activityStack.remove(activity)
activity.finish()
}
}

private fun getActivity(cls: Class<*>): Activity? {
for (activity in mActivityStack) {
for (activity in activityStack) {
if (activity.javaClass == cls) {
return activity
}
Expand All @@ -216,6 +151,6 @@ constructor() : FragmentManager.FragmentLifecycleCallbacks(), Application.Activi
}

companion object {
val TAG = "RxFlux"
const val TAG = "RxFlux"
}
}
Loading

0 comments on commit 4b1a6ee

Please sign in to comment.