private void setSelectedDevice(Boolean refreshRequired) {
    final Device device =
        commonPreferences.getDevices().get(specificPreferences.getSelectedDeviceId());
    if (device == null) {
      skin.getShell().close();
    } else {
      Class<? extends BrowserSimSkin> newSkinClass =
          BrowserSimUtil.getSkinClass(device, specificPreferences.getUseSkins());
      String oldSkinUrl = null;
      if (newSkinClass != skin.getClass()) {
        oldSkinUrl = skin.getBrowser().getUrl();
        Point currentLocation = skin.getShell().getLocation();
        skin.getBrowser().removeProgressListener(progressListener);
        skin.getBrowser().getShell().dispose();
        initSkin(newSkinClass, currentLocation);
        fireSkinChangeEvent();
      }
      setOrientation(specificPreferences.getOrientationAngle(), device);

      skin.getBrowser().setDefaultUserAgent(device.getUserAgent());

      if (oldSkinUrl != null) {
        skin.getBrowser().setUrl(oldSkinUrl); // skin (and browser instance) is changed
      } else if (!Boolean.FALSE.equals(refreshRequired)) {
        getBrowser()
            .refresh(); // only user agent and size of the browser is changed and orientation is not
                        // changed
      }

      skin.getShell().open();
    }
  }
  public void open(SpecificPreferences sp, String url) {
    if (url == null) {
      url = homeUrl;
    }

    specificPreferences = sp;
    initObservers();
    Device defaultDevice =
        commonPreferences.getDevices().get(specificPreferences.getSelectedDeviceId());
    if (defaultDevice == null) {
      System.out.println("Could not find selected device in devices list");
      String id;
      try {
        id = commonPreferences.getDevices().keySet().iterator().next();
      } catch (NoSuchElementException e) {
        commonPreferences = CommonPreferencesStorage.INSTANCE.loadDefault();
        id = commonPreferences.getDevices().keySet().iterator().next();
      }
      specificPreferences.setSelectedDeviceId(id);
      defaultDevice = commonPreferences.getDevices().get(id);
    }

    initSkin(
        BrowserSimUtil.getSkinClass(defaultDevice, specificPreferences.getUseSkins()),
        specificPreferences.getLocation());
    setSelectedDevice(null);
    controlHandler.goToAddress(url);

    instances.add(BrowserSim.this);
    skin.getShell().open();
  }
 public void reinitSkin() {
   final Device device =
       commonPreferences.getDevices().get(specificPreferences.getSelectedDeviceId());
   Class<? extends BrowserSimSkin> newSkinClass =
       BrowserSimUtil.getSkinClass(device, specificPreferences.getUseSkins());
   String oldSkinUrl = skin.getBrowser().getUrl();
   Point currentLocation = skin.getShell().getLocation();
   skin.getBrowser().removeProgressListener(progressListener);
   skin.getBrowser().getShell().dispose();
   initSkin(newSkinClass, currentLocation);
   setOrientation(specificPreferences.getOrientationAngle(), device);
   skin.getBrowser().setDefaultUserAgent(device.getUserAgent());
   skin.getBrowser().setUrl(oldSkinUrl);
   skin.getShell().open();
 }
 private void initObservers() {
   commonPreferencesObserver =
       new Observer() {
         @Override
         public void update(Observable o, Object refreshRequired) {
           setSelectedDeviceAsync((Boolean) refreshRequired);
         }
       };
   commonPreferences.addObserver(commonPreferencesObserver);
   specificPreferences.addObserver(
       new Observer() {
         public void update(Observable o, Object refreshRequired) {
           setSelectedDeviceAsync((Boolean) refreshRequired);
         }
       });
 }