Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate “History and Cache” to Jetpack Compose #11494

Open
wants to merge 2 commits into
base: refactor
Choose a base branch
from

Conversation

braiso-22
Copy link

@braiso-22 braiso-22 commented Sep 1, 2024

What is it?

  • Bugfix (user facing)
  • Feature (user facing)
  • 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:
    Captura de pantalla 2024-09-01 a las 18 44 50
    image

  • After:
    Captura de pantalla 2024-09-01 a las 18 39 49
    image

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

@github-actions github-actions bot added the size/giant PRs with more than 750 changed lines label Sep 1, 2024
@braiso-22
Copy link
Author

@snaik20 can you review this PR?

@TobiGr TobiGr added the GUI Issue is related to the graphical user interface label Sep 2, 2024
Copy link
Member

@Isira-Seneviratne Isira-Seneviratne left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks pretty decent, thank you! In particular, the addition of Hilt will be useful.

That being said, I've suggested some improvements.

Comment on lines +8 to +18
class OpenErrorActivity(
private val context: Context,
) {
operator fun invoke(errorInfo: ErrorInfo) {
val intent = Intent(context, ErrorActivity::class.java)
intent.putExtra(ErrorActivity.ERROR_INFO, errorInfo)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

context.startActivity(intent)
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would be better as a static method in the error activity class itself.

Comment on lines +31 to +37
val clickModifier = if (enabled) {
Modifier.clickable { onClick() }
} else {
Modifier
}
Row(
modifier = clickModifier.then(modifier),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
val clickModifier = if (enabled) {
Modifier.clickable { onClick() }
} else {
Modifier
}
Row(
modifier = clickModifier.then(modifier),
Row(
modifier = Modifier
.clickable(enabled, onClick = onClick)
.then(modifier),

Comment on lines +22 to +31
) = ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
AppTheme {
HistoryCacheSettingsScreen(
modifier = Modifier.fillMaxSize()
)
}
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
) = ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
AppTheme {
HistoryCacheSettingsScreen(
modifier = Modifier.fillMaxSize()
)
}
}
}
) = content {
AppTheme {
HistoryCacheSettingsScreen(modifier = Modifier.fillMaxSize())
}
}

This requires the Fragment Compose dependency.

Comment on lines +1 to +7
package org.schabi.newpipe.settings.domain.usecases.get_preference

import kotlinx.coroutines.flow.Flow

fun interface GetPreference<T> {
operator fun invoke(key: Int, defaultValue: T): Flow<T>
}
Copy link
Member

@Isira-Seneviratne Isira-Seneviratne Sep 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using DataStore might be a better option instead of adding custom classes for handling preferences.

@braiso-22 braiso-22 mentioned this pull request Sep 20, 2024
5 tasks
@ShareASmile ShareASmile added the rewrite Issues and PRs related to rewrite label Oct 5, 2024
@Profpatsch Profpatsch changed the title History cache compose Migrate “History and Cache” to Jetbrains Compose Nov 19, 2024
@AudricV AudricV changed the title Migrate “History and Cache” to Jetbrains Compose Migrate “History and Cache” to Jetpack Compose Nov 20, 2024
@Profpatsch
Copy link
Contributor

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, …)

@Profpatsch
Copy link
Contributor

Something I noticed: the old implementation seems to be still around, don’t we want to remove it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
GUI Issue is related to the graphical user interface rewrite Issues and PRs related to rewrite size/giant PRs with more than 750 changed lines
Projects
Status: In Progress
Development

Successfully merging this pull request may close these issues.

5 participants