How to resolve the negotiated theme for any other user?
As far as I remember, this type of functionality was built in in Drupal 6.

In Drupal 7 there was the ThemeKey module .

Unfortunately, as of this date ThemeKey is not yet ported to Drupal 8, however I think you can achieve pretty easy that functionality by using the user data object inside custom module.

In order get something from the user data object:

$data = \Drupal::service('user.data')-&gt;get('mymodule', \Drupal::currentUser()-&gt;id(), 'key');


In order to set something in the user data object:

\Drupal::service('user.data')-&gt;set('mymodule', \Drupal::currentUser()-&gt;id(), 'key', $value);


Update:

you can combine the code above with the solution posted here:

https://www.drupal8.ovh/en/tutoriels/259/theme-negotiators-switch-theme-dynamically

where your negotiator will be called last by adding priority in the services.yml

you can implement the business logic inside the function the function determineActiveTheme. Combine this with hook_user_login where the information is stored inside users_data and you have a working solution (If I don't have a mistake somewhere).