From 4882645311dde59e9dd5eccbc8de6dc8829ed64a Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 15 Feb 2023 20:10:47 +0100 Subject: [PATCH] Little refactoring per Essegrande --- .../integrywmsnative/core/CommonConst.java | 3 +- .../core/menu/MenuRESTConsumer.java | 4 +- .../core/rest/RESTBuilder.java | 59 ++++++++++++++++--- .../core/rest/model/ServiceRESTResponse.java | 7 --- .../rest/watcher/ServerStatusChecker.java | 1 + .../core/settings/SettingsModel.java | 10 ++++ .../core/utility/UtilityServer.java | 15 +++-- .../gest/login/LoginActivity.java | 10 ++-- .../gest/login/dto/LoginDTO.java | 27 --------- .../gest/login/dto/LoginRequestDTO.java | 25 ++++++++ .../gest/login/dto/LoginResponseDTO.java | 19 ++++++ .../gest/login/rest/LoginRESTConsumer.java | 23 +++++--- .../login/rest/LoginRESTConsumerService.java | 6 +- .../gest/login/viewmodel/LoginViewModel.java | 18 +++--- 14 files changed, 151 insertions(+), 76 deletions(-) delete mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginRequestDTO.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginResponseDTO.java diff --git a/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java b/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java index bdfaa248..dfb86ddf 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java @@ -5,8 +5,9 @@ public class CommonConst { public static class Login { public static class Azienda { + public static String protocol = "https"; public static String host = "www2.studioml.it"; - public static int port = 80; + public static int port = 443; } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/menu/MenuRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/menu/MenuRESTConsumer.java index 6ed857c3..3d773ddf 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/menu/MenuRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/menu/MenuRESTConsumer.java @@ -19,9 +19,7 @@ public class MenuRESTConsumer extends _BaseRESTConsumer { menuRESTConsumerService.retrieveMenuConfig(rootCodOpz).enqueue(new Callback<>() { @Override public void onResponse(Call> call, Response> response) { - analyzeAnswer(response, "retrieveMenu", (m) -> { - onComplete.run(response.body().getEntity()); - }, onFailed); + analyzeAnswer(response, "retrieveMenu", onComplete, onFailed); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/RESTBuilder.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/RESTBuilder.java index cafdca2d..6f5aee50 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/RESTBuilder.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/RESTBuilder.java @@ -4,10 +4,16 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.lang.reflect.Modifier; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.concurrent.TimeUnit; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + import it.integry.integrywmsnative.core.rest.deserializer.LocalDateDeserializer; import it.integry.integrywmsnative.core.rest.deserializer.LocalDateTimeDeserializer; import it.integry.integrywmsnative.core.rest.serializer.LocalDateSerializer; @@ -26,25 +32,25 @@ public class RESTBuilder { private static final boolean ADD_LOGGER_INTERCEPTOR = false; public static T getService(final Class service) { - return getService(service, SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true); + return getService(service, SettingsManager.i().getServer().getProtocol(), SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true); } public static T getService(final Class service, int timeout) { - return getService(service, SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true, true, timeout); + return getService(service, SettingsManager.i().getServer().getProtocol(), SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true, true, timeout); } - public static T getService(final Class service, String host, int port, boolean addInterceptors) { - return getService(service, host, port, addInterceptors, true, 60); + public static T getService(final Class service, String protocol, String host, int port, boolean addInterceptors) { + return getService(service, protocol, host, port, addInterceptors, true, 60); } - public static T getService(final Class service, String host, int port, boolean addInterceptors, boolean addEmsApi) { - return getService(service, host, port, addInterceptors, addEmsApi, 60); + public static T getService(final Class service, String protocol, String host, int port, boolean addInterceptors, boolean addEmsApi) { + return getService(service, protocol, host, port, addInterceptors, addEmsApi, 60); } - public static T getService(final Class service, String host, int port, boolean addInterceptors, boolean addEmsApi, int timeout) { - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); + public static T getService(final Class service, String protocol, String host, int port, boolean addInterceptors, boolean addEmsApi, int timeout) { + OkHttpClient.Builder clientBuilder = getDefaultHttpClient(); clientBuilder.connectTimeout(timeout, TimeUnit.SECONDS); clientBuilder.readTimeout(timeout, TimeUnit.SECONDS); @@ -57,7 +63,7 @@ public class RESTBuilder { OkHttpClient client = clientBuilder.build(); - String endpoint = "http://" + host + ":" + port + "/" + (addEmsApi ? "ems-api/" : ""); + String endpoint = protocol + "://" + host + ":" + port + "/" + (addEmsApi ? "ems-api/" : ""); Gson gson = new GsonBuilder() @@ -82,4 +88,39 @@ public class RESTBuilder { public static int getDefaultPort() { return SettingsManager.i().getServer().getPort(); } + + + public static OkHttpClient.Builder getDefaultHttpClient() { + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + @Override + public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { + } + + @Override + public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { + } + + @Override + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return new java.security.cert.X509Certificate[]{}; + } + } + }; + + SSLContext sslContext = null; + try { + sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); + } catch (KeyManagementException | NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + + + OkHttpClient.Builder client = new OkHttpClient.Builder() + .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0]) + .hostnameVerifier((hostname, session) -> true); + + return client; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/ServiceRESTResponse.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/ServiceRESTResponse.java index 0f06e9af..511f2450 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/ServiceRESTResponse.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/ServiceRESTResponse.java @@ -1,10 +1,7 @@ package it.integry.integrywmsnative.core.rest.model; -import java.util.Date; import java.util.List; -import it.integry.integrywmsnative.core.utility.UtilityDate; - /** * Created by GiuseppeS on 06/03/2018. */ @@ -12,7 +9,6 @@ import it.integry.integrywmsnative.core.utility.UtilityDate; public class ServiceRESTResponse { private int esito; - private String execDate; private String profileDB; private String errorMessage; @@ -24,9 +20,6 @@ public class ServiceRESTResponse { return EsitoType.fromIntValue(esito); } - public Date getExecDate() { - return UtilityDate.recognizeDateWithExceptionHandler(execDate); - } public String getProfileDB() { return profileDB; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/watcher/ServerStatusChecker.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/watcher/ServerStatusChecker.java index aa7a5e85..8a9daacb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/watcher/ServerStatusChecker.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/watcher/ServerStatusChecker.java @@ -32,6 +32,7 @@ public class ServerStatusChecker { public void run() { if (shouldExecute && !UtilityString.isNullOrEmpty(SettingsManager.i().getServer().getHost())) { UtilityServer.isEmsApiAvailable( + SettingsManager.i().getServer().getProtocol(), SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), () -> mInternalCallback.run(true), diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java index cf6fafe1..1d29a0fb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java @@ -20,6 +20,7 @@ public class SettingsModel { public static class Server { private String codAzienda; + private String protocol; private String host; private int port; @@ -32,6 +33,15 @@ public class SettingsModel { return this; } + public String getProtocol() { + return protocol; + } + + public Server setProtocol(String protocol) { + this.protocol = protocol; + return this; + } + public String getHost() { return host; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java index 3ffe676b..63b09593 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java @@ -7,8 +7,8 @@ import java.net.SocketAddress; import it.integry.integrywmsnative.core.exception.InvalidLicenseException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.gest.login.exception.ServerNotReachableException; -import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -38,16 +38,18 @@ public class UtilityServer { }).start(); } - public static void isEmsApiAvailable(final String serverAddress, final int serverTCPport, final Runnable onComplete, final RunnableArgs onFailed) { + public static void isEmsApiAvailable(final String protocol, final String serverAddress, final int serverTCPport, final Runnable onComplete, final RunnableArgs onFailed) { new Thread(() -> { - OkHttpClient client = new OkHttpClient(); + Request request = new Request.Builder() - .url(String.format("http://%s:%d/ems-api/system/ok", serverAddress, serverTCPport)) + .url(String.format("%s://%s:%d/ems-api/system/ok", protocol, serverAddress, serverTCPport)) .build(); try { - Response response = client.newCall(request).execute(); + Response response = RESTBuilder.getDefaultHttpClient().build() + .newCall(request) + .execute(); response.close(); if (response.code() == 200) onComplete.run(); @@ -55,7 +57,8 @@ public class UtilityServer { onFailed.run(new ServerNotReachableException(serverAddress, serverTCPport, null)); else if (response.code() == 550) onFailed.run(new InvalidLicenseException()); - else onFailed.run(new Exception("Errore non identificato (STATUS: " + response.code() + ")")); + else + onFailed.run(new Exception("Errore non identificato (STATUS: " + response.code() + ")")); } catch (IOException e) { onFailed.run(new ServerNotReachableException(serverAddress, serverTCPport, e)); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginActivity.java index 6a10bbf6..6f54e867 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginActivity.java @@ -98,14 +98,14 @@ public class LoginActivity extends BaseActivity implements LoginViewModel.Listen } @Override - public void onLoginCompleted(String host, int port, String fullName, List availableProfiles) { + public void onLoginCompleted(String protocol, String host, int port, String fullName, List availableProfiles) { this.onLoadingEnded(); runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog( "Benvenuto", Html.fromHtml("Ciao " + fullName + ", la Integry le augura di svolgere al meglio il suo lavoro"), null, - () -> showProfileDBSelectionDialog(host, port, availableProfiles)) + () -> showProfileDBSelectionDialog(protocol, host, port, availableProfiles)) .show(getSupportFragmentManager(), "tag")); } @@ -117,7 +117,7 @@ public class LoginActivity extends BaseActivity implements LoginViewModel.Listen loginButtonEnabled.set(true); } - private void showProfileDBSelectionDialog(final String host, final int port, final List availableProfiles) { + private void showProfileDBSelectionDialog(final String protocol, final String host, final int port, final List availableProfiles) { Runnable onComplete = () -> { SettingsManager.update(); @@ -129,7 +129,7 @@ public class LoginActivity extends BaseActivity implements LoginViewModel.Listen if (availableProfiles != null && availableProfiles.size() == 1) { SettingsManager.i().getUserSession().setProfileDB(availableProfiles.get(0)); - mViewmodel.loadDepo(codAzienda.get(), host, port, username.get(), password.get(), onComplete); + mViewmodel.loadDepo(codAzienda.get(), protocol, host, port, username.get(), password.get(), onComplete); } else { // setup the alert builder @@ -144,7 +144,7 @@ public class LoginActivity extends BaseActivity implements LoginViewModel.Listen builder.setItems(profiles, (dialog, which) -> { SettingsManager.i().getUserSession().setProfileDB(availableProfiles.get(which)); - mViewmodel.loadDepo(codAzienda.get(), host, port, username.get(), password.get(), onComplete); + mViewmodel.loadDepo(codAzienda.get(), protocol, host, port, username.get(), password.get(), onComplete); }); // create and show the alert dialog diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java deleted file mode 100644 index 952c9853..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.integry.integrywmsnative.gest.login.dto; - -import java.util.List; - -public class LoginDTO { - - private String full_name; - private List availableProfiles; - - public String getFull_name() { - return full_name; - } - - public LoginDTO setFull_name(String full_name) { - this.full_name = full_name; - return this; - } - - public List getAvailableProfiles() { - return availableProfiles; - } - - public LoginDTO setAvailableProfiles(List availableProfiles) { - this.availableProfiles = availableProfiles; - return this; - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginRequestDTO.java new file mode 100644 index 00000000..440dbdc1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginRequestDTO.java @@ -0,0 +1,25 @@ +package it.integry.integrywmsnative.gest.login.dto; + +public class LoginRequestDTO { + + private String username; + private String password; + + public String getUsername() { + return username; + } + + public LoginRequestDTO setUsername(String username) { + this.username = username; + return this; + } + + public String getPassword() { + return password; + } + + public LoginRequestDTO setPassword(String password) { + this.password = password; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginResponseDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginResponseDTO.java new file mode 100644 index 00000000..c8dae711 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginResponseDTO.java @@ -0,0 +1,19 @@ +package it.integry.integrywmsnative.gest.login.dto; + +import java.util.List; + +public class LoginResponseDTO { + + private String fullName; + private List availableProfiles; + + + public String getFullName() { + return fullName; + } + + public List getAvailableProfiles() { + return availableProfiles; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumer.java index 4693e2ea..67a9070e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumer.java @@ -10,7 +10,8 @@ import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO; -import it.integry.integrywmsnative.gest.login.dto.LoginDTO; +import it.integry.integrywmsnative.gest.login.dto.LoginResponseDTO; +import it.integry.integrywmsnative.gest.login.dto.LoginRequestDTO; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -19,12 +20,13 @@ import retrofit2.Response; public class LoginRESTConsumer extends _BaseRESTConsumer { - public void retrieveServerData(String codAzienda, RunnableArgs onComplete, RunnableArgs onFailed){ + public void retrieveServerData(String codAzienda, RunnableArgs onComplete, RunnableArgs onFailed) { + String protocol = CommonConst.Login.Azienda.protocol; String host = CommonConst.Login.Azienda.host; int port = CommonConst.Login.Azienda.port; - LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, host, port, false, true); + LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, protocol, host, port, false, true); service.loginAzienda(codAzienda).enqueue(new Callback<>() { @Override public void onResponse(Call> call, Response> response) { @@ -40,17 +42,22 @@ public class LoginRESTConsumer extends _BaseRESTConsumer { } - public void authenticate(String host, int port, String username, String password, RunnableArgs onComplete, RunnableArgs onFailed){ - LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, host, port, false); - service.login(username, password).enqueue(new Callback<>() { + public void authenticate(String protocol, String host, int port, String username, String password, RunnableArgs onComplete, RunnableArgs onFailed) { + LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, protocol, host, port, false); + + LoginRequestDTO loginRequestDTO = new LoginRequestDTO() + .setUsername(username) + .setPassword(password); + + service.login(loginRequestDTO).enqueue(new Callback<>() { @Override - public void onResponse(Call> call, Response> response) { + public void onResponse(Call> call, Response> response) { analyzeAnswer(response, "Login", onComplete, onFailed); } @Override - public void onFailure(Call> call, final Throwable t) { + public void onFailure(Call> call, final Throwable t) { Log.e("Login", t.toString()); onFailed.run(new Exception(t)); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumerService.java index 3b4a601e..f2cfb277 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumerService.java @@ -3,8 +3,10 @@ package it.integry.integrywmsnative.gest.login.rest; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO; -import it.integry.integrywmsnative.gest.login.dto.LoginDTO; +import it.integry.integrywmsnative.gest.login.dto.LoginResponseDTO; +import it.integry.integrywmsnative.gest.login.dto.LoginRequestDTO; import retrofit2.Call; +import retrofit2.http.Body; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Query; @@ -16,6 +18,6 @@ public interface LoginRESTConsumerService { Call> loginAzienda(@Query("codHash") String codHash); @POST("loginWeb") - Call> login(@Query("username") String username, @Query("password") String password); + Call> login(@Body LoginRequestDTO loginRequestDTO); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java index 7771456a..32e2709c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java @@ -48,15 +48,16 @@ public class LoginViewModel { return; } + final String protocol = u.getProtocol(); final String host = u.getHost(); final int port = u.getPort(); - UtilityServer.isEmsApiAvailable(host, port, () -> { + UtilityServer.isEmsApiAvailable(protocol, host, port, () -> { - mLoginRESTConsumer.authenticate(host, port, username, password, loginDTO -> { + mLoginRESTConsumer.authenticate(protocol, host, port, username, password, loginDTO -> { SettingsManager.i().createUserSession(); - SettingsManager.i().getUser().setFullname(!UtilityString.isNullOrEmpty(loginDTO.getFull_name()) ? loginDTO.getFull_name() : username); + SettingsManager.i().getUser().setFullname(!UtilityString.isNullOrEmpty(loginDTO.getFullName()) ? loginDTO.getFullName() : username); List availableProfiles = null; if(loginDTO.getAvailableProfiles() != null && !loginDTO.getAvailableProfiles().isEmpty()) { @@ -65,7 +66,7 @@ public class LoginViewModel { .toList(); } - this.sendOnLoginCompleted(host, port, loginDTO.getFull_name(), availableProfiles); + this.sendOnLoginCompleted(protocol, host, port, loginDTO.getFullName(), availableProfiles); }, this::sendError); @@ -76,9 +77,10 @@ public class LoginViewModel { } - public void loadDepo(String codAzienda, String host, int port, String username, String password, Runnable onComplete) { + public void loadDepo(String codAzienda, String protocol, String host, int port, String username, String password, Runnable onComplete) { SettingsManager.i().getServer().setCodAzienda(codAzienda); + SettingsManager.i().getServer().setProtocol(protocol); SettingsManager.i().getServer().setHost(host); SettingsManager.i().getServer().setPort(port); @@ -109,9 +111,9 @@ public class LoginViewModel { if (this.mListener != null) mListener.onLoadingEnded(); } - private void sendOnLoginCompleted(String host, int port, String fullName, List availableProfiles) { + private void sendOnLoginCompleted(String protocol, String host, int port, String fullName, List availableProfiles) { if (this.mListener != null) - mListener.onLoginCompleted(host, port, fullName, availableProfiles); + mListener.onLoginCompleted(protocol, host, port, fullName, availableProfiles); } private void sendError(Exception ex) { @@ -126,7 +128,7 @@ public class LoginViewModel { public interface Listener extends ILoadingListener { void onError(Exception ex); - void onLoginCompleted(String host, int port, String fullName, List availableProfiles); + void onLoginCompleted(String protocol, String host, int port, String fullName, List availableProfiles); } }