Refactor WallpaperModelFactory (3/3)

This CL makes the following changes:
This CL makes the following changes:
1. Created an interface WallpaperDataFactory, which is implemented by
   DefaultWallpaperModelFactory and GooogleWallpaperModelFactory,
   respectively, depending which project we include.
   This also avoids complex inheritence pattern, where developers need
   to go back and forth to know what's going on when converting.
2. Made DefaultWallpaperModelFactory and
   GooogleWallpaperModelFactory injectable classes.
3. Moved functions in DataFactory classes to companion extension
   functions. Developers do not need to look into many classes.
4. Since DownloadableLiveWallpaperInfo represents a wallpaper that's not
   yet downloaded, we should treat it as a static wallpaper that shows
   the static image.

Test: Manually tested that the downloadable wallpaper shows
Bug: 291761856
Flag: ACONFIG com.android.wallpaper.multi_crop_preview_ui_flag DEVELOPMENT
Change-Id: Iefc7202bcd9e963cfb3cc1c5933925f87a40d663
diff --git a/src_override/com/android/wallpaper/module/AppModule.kt b/src_override/com/android/wallpaper/module/AppModule.kt
index 16e5a88..0d80e22 100644
--- a/src_override/com/android/wallpaper/module/AppModule.kt
+++ b/src_override/com/android/wallpaper/module/AppModule.kt
@@ -25,6 +25,7 @@
 import com.android.customization.module.logging.ThemesUserEventLoggerImpl
 import com.android.wallpaper.module.logging.UserEventLogger
 import com.android.wallpaper.util.converter.DefaultWallpaperModelFactory
+import com.android.wallpaper.util.converter.WallpaperModelFactory
 import dagger.Binds
 import dagger.Module
 import dagger.Provides
@@ -46,6 +47,12 @@
     @Singleton
     abstract fun bindThemesUserEventLogger(impl: ThemesUserEventLoggerImpl): ThemesUserEventLogger
 
+    @Binds
+    @Singleton
+    abstract fun bindWallpaperModelFactory(
+        impl: DefaultWallpaperModelFactory
+    ): WallpaperModelFactory
+
     companion object {
         @Provides
         @Singleton
@@ -57,12 +64,6 @@
 
         @Provides
         @Singleton
-        fun provideDefaultWallpaperModelFactory(): DefaultWallpaperModelFactory {
-            return DefaultWallpaperModelFactory()
-        }
-
-        @Provides
-        @Singleton
         fun provideColorCustomizationManager(
             @ApplicationContext context: Context
         ): ColorCustomizationManager {
diff --git a/tests/module/src/com/android/customization/TestModule.kt b/tests/module/src/com/android/customization/TestModule.kt
index 84b870f..1ad63a9 100644
--- a/tests/module/src/com/android/customization/TestModule.kt
+++ b/tests/module/src/com/android/customization/TestModule.kt
@@ -17,6 +17,7 @@
 import com.android.wallpaper.testing.TestInjector
 import com.android.wallpaper.testing.TestWallpaperPreferences
 import com.android.wallpaper.util.converter.DefaultWallpaperModelFactory
+import com.android.wallpaper.util.converter.WallpaperModelFactory
 import dagger.Binds
 import dagger.Module
 import dagger.Provides
@@ -63,13 +64,13 @@
         impl: TestDefaultCustomizationPreferences
     ): CustomizationPreferences
 
-    companion object {
-        @Provides
-        @Singleton
-        fun provideDefaultWallpaperModelFactory(): DefaultWallpaperModelFactory {
-            return DefaultWallpaperModelFactory()
-        }
+    @Binds
+    @Singleton
+    abstract fun bindWallpaperModelFactory(
+        impl: DefaultWallpaperModelFactory
+    ): WallpaperModelFactory
 
+    companion object {
         @Provides
         @Singleton
         fun provideColorCustomizationManager(): ColorCustomizationManager {