Migrate “History and Cache” to Jetpack Compose
What is it?
- [ ] Bugfix (user facing)
- [ ] Feature (user facing)
- [x] Codebase improvement (dev facing)
- [ ] Meta improvement to the project (dev facing)
Description of the changes in your PR
- Added daggerHilt DI
- Changed the History and cache setting screen to use compose
Before/After Screenshots/Screen Record
-
Before:
-
After:
Fixes the following issue(s)
- Fixes #
APK testing
The APK can be found by going to the "Checks" tab below the title. On the left pane, click on "CI", scroll down to "artifacts" and click "app" to download the zip file which contains the debug APK of this PR. You can find more info and a video demonstration on this wiki page.
Due diligence
- [x] I read the contribution guidelines.
@snaik20 can you review this PR?
I rebased on current refactor & squashed, but I can’t get it to work. The hilt library is throwing weird injection errors:
/home/philip/kot/android/NewPipe/app/build/generated/hilt/component_sources/debug/org/schabi/newpipe/App_HiltComponents.java:144: error: [Dagger/DuplicateBindings] android.content.SharedPreferences is bound multiple times:
public abstract static class SingletonC implements FragmentGetContextFix.FragmentGetContextFixEntryPoint,
^
@Provides @Singleton android.content.SharedPreferences org.schabi.newpipe.AppModule.providesSharedPreference(@dagger.hilt.android.qualifiers.ApplicationContext android.content.Context)
@Provides @Singleton android.content.SharedPreferences org.schabi.newpipe.dependency_injection.AppModule.provideSharedPreferences(@dagger.hilt.android.qualifiers.ApplicationContext android.content.Context)
android.content.SharedPreferences is injected at
org.schabi.newpipe.settings.viewmodel.SettingsViewModel(…, preferenceManager)
org.schabi.newpipe.settings.viewmodel.SettingsViewModel is injected at
org.schabi.newpipe.settings.viewmodel.SettingsViewModel_HiltModules.BindsModule.binds(vm)
@dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map<java.lang.Class<?>,javax.inject.Provider<androidx.lifecycle.ViewModel>> is requested at
dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [org.schabi.newpipe.App_HiltComponents.SingletonC → org.schabi.newpipe.App_HiltComponents.ActivityRetainedC → org.schabi.newpipe.App_HiltComponents.ViewModelC]
It is also requested at:
org.schabi.newpipe.settings.dependency_injection.SettingsModule.provideGetBooleanPreference(sharedPreferences, …)
org.schabi.newpipe.settings.dependency_injection.SettingsModule.provideGetStringPreference(sharedPreferences, …)
org.schabi.newpipe.settings.dependency_injection.SettingsModule.provideUpdateBooleanPreference(sharedPreferences, …)
org.schabi.newpipe.settings.dependency_injection.SettingsModule.provideUpdateStringPreference(sharedPreferences, …)
Something I noticed: the old implementation seems to be still around, don’t we want to remove it?
Hey @braiso-22, do you have time to address the reviews and complete this PR? Thanks in advance :-)
Hey @braiso-22, do you have time to address the reviews and complete this PR? Thanks in advance :-)
Sorry for leaving this PR unattended for so long! Life has been a bit crazy lately and I completely forgot about it. I'll get back to it soon
Totally understandable, thanks!
I rebased on current refactor & squashed, but I can’t get it to work. The hilt library is throwing weird injection errors:
/home/philip/kot/android/NewPipe/app/build/generated/hilt/component_sources/debug/org/schabi/newpipe/App_HiltComponents.java:144: error: [Dagger/DuplicateBindings] android.content.SharedPreferences is bound multiple times: public abstract static class SingletonC implements FragmentGetContextFix.FragmentGetContextFixEntryPoint, ^ @Provides @Singleton android.content.SharedPreferences org.schabi.newpipe.AppModule.providesSharedPreference(@dagger.hilt.android.qualifiers.ApplicationContext android.content.Context) @Provides @Singleton android.content.SharedPreferences org.schabi.newpipe.dependency_injection.AppModule.provideSharedPreferences(@dagger.hilt.android.qualifiers.ApplicationContext android.content.Context) android.content.SharedPreferences is injected at org.schabi.newpipe.settings.viewmodel.SettingsViewModel(…, preferenceManager) org.schabi.newpipe.settings.viewmodel.SettingsViewModel is injected at org.schabi.newpipe.settings.viewmodel.SettingsViewModel_HiltModules.BindsModule.binds(vm) @dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map<java.lang.Class<?>,javax.inject.Provider<androidx.lifecycle.ViewModel>> is requested at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [org.schabi.newpipe.App_HiltComponents.SingletonC → org.schabi.newpipe.App_HiltComponents.ActivityRetainedC → org.schabi.newpipe.App_HiltComponents.ViewModelC] It is also requested at: org.schabi.newpipe.settings.dependency_injection.SettingsModule.provideGetBooleanPreference(sharedPreferences, …) org.schabi.newpipe.settings.dependency_injection.SettingsModule.provideGetStringPreference(sharedPreferences, …) org.schabi.newpipe.settings.dependency_injection.SettingsModule.provideUpdateBooleanPreference(sharedPreferences, …) org.schabi.newpipe.settings.dependency_injection.SettingsModule.provideUpdateStringPreference(sharedPreferences, …)
fixed in the latest commit
Something I noticed: the old implementation seems to be still around, don’t we want to remove it?
Do you mean the xml view? I don't know how do we proceed in this case @Isira-Seneviratne what do i do?
Hi @Stypox and @Isira-Seneviratne, I think this PR is ready for another review. I’ve addressed some of the comments, and for the ones that seemed out of scope, I’ve added explanations in my replies. Could you please take another look?
The pipeline started failing on the ktLint Gradle task in a class I didn’t modify. I’ve merged my branch with the refactor branch again and fixed the two errors reported by the pipeline. You can approve it again.