mirror of
				https://github.com/topjohnwu/Magisk.git
				synced 2025-10-31 17:50:45 +00:00 
			
		
		
		
	Added self-handling event types
This commit is contained in:
		| @@ -0,0 +1,23 @@ | |||||||
|  | package com.topjohnwu.magisk.model.events | ||||||
|  |  | ||||||
|  | import android.content.Context | ||||||
|  | import androidx.appcompat.app.AppCompatActivity | ||||||
|  | import androidx.fragment.app.Fragment | ||||||
|  |  | ||||||
|  | interface ContextExecutor { | ||||||
|  |  | ||||||
|  |     operator fun invoke(context: Context) | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | interface ActivityExecutor { | ||||||
|  |  | ||||||
|  |     operator fun invoke(activity: AppCompatActivity) | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | interface FragmentExecutor { | ||||||
|  |  | ||||||
|  |     operator fun invoke(fragment: Fragment) | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -3,6 +3,7 @@ package com.topjohnwu.magisk.redesign.compat | |||||||
| import android.os.Bundle | import android.os.Bundle | ||||||
| import android.view.View | import android.view.View | ||||||
| import androidx.databinding.ViewDataBinding | import androidx.databinding.ViewDataBinding | ||||||
|  | import com.skoumal.teanity.viewevents.ViewEvent | ||||||
| import com.topjohnwu.magisk.ui.base.MagiskActivity | import com.topjohnwu.magisk.ui.base.MagiskActivity | ||||||
|  |  | ||||||
| abstract class CompatActivity<ViewModel : CompatViewModel, Binding : ViewDataBinding> : | abstract class CompatActivity<ViewModel : CompatViewModel, Binding : ViewDataBinding> : | ||||||
| @@ -24,4 +25,10 @@ abstract class CompatActivity<ViewModel : CompatViewModel, Binding : ViewDataBin | |||||||
|         delegate.onResume() |         delegate.onResume() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     override fun onEventDispatched(event: ViewEvent) { | ||||||
|  |         super.onEventDispatched(event) | ||||||
|  |  | ||||||
|  |         delegate.onEventExecute(event, this) | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
| @@ -1,8 +1,15 @@ | |||||||
| package com.topjohnwu.magisk.redesign.compat | package com.topjohnwu.magisk.redesign.compat | ||||||
|  |  | ||||||
| import android.graphics.Insets | import android.graphics.Insets | ||||||
|  | import androidx.appcompat.app.AppCompatActivity | ||||||
| import androidx.core.view.ViewCompat | import androidx.core.view.ViewCompat | ||||||
| import androidx.core.view.WindowInsetsCompat | import androidx.core.view.WindowInsetsCompat | ||||||
|  | import androidx.fragment.app.Fragment | ||||||
|  | import com.skoumal.teanity.viewevents.ViewEvent | ||||||
|  | import com.topjohnwu.magisk.model.events.ActivityExecutor | ||||||
|  | import com.topjohnwu.magisk.model.events.ContextExecutor | ||||||
|  | import com.topjohnwu.magisk.model.events.FragmentExecutor | ||||||
|  | import timber.log.Timber | ||||||
|  |  | ||||||
| class CompatDelegate internal constructor( | class CompatDelegate internal constructor( | ||||||
|     private val view: CompatView<*> |     private val view: CompatView<*> | ||||||
| @@ -12,6 +19,20 @@ class CompatDelegate internal constructor( | |||||||
|         view.viewModel.requestRefresh() |         view.viewModel.requestRefresh() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     fun onEventExecute(event: ViewEvent, activity: AppCompatActivity) { | ||||||
|  |         (event as? ContextExecutor)?.invoke(activity) | ||||||
|  |         (event as? ActivityExecutor)?.invoke(activity) | ||||||
|  |         (event as? FragmentExecutor)?.let { | ||||||
|  |             Timber.e("Cannot run ${FragmentExecutor::class.java.simpleName} in Activity. Consider adding ${ContextExecutor::class.java.simpleName} as fallback.") | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fun onEventExecute(event: ViewEvent, fragment: Fragment) { | ||||||
|  |         (event as? ContextExecutor)?.invoke(fragment.requireContext()) | ||||||
|  |         (event as? FragmentExecutor)?.invoke(fragment) | ||||||
|  |         (event as? ActivityExecutor)?.invoke(fragment.requireActivity() as AppCompatActivity) | ||||||
|  |     } | ||||||
|  |  | ||||||
|     fun ensureInsets() { |     fun ensureInsets() { | ||||||
|         ViewCompat.setOnApplyWindowInsetsListener(view.viewRoot) { _, insets -> |         ViewCompat.setOnApplyWindowInsetsListener(view.viewRoot) { _, insets -> | ||||||
|             insets.asInsets() |             insets.asInsets() | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ package com.topjohnwu.magisk.redesign.compat | |||||||
| import android.os.Bundle | import android.os.Bundle | ||||||
| import android.view.View | import android.view.View | ||||||
| import androidx.databinding.ViewDataBinding | import androidx.databinding.ViewDataBinding | ||||||
|  | import com.skoumal.teanity.viewevents.ViewEvent | ||||||
| import com.topjohnwu.magisk.ui.base.MagiskFragment | import com.topjohnwu.magisk.ui.base.MagiskFragment | ||||||
|  |  | ||||||
| abstract class CompatFragment<ViewModel : CompatViewModel, Binding : ViewDataBinding> | abstract class CompatFragment<ViewModel : CompatViewModel, Binding : ViewDataBinding> | ||||||
| @@ -24,4 +25,10 @@ abstract class CompatFragment<ViewModel : CompatViewModel, Binding : ViewDataBin | |||||||
|         delegate.onResume() |         delegate.onResume() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     override fun onEventDispatched(event: ViewEvent) { | ||||||
|  |         super.onEventDispatched(event) | ||||||
|  |  | ||||||
|  |         delegate.onEventExecute(event, this) | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user
	 Viktor De Pasquale
					Viktor De Pasquale