package org.bbssh.ui.screens;
import java.io.IOException;
import net.rim.device.api.applicationcontrol.ApplicationPermissions;
import net.rim.device.api.applicationcontrol.ApplicationPermissionsManager;
import net.rim.device.api.i18n.ResourceBundleFamily;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.component.CheckboxField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.SeparatorField;
import net.rim.device.api.ui.container.MainScreen;
import org.bbssh.BBSSHApp;
import org.bbssh.i18n.BBSSHResource;
import org.bbssh.model.Settings;
import org.bbssh.model.SettingsManager;
import org.bbssh.util.Tools;
/**
* Examines permissions and reports on required and optional perms that are not possible. Allows user to change perms
* via prompting.
*
* @author marc
*
*/
public class PermissionsHelperScreen extends MainScreen implements BBSSHResource {
ResourceBundleFamily res = ResourceBundleFamily.getBundle(BUNDLE_ID, BUNDLE_NAME);
CheckboxField bes = new CheckboxField(res.getString(PERM_HELPER_Q_BES_CONNECTION), false);
CheckboxField tcp = new CheckboxField(res.getString(PERM_HELPER_Q_INTERNET_CONNECTION), false);
CheckboxField wifi = new CheckboxField(res.getString(PERM_HELPER_Q_WIFI_CONNECTION), false);
CheckboxField log = new CheckboxField(res.getString(PERM_HELPER_Q_DEBUG_LOG_FILE), false);
CheckboxField screen = new CheckboxField(res.getString(PERM_HELPER_Q_SCREEN_CAPTURE), false);
CheckboxField readkey = new CheckboxField(res.getString(PERM_HELPER_Q_IMPORT_KEY), false);
CheckboxField savekey = new CheckboxField(res.getString(PERM_HELPER_Q_GENERATE_KEY), false);
CheckboxField disableBindings = new CheckboxField(res.getString(PERM_HELPER_Q_DISABLE_BINDINGS), false);
CheckboxField urlGrabber = new CheckboxField(res.getString(PERM_HELPER_Q_URL_GRABBER), false);
CheckboxField sendEmail = new CheckboxField(res.getString(PERM_HELPER_Q_SEND_SUPPORT_EMAIL), false);
public PermissionsHelperScreen(boolean launchFailed) {
setTitle(res, PERM_HELPER_TITLE);
add(new LabelField(res, PERM_HELPER_INSTRUCTION));
add(new SeparatorField());
setFont(Tools.deriveBBSSHDialogFont(getFont()));
Font bold = getFont().derive(Font.BOLD);
LabelField networking = new LabelField(res, SESSION_DTL_LBL_NETWORKING);
LabelField security = new LabelField(res, SETTINGS_LBL_SECURITY);
LabelField troubleshooting = new LabelField(res, PERM_HELPER_LBL_TROUBLESHOOTING);
LabelField integration = new LabelField(res, PERM_HELPER_LBL_INTEGRATION);
networking.setFont(bold);
security.setFont(bold);
troubleshooting.setFont(bold);
integration.setFont(bold);
setupFieldDefaults();
add(integration);
add(new SeparatorField());
add(disableBindings);
add(urlGrabber);
add(networking);
add(new SeparatorField());
add(tcp);
add(wifi);
add(bes);
add(security);
add(new SeparatorField());
add(readkey);
add(savekey);
add(troubleshooting);
add(new SeparatorField());
add(screen);
add(log);
add(sendEmail);
}
private void setupFieldDefaults() {
ApplicationPermissionsManager mgr = ApplicationPermissionsManager.getInstance();
boolean phoneOK = false;
boolean emailOK = false;
if (mgr.getPermission(ApplicationPermissions.PERMISSION_INTERNAL_CONNECTIONS) == ApplicationPermissions.VALUE_ALLOW) {
bes.setChecked(true);
}
if (mgr.getPermission(ApplicationPermissions.PERMISSION_WIFI) == ApplicationPermissions.VALUE_ALLOW) {
wifi.setChecked(true);
}
if (mgr.getPermission(ApplicationPermissions.PERMISSION_EXTERNAL_CONNECTIONS) == ApplicationPermissions.VALUE_ALLOW) {
tcp.setChecked(true);
}
if (mgr.getPermission(ApplicationPermissions.PERMISSION_FILE_API) == ApplicationPermissions.VALUE_ALLOW) {
readkey.setChecked(true);
savekey.setChecked(true);
log.setChecked(true);
screen.setChecked(true);
}
if (mgr.getPermission(ApplicationPermissions.PERMISSION_PHONE) == ApplicationPermissions.VALUE_ALLOW) {
disableBindings.setChecked(true);
phoneOK = true;
}
if (mgr.getPermission(ApplicationPermissions.PERMISSION_EMAIL) == ApplicationPermissions.VALUE_ALLOW &&
mgr.getPermission(ApplicationPermissions.PERMISSION_MEDIA) == ApplicationPermissions.VALUE_ALLOW) {
emailOK = true;
sendEmail.setChecked(true);
}
if (phoneOK && emailOK
&& mgr.getPermission(ApplicationPermissions.PERMISSION_PIM) == ApplicationPermissions.VALUE_ALLOW) {
urlGrabber.setChecked(true);
}
}
public void save() throws IOException {
ApplicationPermissions perm = new ApplicationPermissions();
perm.addPermission(ApplicationPermissions.PERMISSION_INTER_PROCESS_COMMUNICATION);
if (bes.getChecked())
perm.addPermission(ApplicationPermissions.PERMISSION_INTERNAL_CONNECTIONS);
if (wifi.getChecked())
perm.addPermission(ApplicationPermissions.PERMISSION_WIFI);
if (tcp.getChecked())
perm.addPermission(ApplicationPermissions.PERMISSION_EXTERNAL_CONNECTIONS);
if (readkey.getChecked() || savekey.getChecked() || log.getChecked() || screen.getChecked())
perm.addPermission(ApplicationPermissions.PERMISSION_FILE_API);
if (sendEmail.getChecked())
perm.addPermission(ApplicationPermissions.PERMISSION_MEDIA);
if (urlGrabber.getChecked() || disableBindings.getChecked())
perm.addPermission(ApplicationPermissions.PERMISSION_PHONE);
if (urlGrabber.getChecked()) {
perm.addPermission(ApplicationPermissions.PERMISSION_EMAIL);
perm.addPermission(ApplicationPermissions.PERMISSION_PIM);
}
if (perm.getPermissionKeys() != null && perm.getPermissionKeys().length > 0) {
Dialog.alert(res.getString(PERM_HELPER_MSG_COMING_NEXT));
if (BBSSHApp.inst().requestPermissions(perm)) {
Dialog.ask(Dialog.D_OK, res.getString(PERM_HELPER_MSG_PERM_SUCCESS));
} else {
Dialog.ask(Dialog.D_OK, res.getString(PERM_HELPER_PERM_FAILED));
}
}
setDirty(false);
}
public boolean onClose() {
SettingsManager.getSettings().setRememberOption(Settings.REMEMBER_PERM_SHOWN, true);
return super.onClose();
}
}