From dc0fc296d4e71dfd2ad681eb87bce6c3dd55402a Mon Sep 17 00:00:00 2001 From: hristoterezov Date: Wed, 5 Mar 2014 13:05:47 +0200 Subject: [PATCH] Adds Jitsi to the list of IM Providers in windows registry. Adds checkbox to the windows installer and the Options dialog which allows the user to make Jitsi the default IM provider. --- resources/install/windows/SCRegistrySpec.wxi | 65 ++++++++++ resources/install/windows/en-us.wxl | 1 + resources/install/windows/fr-fr.wxl | 1 + .../install/windows/installer-windows.wxs | 20 ++- resources/languages/resources.properties | 1 + .../plugin/addrbook/AddrBookActivator.java | 76 +++++++++++- .../plugin/addrbook/AdvancedConfigForm.java | 40 ++++++ .../plugin/addrbook/addrbook.manifest.mf | 1 + .../addrbook/msoutlook/DefaultIMApp.java | 115 ++++++++++++++++++ 9 files changed, 311 insertions(+), 9 deletions(-) create mode 100644 src/net/java/sip/communicator/plugin/addrbook/msoutlook/DefaultIMApp.java 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"); + } +}