From aa6792bfc12c015e6a516a12826c4344c274c921 Mon Sep 17 00:00:00 2001 From: Mushegh98 Date: Wed, 20 May 2020 18:05:42 +0400 Subject: [PATCH 1/2] Implements the base MVVM structure with the Repository and other corresponding generic classes. Implements the Retrofit generic structure and adds dependencies for API Calls. --- build.gradle | 6 +++ ui/build.gradle | 7 +++ .../wireguard/android/api/ApiConstants.java | 10 ++++ .../wireguard/android/api/enums/Status.java | 14 +++++ .../api/interceptor/AcceptInterceptor.java | 26 ++++++++++ .../api/interceptor/UserAgentInterceptor.java | 30 +++++++++++ .../android/api/network/ClientApi.java | 11 ++++ .../android/api/network/ClientService.java | 51 +++++++++++++++++++ .../network/NetworkBoundStatusResource.java | 32 ++++++++++++ .../android/repository/DataRepository.java | 34 +++++++++++++ .../android/resource/StatusResource.java | 38 ++++++++++++++ 11 files changed, 259 insertions(+) create mode 100644 ui/src/main/java/com/wireguard/android/api/ApiConstants.java create mode 100644 ui/src/main/java/com/wireguard/android/api/enums/Status.java create mode 100644 ui/src/main/java/com/wireguard/android/api/interceptor/AcceptInterceptor.java create mode 100644 ui/src/main/java/com/wireguard/android/api/interceptor/UserAgentInterceptor.java create mode 100644 ui/src/main/java/com/wireguard/android/api/network/ClientApi.java create mode 100644 ui/src/main/java/com/wireguard/android/api/network/ClientService.java create mode 100644 ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java create mode 100644 ui/src/main/java/com/wireguard/android/repository/DataRepository.java create mode 100644 ui/src/main/java/com/wireguard/android/resource/StatusResource.java diff --git a/build.gradle b/build.gradle index 1c2eac1..8f0efc9 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,12 @@ buildscript { threetenabpVersion = '1.2.4' zxingEmbeddedVersion = '3.6.0' tunnelVersion = '1.0.20200407' + interceptorVersion = '3.12.2' + transformationVersion = '3.3.0' + gsonVersion = '2.8.6' + eventbusVersion = '3.1.1' + retrofitVersion = '2.7.2' + converterGsonVersion = '2.7.2' groupName = 'com.wireguard.android' } diff --git a/ui/build.gradle b/ui/build.gradle index 99845b4..7c25995 100644 --- a/ui/build.gradle +++ b/ui/build.gradle @@ -81,6 +81,13 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" implementation "net.sourceforge.streamsupport:android-retrofuture:$streamsupportVersion" + //Add for API Calls + implementation "com.squareup.okhttp3:logging-interceptor:$interceptorVersion" + implementation "jp.wasabeef:glide-transformations:$transformationVersion" + implementation "com.google.code.gson:gson:$gsonVersion" + implementation "org.greenrobot:eventbus:$eventbusVersion" + implementation "com.squareup.retrofit2:retrofit:$retrofitVersion" + implementation "com.squareup.retrofit2:converter-gson:$converterGsonVersion" } tasks.withType(JavaCompile) { diff --git a/ui/src/main/java/com/wireguard/android/api/ApiConstants.java b/ui/src/main/java/com/wireguard/android/api/ApiConstants.java new file mode 100644 index 0000000..9488437 --- /dev/null +++ b/ui/src/main/java/com/wireguard/android/api/ApiConstants.java @@ -0,0 +1,10 @@ +/* + * Copyright © 2020 WireGuard LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.wireguard.android.api; + +public class ApiConstants { + public static final String BASE_URL = "https://jtest2.bubblesecure.com:1443/api/"; +} diff --git a/ui/src/main/java/com/wireguard/android/api/enums/Status.java b/ui/src/main/java/com/wireguard/android/api/enums/Status.java new file mode 100644 index 0000000..0cbbd0e --- /dev/null +++ b/ui/src/main/java/com/wireguard/android/api/enums/Status.java @@ -0,0 +1,14 @@ +/* + * Copyright © 2020 WireGuard LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.wireguard.android.api.enums; +/** + Enum for status connection + **/ +public enum Status { + SUCCESS, + ERROR, + LOADING +} diff --git a/ui/src/main/java/com/wireguard/android/api/interceptor/AcceptInterceptor.java b/ui/src/main/java/com/wireguard/android/api/interceptor/AcceptInterceptor.java new file mode 100644 index 0000000..2f5a915 --- /dev/null +++ b/ui/src/main/java/com/wireguard/android/api/interceptor/AcceptInterceptor.java @@ -0,0 +1,26 @@ +/* + * Copyright © 2020 WireGuard LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.wireguard.android.api.interceptor; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + + +public class AcceptInterceptor implements Interceptor { + private final String ACCEPT_KEY = "Content-Type"; + private final String ACCEPT_HEADER = "application/json"; + + @Override + public Response intercept(Chain chain) throws IOException { + Request original = chain.request(); + Request.Builder builder = original.newBuilder().header(ACCEPT_KEY, ACCEPT_HEADER); + Request request = builder.build(); + return chain.proceed(request); + } +} diff --git a/ui/src/main/java/com/wireguard/android/api/interceptor/UserAgentInterceptor.java b/ui/src/main/java/com/wireguard/android/api/interceptor/UserAgentInterceptor.java new file mode 100644 index 0000000..6df3afc --- /dev/null +++ b/ui/src/main/java/com/wireguard/android/api/interceptor/UserAgentInterceptor.java @@ -0,0 +1,30 @@ +/* + * Copyright © 2020 WireGuard LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.wireguard.android.api.interceptor; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + + +public class UserAgentInterceptor implements Interceptor { + private final String USER_AGENT_HEADER_KEY = "User-Agent"; + private String userAgent; + + public UserAgentInterceptor(String userAgent) { + this.userAgent = userAgent; + } + + @Override + public Response intercept(Chain chain) throws IOException { + Request original = chain.request(); + Request.Builder builder = original.newBuilder().header(USER_AGENT_HEADER_KEY, userAgent); + Request request = builder.build(); + return chain.proceed(request); + } +} diff --git a/ui/src/main/java/com/wireguard/android/api/network/ClientApi.java b/ui/src/main/java/com/wireguard/android/api/network/ClientApi.java new file mode 100644 index 0000000..b66c16c --- /dev/null +++ b/ui/src/main/java/com/wireguard/android/api/network/ClientApi.java @@ -0,0 +1,11 @@ +/* + * Copyright © 2020 WireGuard LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.wireguard.android.api.network; +/** + Interface for API Calls + **/ +public interface ClientApi { +} diff --git a/ui/src/main/java/com/wireguard/android/api/network/ClientService.java b/ui/src/main/java/com/wireguard/android/api/network/ClientService.java new file mode 100644 index 0000000..40e8528 --- /dev/null +++ b/ui/src/main/java/com/wireguard/android/api/network/ClientService.java @@ -0,0 +1,51 @@ +/* + * Copyright © 2020 WireGuard LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.wireguard.android.api.network; + +import com.wireguard.android.api.ApiConstants; +import com.wireguard.android.api.interceptor.AcceptInterceptor; +import com.wireguard.android.api.interceptor.UserAgentInterceptor; +import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class ClientService { + private static volatile ClientService clientService = null; + + private ClientService() { + + } + + public static ClientService getInstance() { + if (clientService == null) { + synchronized (ClientService.class) { + if (clientService == null) { + clientService = new ClientService(); + } + } + } + return clientService; + } + + + public ClientApi createClientApi() { + + OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); + + HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); + interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); + httpClient.addInterceptor(interceptor); + + httpClient.addInterceptor(new AcceptInterceptor()); + httpClient.addInterceptor(new UserAgentInterceptor(System.getProperty("http.agent"))); + + return new Retrofit.Builder() + .baseUrl(ApiConstants.BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build().create(ClientApi.class); + } +} diff --git a/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java b/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java new file mode 100644 index 0000000..33d35ba --- /dev/null +++ b/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java @@ -0,0 +1,32 @@ +/* + * Copyright © 2020 WireGuard LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.wireguard.android.api.network; + +import com.wireguard.android.resource.StatusResource; + +import androidx.annotation.MainThread; +import androidx.lifecycle.MutableLiveData; + +public abstract class NetworkBoundStatusResource { + private final MutableLiveData> mutableLiveData = new MutableLiveData<>(); + + @MainThread + public NetworkBoundStatusResource() { + mutableLiveData.setValue(StatusResource.loading()); + createCall(); + } + + @MainThread + protected abstract void createCall(); + + public void setMutableLiveData(StatusResource value) { + mutableLiveData.setValue(value); + } + + public final MutableLiveData> getMutableLiveData() { + return mutableLiveData; + } +} diff --git a/ui/src/main/java/com/wireguard/android/repository/DataRepository.java b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java new file mode 100644 index 0000000..6458b39 --- /dev/null +++ b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java @@ -0,0 +1,34 @@ +/* + * Copyright © 2020 WireGuard LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.wireguard.android.repository; + +import com.wireguard.android.api.network.ClientApi; +import com.wireguard.android.api.network.ClientService; + +public class DataRepository { + private static volatile DataRepository instance; + private ClientApi clientApi; + + private DataRepository() + { + clientApi = ClientService.getInstance().createClientApi(); + } + + public static void buildRepositoryInstance() { + if (instance == null) { + synchronized (DataRepository.class) { + if (instance == null) { + instance = new DataRepository(); + } + } + } + } + + public static DataRepository getRepositoryInstance() { + return instance; + } + +} diff --git a/ui/src/main/java/com/wireguard/android/resource/StatusResource.java b/ui/src/main/java/com/wireguard/android/resource/StatusResource.java new file mode 100644 index 0000000..4d782db --- /dev/null +++ b/ui/src/main/java/com/wireguard/android/resource/StatusResource.java @@ -0,0 +1,38 @@ +/* + * Copyright © 2020 WireGuard LLC. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.wireguard.android.resource; + +import com.wireguard.android.api.enums.Status; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class StatusResource { + @NonNull + public final Status status; + + @Nullable + public final String message; + + + private StatusResource(@NonNull Status status, @Nullable String message) { + this.status = status; + this.message = message; + } + + + public static StatusResource success() { + return new StatusResource<>(Status.SUCCESS,null); + } + + public static StatusResource error(String msg) { + return new StatusResource<>(Status.ERROR,msg); + } + + public static StatusResource loading() { + return new StatusResource<>(Status.LOADING,null); + } +} From e6c802d99e0520d727d02e4e25a43bbad7a683c7 Mon Sep 17 00:00:00 2001 From: Mushegh98 Date: Wed, 20 May 2020 19:22:36 +0400 Subject: [PATCH 2/2] Removed unused dependencies. --- build.gradle | 2 -- ui/build.gradle | 2 -- .../main/java/com/wireguard/android/api/ApiConstants.java | 5 ----- .../main/java/com/wireguard/android/api/enums/Status.java | 5 ----- .../android/api/interceptor/AcceptInterceptor.java | 5 ----- .../android/api/interceptor/UserAgentInterceptor.java | 5 ----- .../java/com/wireguard/android/api/network/ClientApi.java | 5 ----- .../com/wireguard/android/api/network/ClientService.java | 6 +----- .../android/api/network/NetworkBoundStatusResource.java | 5 ----- .../com/wireguard/android/repository/DataRepository.java | 5 ----- .../java/com/wireguard/android/resource/StatusResource.java | 6 ------ 11 files changed, 1 insertion(+), 50 deletions(-) diff --git a/build.gradle b/build.gradle index 8f0efc9..6acab36 100644 --- a/build.gradle +++ b/build.gradle @@ -31,9 +31,7 @@ buildscript { zxingEmbeddedVersion = '3.6.0' tunnelVersion = '1.0.20200407' interceptorVersion = '3.12.2' - transformationVersion = '3.3.0' gsonVersion = '2.8.6' - eventbusVersion = '3.1.1' retrofitVersion = '2.7.2' converterGsonVersion = '2.7.2' diff --git a/ui/build.gradle b/ui/build.gradle index 7c25995..5901b65 100644 --- a/ui/build.gradle +++ b/ui/build.gradle @@ -83,9 +83,7 @@ dependencies { implementation "net.sourceforge.streamsupport:android-retrofuture:$streamsupportVersion" //Add for API Calls implementation "com.squareup.okhttp3:logging-interceptor:$interceptorVersion" - implementation "jp.wasabeef:glide-transformations:$transformationVersion" implementation "com.google.code.gson:gson:$gsonVersion" - implementation "org.greenrobot:eventbus:$eventbusVersion" implementation "com.squareup.retrofit2:retrofit:$retrofitVersion" implementation "com.squareup.retrofit2:converter-gson:$converterGsonVersion" } diff --git a/ui/src/main/java/com/wireguard/android/api/ApiConstants.java b/ui/src/main/java/com/wireguard/android/api/ApiConstants.java index 9488437..57c2854 100644 --- a/ui/src/main/java/com/wireguard/android/api/ApiConstants.java +++ b/ui/src/main/java/com/wireguard/android/api/ApiConstants.java @@ -1,8 +1,3 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - package com.wireguard.android.api; public class ApiConstants { diff --git a/ui/src/main/java/com/wireguard/android/api/enums/Status.java b/ui/src/main/java/com/wireguard/android/api/enums/Status.java index 0cbbd0e..c868895 100644 --- a/ui/src/main/java/com/wireguard/android/api/enums/Status.java +++ b/ui/src/main/java/com/wireguard/android/api/enums/Status.java @@ -1,8 +1,3 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - package com.wireguard.android.api.enums; /** Enum for status connection diff --git a/ui/src/main/java/com/wireguard/android/api/interceptor/AcceptInterceptor.java b/ui/src/main/java/com/wireguard/android/api/interceptor/AcceptInterceptor.java index 2f5a915..928385c 100644 --- a/ui/src/main/java/com/wireguard/android/api/interceptor/AcceptInterceptor.java +++ b/ui/src/main/java/com/wireguard/android/api/interceptor/AcceptInterceptor.java @@ -1,8 +1,3 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - package com.wireguard.android.api.interceptor; import java.io.IOException; diff --git a/ui/src/main/java/com/wireguard/android/api/interceptor/UserAgentInterceptor.java b/ui/src/main/java/com/wireguard/android/api/interceptor/UserAgentInterceptor.java index 6df3afc..73bf136 100644 --- a/ui/src/main/java/com/wireguard/android/api/interceptor/UserAgentInterceptor.java +++ b/ui/src/main/java/com/wireguard/android/api/interceptor/UserAgentInterceptor.java @@ -1,8 +1,3 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - package com.wireguard.android.api.interceptor; import java.io.IOException; diff --git a/ui/src/main/java/com/wireguard/android/api/network/ClientApi.java b/ui/src/main/java/com/wireguard/android/api/network/ClientApi.java index b66c16c..524c1c2 100644 --- a/ui/src/main/java/com/wireguard/android/api/network/ClientApi.java +++ b/ui/src/main/java/com/wireguard/android/api/network/ClientApi.java @@ -1,8 +1,3 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - package com.wireguard.android.api.network; /** Interface for API Calls diff --git a/ui/src/main/java/com/wireguard/android/api/network/ClientService.java b/ui/src/main/java/com/wireguard/android/api/network/ClientService.java index 40e8528..4fc0d7a 100644 --- a/ui/src/main/java/com/wireguard/android/api/network/ClientService.java +++ b/ui/src/main/java/com/wireguard/android/api/network/ClientService.java @@ -1,8 +1,3 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - package com.wireguard.android.api.network; import com.wireguard.android.api.ApiConstants; @@ -46,6 +41,7 @@ public class ClientService { return new Retrofit.Builder() .baseUrl(ApiConstants.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) + .client(httpClient.build()) .build().create(ClientApi.class); } } diff --git a/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java b/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java index 33d35ba..937a620 100644 --- a/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java +++ b/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java @@ -1,8 +1,3 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - package com.wireguard.android.api.network; import com.wireguard.android.resource.StatusResource; diff --git a/ui/src/main/java/com/wireguard/android/repository/DataRepository.java b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java index 6458b39..1c85b1c 100644 --- a/ui/src/main/java/com/wireguard/android/repository/DataRepository.java +++ b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java @@ -1,8 +1,3 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - package com.wireguard.android.repository; import com.wireguard.android.api.network.ClientApi; diff --git a/ui/src/main/java/com/wireguard/android/resource/StatusResource.java b/ui/src/main/java/com/wireguard/android/resource/StatusResource.java index 4d782db..5317a6c 100644 --- a/ui/src/main/java/com/wireguard/android/resource/StatusResource.java +++ b/ui/src/main/java/com/wireguard/android/resource/StatusResource.java @@ -1,12 +1,6 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - package com.wireguard.android.resource; import com.wireguard.android.api.enums.Status; - import androidx.annotation.NonNull; import androidx.annotation.Nullable;