Skip to content

Instantly share code, notes, and snippets.

View jeremyrempel's full-sized avatar

Jeremy Rempel jeremyrempel

View GitHub Profile
package javax.inject;
public interface Provider<T> {
T get();
}
class MyViewModelFactory @Inject constructor(
private val mainFragModel: Provider<MainFragmentViewModel>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return when (modelClass) {
MainFragmentViewModel::class.java -> mainFragModel.get()
else -> TODO("Missing viewModel $modelClass")
} as T
}
}
class MyFragmentFactory @Inject constructor(
private val mainFragProvider: Provider<MainFragment>
) : FragmentFactory() {
override fun instantiate(classLoader: ClassLoader, className: String): Fragment {
return when (className) {
MainFragment::class.java.canonicalName -> mainFragProvider.get()
else -> TODO("Missing fragment $className")
}
}
class MainFragmentViewModel @Inject constructor(myService: MyService) : ViewModel() {
private val data: MutableLiveData<String> = MutableLiveData()
init {
// call async service with callback
myService.getData(data::setValue)
}
fun getData(): LiveData<String> = data
class MainFragment
@Inject constructor(private val factory: ViewModelProvider.Factory) : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val viewModel by viewModels<MainFragmentViewModel> { factory }
// get some data sync, show a loader and display the data
viewModel.getData().observe(this, Observer {
apply: plugin “kotlin-kapt”
// just gradle things
implementation "com.google.dagger:dagger:2.23.2"
kapt "com.google.dagger:dagger-compiler:2.23.2"
compileOnly “javax.annotation:jsr250-api:1.0”
public class UI: Kotlinx_coroutines_core_nativeCoroutineDispatcher {
override public func dispatch(context: KotlinCoroutineContext, block: Kotlinx_coroutines_core_nativeRunnable) {
DispatchQueue.main.async {
block.run()
}
}
}
import UIKit
import app
class ViewController: UIViewController, PhotoView {
lazy var actions: PhotoPresenter = {
PhotoPresenter(
uiContext: UI() as KotlinCoroutineContext,
view: self
)
}()
class MainActivity : AppCompatActivity(), PhotoView {
override var isUpdating: Boolean by Delegates.observable(false) { _, _, isLoading ->
if (isLoading) {
progressBar.visibility = View.VISIBLE
button.visibility = View.GONE
imageView.visibility = View.GONE
text.visibility = View.GONE
} else {
progressBar.visibility = View.GONE
import android.util.Log
actual fun log(level: LogLevel, tag: String, message: String, error: Throwable) {
when (level) {
is LogLevel.DEBUG -> Log.d(tag, message, error)
is LogLevel.INFO -> Log.i(tag, message, error)
is LogLevel.WARN -> Log.w(tag, message, error)
is LogLevel.ERROR -> Log.e(tag, message, error)
}
}