diff --git a/resources/install/windows/SCRegistrySpec.wxi b/resources/install/windows/SCRegistrySpec.wxi index 68761586c..af2c5cdb2 100644 --- a/resources/install/windows/SCRegistrySpec.wxi +++ b/resources/install/windows/SCRegistrySpec.wxi @@ -79,8 +79,57 @@ Name="IMApplication" Type="string" Value="@APP_LAUNCHER_NAME@.exe" /> + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/install/windows/en-us.wxl b/resources/install/windows/en-us.wxl index c4ae9b295..c64ea724d 100644 --- a/resources/install/windows/en-us.wxl +++ b/resources/install/windows/en-us.wxl @@ -17,6 +17,7 @@ &Desktop &Auto-start when computer restarts or reboots &Associate Protocols + M&ake [ProductName] the default Instant Messaging Provider (Outlook integration) diff --git a/resources/install/windows/fr-fr.wxl b/resources/install/windows/fr-fr.wxl index e174a9d1f..76f7da715 100644 --- a/resources/install/windows/fr-fr.wxl +++ b/resources/install/windows/fr-fr.wxl @@ -17,6 +17,7 @@ Placer un accès direct sur le Bureau Lancer automatiquement quand l’ordinateur démarre &Protocoles associés + M&ake [ProductName] the default Instant Messaging Provider (Outlook integration) diff --git a/resources/install/windows/installer-windows.wxs b/resources/install/windows/installer-windows.wxs index c70623d8a..d7578fc0f 100644 --- a/resources/install/windows/installer-windows.wxs +++ b/resources/install/windows/installer-windows.wxs @@ -199,14 +199,16 @@ - + + - - - + + + + @@ -440,6 +442,14 @@ HAS_STARTUP_SHORTCUT + + + - + diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties index 8c410f39e..e957d025a 100644 --- a/resources/languages/resources.properties +++ b/resources/languages/resources.properties @@ -869,6 +869,7 @@ plugin.addrbook.ENABLE_MICROSOFT_OUTLOOK=Enable Microsoft Outlook search plugin.addrbook.DESCRIPTION=If enabled everything you type in the search field \ of the contact list will be also searched in your system address book and all \ matching contacts from your address book will appear in your contact list. + plugin.addrbook.DEFAULT_IM_APP=Make Jitsi the default Instant Messaging Provider (Outlook integration) plugin.addrbook.PREFIX=Specific phone number prefix plugin.addrbook.PREFIX_EXAMPLE=Ex.: 00 diff --git a/src/net/java/sip/communicator/plugin/addrbook/AddrBookActivator.java b/src/net/java/sip/communicator/plugin/addrbook/AddrBookActivator.java index ec8572b13..330711568 100644 --- a/src/net/java/sip/communicator/plugin/addrbook/AddrBookActivator.java +++ b/src/net/java/sip/communicator/plugin/addrbook/AddrBookActivator.java @@ -8,6 +8,7 @@ import java.util.*; +import net.java.sip.communicator.plugin.addrbook.msoutlook.DefaultIMApp; import net.java.sip.communicator.service.contactsource.*; import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.util.*; @@ -23,6 +24,7 @@ * support for OS-specific Address Book. * * @author Lyubomir Marinov + * @author Hristo Terezov */ public class AddrBookActivator implements BundleActivator @@ -39,6 +41,20 @@ public class AddrBookActivator */ public static final String PNAME_ENABLE_MACOSX_ADDRESS_BOOK_SEARCH = "plugin.addrbook.ENABLE_MACOSX_ADDRESS_BOOK_SEARCH"; + + /** + * Boolean property that defines whether changing the default IM application + * is enabled or not. + */ + public static final String PNAME_ENABLE_DEFAULT_IM_APPLICATION_CHANGE = + "plugin.addrbook.ENABLE_DEFAULT_IM_APPLICATION_CHANGE"; + + /** + * Boolean property that defines whether Jitsi should be the default IM + * Application or not. + */ + public static final String PNAME_MAKE_JITSI_DEFAULT_IM_APPLICATION = + "plugin.addrbook.MAKE_JITSI_DEFAULT_IM_APPLICATION"; /** * The Logger used by the AddrBookActivator class and its @@ -46,7 +62,7 @@ public class AddrBookActivator */ private static final Logger logger = Logger.getLogger(AddrBookActivator.class); - + /** * The BundleContext in which the addrbook plug-in is started. */ @@ -179,9 +195,9 @@ static void startService() { /* Register the ContactSourceService implementation (if any). */ String cssClassName; - + ConfigurationService configService = getConfigService(); if (OSUtils.IS_WINDOWS - && getConfigService().getBoolean( + && configService.getBoolean( PNAME_ENABLE_MICROSOFT_OUTLOOK_SEARCH, true)) { @@ -190,7 +206,7 @@ && getConfigService().getBoolean( + ".msoutlook.MsOutlookAddrBookContactSourceService"; } else if (OSUtils.IS_MAC - && getConfigService().getBoolean( + && configService.getBoolean( PNAME_ENABLE_MACOSX_ADDRESS_BOOK_SEARCH, true)) { cssClassName @@ -199,6 +215,36 @@ && getConfigService().getBoolean( } else return; + + if (OSUtils.IS_WINDOWS + && configService.getBoolean( + PNAME_ENABLE_DEFAULT_IM_APPLICATION_CHANGE, true)) + { + String isDefaultIMAppString = configService.getString( + PNAME_MAKE_JITSI_DEFAULT_IM_APPLICATION); + if(isDefaultIMAppString == null) + { + configService.setProperty( + PNAME_MAKE_JITSI_DEFAULT_IM_APPLICATION, + DefaultIMApp.isJitsiDefaultIMApp()); + } + else + { + boolean isDefaultIMApp + = Boolean.parseBoolean(isDefaultIMAppString); + if(DefaultIMApp.isJitsiDefaultIMApp() != isDefaultIMApp) + { + if(isDefaultIMApp) + { + setAsDefaultIMApplication(); + } + else + { + unsetDefaultIMApplication(); + } + } + } + } try { @@ -272,4 +318,26 @@ static void stopService() } } } + + /** + * Sets Jitsi as Default IM application. + */ + public static void setAsDefaultIMApplication() + { + if (OSUtils.IS_WINDOWS) + { + DefaultIMApp.setJitsiAsDefaultApp(); + } + } + + /** + * Unsets Jitsi as Default IM application. + */ + public static void unsetDefaultIMApplication() + { + if (OSUtils.IS_WINDOWS) + { + DefaultIMApp.unsetDefaultApp(); + } + } } diff --git a/src/net/java/sip/communicator/plugin/addrbook/AdvancedConfigForm.java b/src/net/java/sip/communicator/plugin/addrbook/AdvancedConfigForm.java index 5bd25c1a1..bc4c055d1 100644 --- a/src/net/java/sip/communicator/plugin/addrbook/AdvancedConfigForm.java +++ b/src/net/java/sip/communicator/plugin/addrbook/AdvancedConfigForm.java @@ -58,9 +58,17 @@ public AdvancedConfigForm() "plugin.addrbook.ENABLE_MACOSX_ADDRESSBOOK")); if (OSUtils.IS_WINDOWS) + { propertiesPanel.add(createEnableCheckBox( AddrBookActivator.PNAME_ENABLE_MICROSOFT_OUTLOOK_SEARCH, "plugin.addrbook.ENABLE_MICROSOFT_OUTLOOK")); + if(AddrBookActivator.getConfigService().getBoolean( + AddrBookActivator.PNAME_ENABLE_DEFAULT_IM_APPLICATION_CHANGE, + true)) + propertiesPanel.add(createDefaultIMApplicationCheckBox( + AddrBookActivator.PNAME_MAKE_JITSI_DEFAULT_IM_APPLICATION, + "plugin.addrbook.DEFAULT_IM_APP")); + } propertiesPanel.add(Box.createVerticalStrut(15)); @@ -100,6 +108,38 @@ public void actionPerformed(ActionEvent arg0) }); return checkBox; } + + /** + * Creates the default IM application check box. + * + * @return the default IM application check box. + */ + private Component createDefaultIMApplicationCheckBox( + final String configPropName, String labelNameKey) + { + final JCheckBox checkBox = new SIPCommCheckBox(AddrBookActivator + .getResources().getI18NString( + labelNameKey), + AddrBookActivator.getConfigService().getBoolean(configPropName, + false)); + checkBox.setAlignmentX(Component.LEFT_ALIGNMENT); + + checkBox.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent arg0) + { + AddrBookActivator.getConfigService().setProperty( + configPropName, + new Boolean(checkBox.isSelected()).toString()); + + if (checkBox.isSelected()) + AddrBookActivator.setAsDefaultIMApplication(); + else + AddrBookActivator.unsetDefaultIMApplication(); + } + }); + return checkBox; + } /** * Creates the prefix panel. diff --git a/src/net/java/sip/communicator/plugin/addrbook/addrbook.manifest.mf b/src/net/java/sip/communicator/plugin/addrbook/addrbook.manifest.mf index 615b8130c..c006173ce 100644 --- a/src/net/java/sip/communicator/plugin/addrbook/addrbook.manifest.mf +++ b/src/net/java/sip/communicator/plugin/addrbook/addrbook.manifest.mf @@ -7,6 +7,7 @@ Bundle-SymbolicName: net.java.sip.communicator.plugin.addrbook Import-Package: javax.swing, org.jitsi.service.configuration, org.jitsi.util, + com.sun.jna.platform.win32, net.java.sip.communicator.service.contactsource, net.java.sip.communicator.service.gui, net.java.sip.communicator.service.protocol, diff --git a/src/net/java/sip/communicator/plugin/addrbook/msoutlook/DefaultIMApp.java b/src/net/java/sip/communicator/plugin/addrbook/msoutlook/DefaultIMApp.java new file mode 100644 index 000000000..98ba26093 --- /dev/null +++ b/src/net/java/sip/communicator/plugin/addrbook/msoutlook/DefaultIMApp.java @@ -0,0 +1,115 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.plugin.addrbook.msoutlook; + +import com.sun.jna.platform.win32.*; + +import net.java.sip.communicator.plugin.addrbook.*; + +/** + * Reading and writing the registry for default IM application used by + * Outlook 2010 and higher integration of presence statuses. + * + * @author Hristo Terezov + */ +public class DefaultIMApp +{ + /** + * The key under which the default IM application is placed. + */ + private static String REGISTRY_DEFAULT_IM_APPLICATION_KEY + = "Software\\IM Providers"; + + /** + * The value under which the default IM application is placed. + */ + private static String REGISTRY_DEFAULT_IM_APPLICATION_VALUE + = "DefaultIMApp"; + + /** + * Default IM application for communicator. This value is used to unset + * Jitsi as default application. + */ + private static String REGISTRY_DEFAULT_IM_APPLICATION_COMMUNICATOR + = "Communicator"; + + /** + * Checks whether given application is the default IM application or not. + * @param appName the application name. + * @return is the default IM application or not. + */ + public static boolean isDefaultIMApp(String appName) + { + return Advapi32Util.registryGetStringValue( + WinReg.HKEY_CURRENT_USER, + REGISTRY_DEFAULT_IM_APPLICATION_KEY, + REGISTRY_DEFAULT_IM_APPLICATION_VALUE).equals(appName); + } + + /** + * Checks whether Jitsi is the default IM application. + * @return is Jitsi the default IM application or not. + */ + public static boolean isJitsiDefaultIMApp() + { + if(!Advapi32Util.registryValueExists(WinReg.HKEY_CURRENT_USER, + REGISTRY_DEFAULT_IM_APPLICATION_KEY, + REGISTRY_DEFAULT_IM_APPLICATION_VALUE)) + return false; + + return Advapi32Util.registryGetStringValue( + WinReg.HKEY_CURRENT_USER, + REGISTRY_DEFAULT_IM_APPLICATION_KEY, + REGISTRY_DEFAULT_IM_APPLICATION_VALUE).equals( + getApplicationName()); + } + + /** + * Sets given application as default IM application + * + * @param appName the application name + */ + public static void setDefaultIMApp(String appName) + { + + Advapi32Util.registrySetStringValue( + WinReg.HKEY_CURRENT_USER, + REGISTRY_DEFAULT_IM_APPLICATION_KEY, + REGISTRY_DEFAULT_IM_APPLICATION_VALUE, + appName); + } + + /** + * Sets Jitsi as default IM application. + */ + public static void setJitsiAsDefaultApp() + { + String appName = getApplicationName(); + if(!isDefaultIMApp(appName)) + setDefaultIMApp(appName); + } + + /** + * Unsets Jitsi as default IM application. Overrides the registry value + * with setting communicator as default IM application. + */ + public static void unsetDefaultApp() + { + if(isDefaultIMApp(getApplicationName())) + setDefaultIMApp(REGISTRY_DEFAULT_IM_APPLICATION_COMMUNICATOR); + } + + /** + * Returns the application name. + * @return the application name + */ + private static String getApplicationName() + { + return AddrBookActivator.getResources().getSettingsString( + "service.gui.APPLICATION_NAME"); + } +}