Browse Source

Merge pull request 'Implements the base MVVM structure with the Repository and other corresponding generic classes. Implements the Retrofit generic structure and adds dependencies for API Calls.' (#2) from mvvm_sceleton into dev

Reviewed-on: https://git.bubblev.org/bubblev/bubble-droid/pulls/2
pull/5/head
Gegham Kurghinyan 4 years ago
parent
commit
d3f943d209
11 changed files with 210 additions and 0 deletions
  1. +4
    -0
      build.gradle
  2. +5
    -0
      ui/build.gradle
  3. +5
    -0
      ui/src/main/java/com/wireguard/android/api/ApiConstants.java
  4. +9
    -0
      ui/src/main/java/com/wireguard/android/api/enums/Status.java
  5. +21
    -0
      ui/src/main/java/com/wireguard/android/api/interceptor/AcceptInterceptor.java
  6. +25
    -0
      ui/src/main/java/com/wireguard/android/api/interceptor/UserAgentInterceptor.java
  7. +6
    -0
      ui/src/main/java/com/wireguard/android/api/network/ClientApi.java
  8. +47
    -0
      ui/src/main/java/com/wireguard/android/api/network/ClientService.java
  9. +27
    -0
      ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java
  10. +29
    -0
      ui/src/main/java/com/wireguard/android/repository/DataRepository.java
  11. +32
    -0
      ui/src/main/java/com/wireguard/android/resource/StatusResource.java

+ 4
- 0
build.gradle View File

@@ -30,6 +30,10 @@ buildscript {
threetenabpVersion = '1.2.4'
zxingEmbeddedVersion = '3.6.0'
tunnelVersion = '1.0.20200407'
interceptorVersion = '3.12.2'
gsonVersion = '2.8.6'
retrofitVersion = '2.7.2'
converterGsonVersion = '2.7.2'

groupName = 'com.wireguard.android'
}


+ 5
- 0
ui/build.gradle View File

@@ -81,6 +81,11 @@ 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 "com.google.code.gson:gson:$gsonVersion"
implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
implementation "com.squareup.retrofit2:converter-gson:$converterGsonVersion"
}

tasks.withType(JavaCompile) {


+ 5
- 0
ui/src/main/java/com/wireguard/android/api/ApiConstants.java View File

@@ -0,0 +1,5 @@
package com.wireguard.android.api;

public class ApiConstants {
public static final String BASE_URL = "https://jtest2.bubblesecure.com:1443/api/";
}

+ 9
- 0
ui/src/main/java/com/wireguard/android/api/enums/Status.java View File

@@ -0,0 +1,9 @@
package com.wireguard.android.api.enums;
/**
Enum for status connection
**/
public enum Status {
SUCCESS,
ERROR,
LOADING
}

+ 21
- 0
ui/src/main/java/com/wireguard/android/api/interceptor/AcceptInterceptor.java View File

@@ -0,0 +1,21 @@
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);
}
}

+ 25
- 0
ui/src/main/java/com/wireguard/android/api/interceptor/UserAgentInterceptor.java View File

@@ -0,0 +1,25 @@
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);
}
}

+ 6
- 0
ui/src/main/java/com/wireguard/android/api/network/ClientApi.java View File

@@ -0,0 +1,6 @@
package com.wireguard.android.api.network;
/**
Interface for API Calls
**/
public interface ClientApi {
}

+ 47
- 0
ui/src/main/java/com/wireguard/android/api/network/ClientService.java View File

@@ -0,0 +1,47 @@
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())
.client(httpClient.build())
.build().create(ClientApi.class);
}
}

+ 27
- 0
ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java View File

@@ -0,0 +1,27 @@
package com.wireguard.android.api.network;

import com.wireguard.android.resource.StatusResource;

import androidx.annotation.MainThread;
import androidx.lifecycle.MutableLiveData;

public abstract class NetworkBoundStatusResource<T> {
private final MutableLiveData<StatusResource<T>> mutableLiveData = new MutableLiveData<>();

@MainThread
public NetworkBoundStatusResource() {
mutableLiveData.setValue(StatusResource.<T>loading());
createCall();
}

@MainThread
protected abstract void createCall();

public void setMutableLiveData(StatusResource<T> value) {
mutableLiveData.setValue(value);
}

public final MutableLiveData<StatusResource<T>> getMutableLiveData() {
return mutableLiveData;
}
}

+ 29
- 0
ui/src/main/java/com/wireguard/android/repository/DataRepository.java View File

@@ -0,0 +1,29 @@
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;
}

}

+ 32
- 0
ui/src/main/java/com/wireguard/android/resource/StatusResource.java View File

@@ -0,0 +1,32 @@
package com.wireguard.android.resource;

import com.wireguard.android.api.enums.Status;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

public class StatusResource<T> {
@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 <T> StatusResource<T> success() {
return new StatusResource<>(Status.SUCCESS,null);
}

public static <T> StatusResource<T> error(String msg) {
return new StatusResource<>(Status.ERROR,msg);
}

public static <T> StatusResource<T> loading() {
return new StatusResource<>(Status.LOADING,null);
}
}

Loading…
Cancel
Save