The ViewFactory currently gets a LanguageNameLookup service injected, which already contains the user language, but then ViewFactory::newItemView() and other methods are also called with a $language argument. It doesn’t make sense to have the language at both levels here. (Also, the LanguageNameLookup service itself needs the user language, which we don’t want to use in the service wiring.)
I think the solution will be fairly similar to what @ItamarWMDE did in T281449: create a new LanguageNameLookupFactory service and inject that into ViewFactory. (I’m kind of tempted to skip LanguageNameLookupFactory and just hard-code new LanguageNameLookup( $language->getCode() ) in ViewFactory, but we created factory services for the text provider and number localizer too, so I guess we should have a language name lookup factory as well.)