diff --git a/app/src/main/java/fr/free/nrw/commons/di/CommonsDaggerSupportFragment.java b/app/src/main/java/fr/free/nrw/commons/di/CommonsDaggerSupportFragment.java deleted file mode 100644 index f5ef2dd28..000000000 --- a/app/src/main/java/fr/free/nrw/commons/di/CommonsDaggerSupportFragment.java +++ /dev/null @@ -1,75 +0,0 @@ -package fr.free.nrw.commons.di; - -import android.app.Activity; -import android.content.Context; - -import androidx.fragment.app.Fragment; - -import javax.inject.Inject; - -import dagger.android.AndroidInjector; -import dagger.android.DispatchingAndroidInjector; -import dagger.android.support.HasSupportFragmentInjector; -import io.reactivex.disposables.CompositeDisposable; - -public abstract class CommonsDaggerSupportFragment extends Fragment implements HasSupportFragmentInjector { - - @Inject - DispatchingAndroidInjector childFragmentInjector; - - protected CompositeDisposable compositeDisposable = new CompositeDisposable(); - - @Override - public void onAttach(Context context) { - inject(); - super.onAttach(context); - } - - @Override - public void onDestroy() { - super.onDestroy(); - compositeDisposable.clear(); - } - - @Override - public AndroidInjector supportFragmentInjector() { - return childFragmentInjector; - } - - - public void inject() { - HasSupportFragmentInjector hasSupportFragmentInjector = findHasFragmentInjector(); - - AndroidInjector fragmentInjector = hasSupportFragmentInjector.supportFragmentInjector(); - - if (fragmentInjector == null) { - throw new NullPointerException(String.format("%s.supportFragmentInjector() returned null", hasSupportFragmentInjector.getClass().getCanonicalName())); - } - - fragmentInjector.inject(this); - } - - private HasSupportFragmentInjector findHasFragmentInjector() { - Fragment parentFragment = this; - - while ((parentFragment = parentFragment.getParentFragment()) != null) { - if (parentFragment instanceof HasSupportFragmentInjector) { - return (HasSupportFragmentInjector) parentFragment; - } - } - - Activity activity = getActivity(); - - if (activity instanceof HasSupportFragmentInjector) { - return (HasSupportFragmentInjector) activity; - } - - ApplicationlessInjection injection = ApplicationlessInjection.getInstance(activity.getApplicationContext()); - if (injection != null) { - return injection; - } - - throw new IllegalArgumentException(String.format("No injector was found for %s", getClass().getCanonicalName())); - } - -} diff --git a/app/src/main/java/fr/free/nrw/commons/di/CommonsDaggerSupportFragment.kt b/app/src/main/java/fr/free/nrw/commons/di/CommonsDaggerSupportFragment.kt new file mode 100644 index 000000000..8204d4415 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/di/CommonsDaggerSupportFragment.kt @@ -0,0 +1,66 @@ +package fr.free.nrw.commons.di + +import android.app.Activity +import android.content.Context +import androidx.fragment.app.Fragment +import dagger.android.AndroidInjector +import dagger.android.DispatchingAndroidInjector +import dagger.android.support.HasSupportFragmentInjector +import fr.free.nrw.commons.di.ApplicationlessInjection.Companion.getInstance +import io.reactivex.disposables.CompositeDisposable +import javax.inject.Inject + +abstract class CommonsDaggerSupportFragment : Fragment(), HasSupportFragmentInjector { + + @Inject @JvmField + var childFragmentInjector: DispatchingAndroidInjector? = null + + @JvmField + protected var compositeDisposable: CompositeDisposable = CompositeDisposable() + + override fun onAttach(context: Context) { + inject() + super.onAttach(context) + } + + override fun onDestroy() { + super.onDestroy() + compositeDisposable.clear() + } + + override fun supportFragmentInjector(): AndroidInjector = + childFragmentInjector!! + + + fun inject() { + val hasSupportFragmentInjector = findHasFragmentInjector() + + val fragmentInjector = hasSupportFragmentInjector.supportFragmentInjector() + ?: throw NullPointerException( + String.format( + "%s.supportFragmentInjector() returned null", + hasSupportFragmentInjector.javaClass.canonicalName + ) + ) + + fragmentInjector.inject(this) + } + + private fun findHasFragmentInjector(): HasSupportFragmentInjector { + var parentFragment: Fragment? = this + + while ((parentFragment!!.parentFragment.also { parentFragment = it }) != null) { + if (parentFragment is HasSupportFragmentInjector) { + return parentFragment as HasSupportFragmentInjector + } + } + + val activity: Activity = requireActivity() + + if (activity is HasSupportFragmentInjector) { + return activity + } + + return getInstance(activity.applicationContext) + } +}