diff --git a/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsActivator.java b/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsActivator.java index 6e2a0e0a9..243b9f095 100644 --- a/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsActivator.java +++ b/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsActivator.java @@ -288,7 +288,9 @@ public void run() { enableContactSource( provider.getAccountID().getAccountAddress(), - password); + password, + provider.getProtocolDisplayName().equals( + "Google Talk")); } } }).start(); @@ -348,15 +350,19 @@ public void stop(BundleContext bundleContext) * * @param login login * @param password password + * @param googleTalk if the provider service is GoogleTalk * @return a GoogleContactsSourceService instance */ public static GoogleContactsSourceService enableContactSource( - String login, String password) + String login, String password, + boolean googleTalk) { GoogleContactsSourceService css = new GoogleContactsSourceService( login, password); ServiceRegistration cssServiceRegistration = null; + css.setGoogleTalk(googleTalk); + try { cssServiceRegistration @@ -386,14 +392,19 @@ public static GoogleContactsSourceService enableContactSource( * GoogleContactsConnection. * * @param cnx GoogleContactsConnection + * @param googleTalk if the contact source has been created as GoogleTalk + * account or via external Google Contacts * @return a GoogleContactsSourceService instance */ public static GoogleContactsSourceService enableContactSource( - GoogleContactsConnection cnx) + GoogleContactsConnection cnx, + boolean googleTalk) { GoogleContactsSourceService css = new GoogleContactsSourceService(cnx); ServiceRegistration cssServiceRegistration = null; + css.setGoogleTalk(googleTalk); + try { cssServiceRegistration diff --git a/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsServiceImpl.java b/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsServiceImpl.java index 6861fbfee..0b1c98d49 100644 --- a/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsServiceImpl.java +++ b/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsServiceImpl.java @@ -157,7 +157,7 @@ private void loadConfig() /* register contact source */ if(cnx.isEnabled()) { - addContactSource(cnx); + addContactSource(cnx, true); } } } @@ -430,14 +430,17 @@ public GoogleContactsConnection getConnection(String login, } /** - * Add a contact source service with the specified. - * + * Add a contact source service with the specified * GoogleContactsConnection. + * * @param cnx GoogleContactsConnection. + * @param googleTalk if the contact source has been created as GoogleTalk + * account or via external Google Contacts */ - public void addContactSource(GoogleContactsConnection cnx) + public void addContactSource(GoogleContactsConnection cnx, + boolean googleTalk) { - GoogleContactsActivator.enableContactSource(cnx); + GoogleContactsActivator.enableContactSource(cnx, googleTalk); } /** @@ -449,7 +452,7 @@ public void addContactSource(GoogleContactsConnection cnx) */ public void addContactSource(String login, String password) { - GoogleContactsActivator.enableContactSource(login, password); + GoogleContactsActivator.enableContactSource(login, password, false); } /** diff --git a/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsSourceService.java b/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsSourceService.java index 1a71e822f..518d5e20e 100644 --- a/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsSourceService.java +++ b/src/net/java/sip/communicator/impl/googlecontacts/GoogleContactsSourceService.java @@ -59,6 +59,12 @@ public class GoogleContactsSourceService */ private AccountSettingsForm settings = null; + /** + * If the account has been created using GoogleTalk wizard or via + * external Google Contacts. + */ + private boolean googleTalk = false; + /** * Constructor. * @@ -96,6 +102,29 @@ public String getLogin() return login; } + /** + * Set whether or not the account has been created via GoogleTalk wizard or + * external Google contacts. + * + * @param googleTalk value to set + */ + public void setGoogleTalk(boolean googleTalk) + { + this.googleTalk = googleTalk; + } + + /** + * Returns whether or not the account has been created via GoogleTalk + * wizard or via external Google Contacts. + * + * @return true if account has been created via GoogleTalk wizard or via + * external Google Contacts. + */ + public boolean isGoogleTalk() + { + return googleTalk; + } + /** * Queries this search source for the given searchPattern. * @@ -174,6 +203,12 @@ public GoogleContactsConnectionImpl getConnection() return null; } + // To detect that account is a google ones, we try the following: + // - lookup in SRV and see if it is google.com; + // - if the account has been created with GoogleTalk form; + // - if it is an "external" google contact. + + // SRV checks for(SRVRecord srv : srvRecords) { if(srv.getTarget().endsWith("google.com") || @@ -184,6 +219,12 @@ public GoogleContactsConnectionImpl getConnection() } } + // GoogleTalk based account or external Google Contacts ? + if(!isGoogleAppsOrGmail) + { + isGoogleAppsOrGmail = googleTalk; + } + if(isGoogleAppsOrGmail) { if(cnx == null) diff --git a/src/net/java/sip/communicator/impl/googlecontacts/configform/GoogleContactsConfigForm.java b/src/net/java/sip/communicator/impl/googlecontacts/configform/GoogleContactsConfigForm.java index 033456b92..d170fafd1 100644 --- a/src/net/java/sip/communicator/impl/googlecontacts/configform/GoogleContactsConfigForm.java +++ b/src/net/java/sip/communicator/impl/googlecontacts/configform/GoogleContactsConfigForm.java @@ -225,8 +225,8 @@ public void actionPerformed(ActionEvent e) if(ret == 1) { - GoogleContactsConnectionImpl cnx - = (GoogleContactsConnectionImpl) settingsForm.getConnection(); + GoogleContactsConnectionImpl cnx = + (GoogleContactsConnectionImpl) settingsForm.getConnection(); tableModel.addAccount(cnx, true, cnx.getPrefix()); new RefreshContactSourceThread(null, cnx).start(); GoogleContactsActivator.getGoogleContactsService().saveConfig( @@ -351,7 +351,7 @@ public void run() if(newCnx != null) { GoogleContactsActivator.getGoogleContactsService(). - addContactSource(newCnx); + addContactSource(newCnx, true); } } } diff --git a/src/net/java/sip/communicator/impl/googlecontacts/configform/GoogleContactsTableModel.java b/src/net/java/sip/communicator/impl/googlecontacts/configform/GoogleContactsTableModel.java index 3347f4d8e..5f1bdb1ea 100644 --- a/src/net/java/sip/communicator/impl/googlecontacts/configform/GoogleContactsTableModel.java +++ b/src/net/java/sip/communicator/impl/googlecontacts/configform/GoogleContactsTableModel.java @@ -204,7 +204,7 @@ public Class getColumnClass(int columnIndex) */ public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - if(columnIndex != 0 || columnIndex != 2) + if(columnIndex != 0 && columnIndex != 2) throw new IllegalArgumentException("non editable column!"); GoogleContactsConfigForm.RefreshContactSourceThread th = null; diff --git a/src/net/java/sip/communicator/service/googlecontacts/GoogleContactsService.java b/src/net/java/sip/communicator/service/googlecontacts/GoogleContactsService.java index c61351eb4..cee058866 100644 --- a/src/net/java/sip/communicator/service/googlecontacts/GoogleContactsService.java +++ b/src/net/java/sip/communicator/service/googlecontacts/GoogleContactsService.java @@ -58,9 +58,12 @@ public GoogleContactsConnection getConnection(String login, * Add a contact source service with the specified * GoogleContactsConnection. * - * @param cnx GoogleContactsConnection. + * @param cnx GoogleContactsConnection + * @param googleTalk if the contact source has been created as GoogleTalk + * account or via external Google Contacts */ - public void addContactSource(GoogleContactsConnection cnx); + public void addContactSource(GoogleContactsConnection cnx, + boolean googleTalk); /** * Remove a contact source service with the specified