So, I like all this a lot more than the code before, thanks !

It's not exactly what I had in mind, let me explain.

I think what you have now in `configurations['keyboard']` should be generic. The exact same function will be used if we have something in `configurations[role]`.

However, what should be in `configurations['keyboard']` is the current `showIMEList`.

so the current `showInstallSuccess` could be renamed `handleInstallSuccess` and we could have:
```javascript
if (this.configurations[role]) {
  this.showSetupDialog(app);
} else {
  this.showInstallSuccess(app);
}
```

You can keep the current `showIMEList` as `AppInstallManager.showIMEList` and have:

``` javascript
configurations: {
  keyboard: {
    dialog: 'showIMEList'
  }
}
```

The generic setup dialog, when the user clicks "setup", would do:
```javascript
var funcName = this.configurations[role].dialog;
this[funcName].call(this, app);
```

Does this make sense ?

I'm also thinking we could have another object/file to handle these dialogs. Like `InstallSuccessDialog`, and we could do `new InstallSuccessDialog(app).show()`. The reason is that I don't like passing `app` from function to function. But maybe this could be done later in another bug.