diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties index a41049430..26d7e3ac9 100644 --- a/resources/languages/resources.properties +++ b/resources/languages/resources.properties @@ -1531,7 +1531,8 @@ plugin.otr.menu.END_OTR=End private conversation plugin.otr.menu.REFRESH_OTR=Refresh private conversation plugin.otr.menu.AUTHENTICATE_BUDDY=Authenticate buddy plugin.otr.menu.WHATS_THIS=What's this -plugin.otr.menu.CB_AUTO=Automatically initiate private messaging +plugin.otr.menu.CB_AUTO=Automatically initiate private messaging with {0} +plugin.otr.menu.CB_AUTO_ALL=Automatically initiate private messaging with all contacts plugin.otr.menu.CB_ENABLE=Enable private messaging plugin.otr.menu.CB_REQUIRE=Require private messaging plugin.otr.menu.CB_RESET=Reset diff --git a/src/net/java/sip/communicator/plugin/otr/OtrContactMenu.java b/src/net/java/sip/communicator/plugin/otr/OtrContactMenu.java index c8b7c9af0..1dd402f9e 100644 --- a/src/net/java/sip/communicator/plugin/otr/OtrContactMenu.java +++ b/src/net/java/sip/communicator/plugin/otr/OtrContactMenu.java @@ -13,8 +13,8 @@ import net.java.otr4j.*; import net.java.otr4j.session.*; -import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.plugin.desktoputil.*; +import net.java.sip.communicator.service.protocol.*; /** * A special {@link JMenu} that holds the menu items for controlling the @@ -33,6 +33,8 @@ class OtrContactMenu private static final String ACTION_COMMAND_CB_AUTO = "CB_AUTO"; + private static final String ACTION_COMMAND_CB_AUTO_ALL = "CB_AUTO_ALL"; + private static final String ACTION_COMMAND_CB_ENABLE = "CB_ENABLE"; private static final String ACTION_COMMAND_CB_REQUIRE = "CB_REQUIRE"; @@ -149,10 +151,22 @@ else if (ACTION_COMMAND_CB_AUTO.equals(actionCommand)) boolean state = ((JCheckBoxMenuItem) e.getSource()).isSelected(); policy.setEnableAlways(state); + + OtrActivator.scOtrEngine.setContactPolicy(contact, policy); + } + + else if (ACTION_COMMAND_CB_AUTO_ALL.equals(actionCommand)) + { + OtrPolicy globalPolicy = + OtrActivator.scOtrEngine.getGlobalPolicy(); + boolean state = ((JCheckBoxMenuItem) e.getSource()).isSelected(); + + globalPolicy.setEnableAlways(state); OtrActivator.configService.setProperty( OtrActivator.AUTO_INIT_OTR_PROP, Boolean.toString(state)); - OtrActivator.scOtrEngine.setContactPolicy(contact, policy); + + OtrActivator.scOtrEngine.setGlobalPolicy(globalPolicy); } else if (ACTION_COMMAND_CB_REQUIRE.equals(actionCommand)) @@ -235,16 +249,16 @@ private void buildMenu() startOtr.setActionCommand(ACTION_COMMAND_START_OTR); startOtr.addActionListener(this); + JMenuItem refreshOtr = new JMenuItem(); + refreshOtr.setText(OtrActivator.resourceService + .getI18NString("plugin.otr.menu.REFRESH_OTR")); + refreshOtr.setEnabled(policy.getEnableManual()); + refreshOtr.setActionCommand(ACTION_COMMAND_REFRESH_OTR); + refreshOtr.addActionListener(this); + switch (this.sessionStatus) { case ENCRYPTED: - JMenuItem refreshOtr = new JMenuItem(); - refreshOtr.setText(OtrActivator.resourceService - .getI18NString("plugin.otr.menu.REFRESH_OTR")); - refreshOtr.setEnabled(policy.getEnableManual()); - refreshOtr.setActionCommand(ACTION_COMMAND_REFRESH_OTR); - refreshOtr.addActionListener(this); - JMenuItem authBuddy = new JMenuItem(); authBuddy.setText(OtrActivator.resourceService .getI18NString("plugin.otr.menu.AUTHENTICATE_BUDDY")); @@ -270,12 +284,12 @@ private void buildMenu() if (separateMenu != null) { separateMenu.add(endOtr); - separateMenu.add(startOtr); + separateMenu.add(refreshOtr); } else { parentMenu.add(endOtr); - parentMenu.add(startOtr); + parentMenu.add(refreshOtr); } break; @@ -296,21 +310,34 @@ private void buildMenu() cbEnable.addActionListener(this); JCheckBoxMenuItem cbAlways = new JCheckBoxMenuItem(); - cbAlways.setText(OtrActivator.resourceService - .getI18NString("plugin.otr.menu.CB_AUTO")); + cbAlways.setText(String.format( + OtrActivator.resourceService + .getI18NString( + "plugin.otr.menu.CB_AUTO", + new String[] {contact.getDisplayName()}))); cbAlways.setEnabled(policy.getEnableManual()); + cbAlways.setSelected(policy.getEnableAlways()); + + cbAlways.setActionCommand(ACTION_COMMAND_CB_AUTO); + cbAlways.addActionListener(this); + + JCheckBoxMenuItem cbAlwaysAll = new JCheckBoxMenuItem(); + cbAlwaysAll.setText(OtrActivator.resourceService + .getI18NString("plugin.otr.menu.CB_AUTO_ALL")); + cbAlwaysAll.setEnabled(policy.getEnableManual()); + String autoInitPropValue = OtrActivator.configService.getString( OtrActivator.AUTO_INIT_OTR_PROP); - boolean isAutoInit = policy.getEnableAlways(); + boolean isAutoInit = + OtrActivator.scOtrEngine.getGlobalPolicy().getEnableAlways(); if (autoInitPropValue != null) isAutoInit = Boolean.parseBoolean(autoInitPropValue); + cbAlwaysAll.setSelected(isAutoInit); - cbAlways.setSelected(isAutoInit); - - cbAlways.setActionCommand(ACTION_COMMAND_CB_AUTO); - cbAlways.addActionListener(this); + cbAlwaysAll.setActionCommand(ACTION_COMMAND_CB_AUTO_ALL); + cbAlwaysAll.addActionListener(this); JCheckBoxMenuItem cbRequire = new JCheckBoxMenuItem(); cbRequire.setText(OtrActivator.resourceService @@ -346,6 +373,7 @@ else if (!isMandatory && defaultOtrPropValue != null) separateMenu.addSeparator(); separateMenu.add(cbEnable); separateMenu.add(cbAlways); + separateMenu.add(cbAlwaysAll); separateMenu.add(cbRequire); separateMenu.addSeparator(); separateMenu.add(cbReset); @@ -357,6 +385,7 @@ else if (!isMandatory && defaultOtrPropValue != null) parentMenu.addSeparator(); parentMenu.add(cbEnable); parentMenu.add(cbAlways); + parentMenu.add(cbAlwaysAll); parentMenu.add(cbRequire); parentMenu.addSeparator(); parentMenu.add(cbReset); diff --git a/src/net/java/sip/communicator/plugin/otr/ScOtrEngineImpl.java b/src/net/java/sip/communicator/plugin/otr/ScOtrEngineImpl.java index 4e929b876..594c8f1aa 100644 --- a/src/net/java/sip/communicator/plugin/otr/ScOtrEngineImpl.java +++ b/src/net/java/sip/communicator/plugin/otr/ScOtrEngineImpl.java @@ -597,7 +597,7 @@ public OtrPolicy getContactPolicy(Contact contact) public OtrPolicy getGlobalPolicy() { return new OtrPolicyImpl(this.configurator.getPropertyInt("POLICY", - OtrPolicy.OTRL_POLICY_DEFAULT)); + OtrPolicy.OTRL_POLICY_MANUAL)); } /**