|
|
@@ -15,7 +15,9 @@ import com.wireguard.android.util.UserStore; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import androidx.lifecycle.LifecycleOwner; |
|
|
|
import androidx.lifecycle.MutableLiveData; |
|
|
|
import androidx.lifecycle.Observer; |
|
|
|
import retrofit2.Call; |
|
|
|
import retrofit2.Callback; |
|
|
|
import retrofit2.Response; |
|
|
@@ -57,10 +59,55 @@ public class DataRepository { |
|
|
|
if(response.isSuccessful()) { |
|
|
|
String token = response.body().getToken(); |
|
|
|
UserStore.getInstance(context).setToken(token); |
|
|
|
setMutableLiveData(StatusResource.success()); |
|
|
|
if(!isDeviceLoggedIn(context)){ |
|
|
|
addDevice(context).observe((LifecycleOwner) context, new Observer<StatusResource<Device>>() { |
|
|
|
@Override public void onChanged(final StatusResource<Device> deviceStatusResource) { |
|
|
|
switch (deviceStatusResource.status){ |
|
|
|
case SUCCESS: |
|
|
|
setMutableLiveData(StatusResource.success()); |
|
|
|
break; |
|
|
|
case LOADING: |
|
|
|
break; |
|
|
|
case ERROR: |
|
|
|
setMutableLiveData(StatusResource.error(createErrorMessage(call,response))); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
else { |
|
|
|
getAllDevices(context).observe((LifecycleOwner) context, new Observer<List<Device>>() { |
|
|
|
@Override public void onChanged(final List<Device> devices) { |
|
|
|
boolean flag = true; |
|
|
|
for (Device item : devices) { |
|
|
|
if (UserStore.getInstance(context).getDeviceID().equals(item.getUuid())) { |
|
|
|
setMutableLiveData(StatusResource.success()); |
|
|
|
flag = false; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if(flag) { |
|
|
|
addDevice(context).observe((LifecycleOwner) context, new Observer<StatusResource<Device>>() { |
|
|
|
@Override public void onChanged(final StatusResource<Device> deviceStatusResource) { |
|
|
|
switch (deviceStatusResource.status) { |
|
|
|
case SUCCESS: |
|
|
|
setMutableLiveData(StatusResource.success()); |
|
|
|
break; |
|
|
|
case LOADING: |
|
|
|
break; |
|
|
|
case ERROR: |
|
|
|
setMutableLiveData(StatusResource.error(createErrorMessage(call, response))); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
String errorMessage = createErrorMessage(call,response); |
|
|
|
final String errorMessage = createErrorMessage(call,response); |
|
|
|
setMutableLiveData(StatusResource.error(errorMessage)); |
|
|
|
} |
|
|
|
} |
|
|
@@ -75,34 +122,7 @@ public class DataRepository { |
|
|
|
}.getMutableLiveData(); |
|
|
|
} |
|
|
|
|
|
|
|
public MutableLiveData<StatusResource<Device>> getAllDevices(Context context) { |
|
|
|
return new NetworkBoundStatusResource<Device>() { |
|
|
|
@Override protected void createCall() { |
|
|
|
final String token = UserStore.getInstance(context).getToken(); |
|
|
|
final HashMap<String,String> header = new HashMap<>(); |
|
|
|
header.put(ApiConstants.AUTHORIZATION_HEADER,token); |
|
|
|
clientApi.getAllDevices(header).enqueue(new Callback<List<Device>>() { |
|
|
|
@Override public void onResponse(final Call<List<Device>> call, final Response<List<Device>> response) { |
|
|
|
if (response.isSuccessful()) { |
|
|
|
List<Device> list = response.body(); |
|
|
|
setMutableLiveData(StatusResource.success()); |
|
|
|
} else { |
|
|
|
String errorMessage = createErrorMessage(call, response); |
|
|
|
setMutableLiveData(StatusResource.error(errorMessage)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override public void onFailure(final Call<List<Device>> call, final Throwable t) { |
|
|
|
if (t instanceof Exception) { |
|
|
|
setMutableLiveData(StatusResource.error(NO_INTERNET_CONNECTION)); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}.getMutableLiveData(); |
|
|
|
} |
|
|
|
|
|
|
|
public MutableLiveData<StatusResource<Device>> addDevice(Context context) { |
|
|
|
private MutableLiveData<StatusResource<Device>> addDevice(Context context) { |
|
|
|
return new NetworkBoundStatusResource<Device>() { |
|
|
|
@Override protected void createCall() { |
|
|
|
final String brand = getBrand(); |
|
|
@@ -125,7 +145,8 @@ public class DataRepository { |
|
|
|
if(deviceNameItem.length>1){ |
|
|
|
if(deviceNameItem[0].contains(myDeviceName[0]) && deviceNameItem[1].contains(myDeviceName[1])){ |
|
|
|
setMutableLiveData(StatusResource.success()); |
|
|
|
UserStore.getInstance(context).setDevice(device.getName()); |
|
|
|
UserStore.getInstance(context).setDeviceName(device.getName()); |
|
|
|
UserStore.getInstance(context).setDeviceID(device.getUuid()); |
|
|
|
flag = false; |
|
|
|
break; |
|
|
|
} |
|
|
@@ -149,7 +170,8 @@ public class DataRepository { |
|
|
|
clientApi.addDevice(header, body).enqueue(new Callback<Device>() { |
|
|
|
@Override public void onResponse(final Call<Device> call, final Response<Device> response) { |
|
|
|
if (response.isSuccessful()) { |
|
|
|
UserStore.getInstance(context).setDevice(response.body().getName()); |
|
|
|
UserStore.getInstance(context).setDeviceName(response.body().getName()); |
|
|
|
UserStore.getInstance(context).setDeviceID(response.body().getUuid()); |
|
|
|
setMutableLiveData(StatusResource.success()); |
|
|
|
} else { |
|
|
|
final String errorMessage = createErrorMessage(call, response); |
|
|
@@ -194,7 +216,8 @@ public class DataRepository { |
|
|
|
clientApi.addDevice(header, body).enqueue(new Callback<Device>() { |
|
|
|
@Override public void onResponse(final Call<Device> call, final Response<Device> response) { |
|
|
|
if (response.isSuccessful()) { |
|
|
|
UserStore.getInstance(context).setDevice(response.body().getName()); |
|
|
|
UserStore.getInstance(context).setDeviceName(response.body().getName()); |
|
|
|
UserStore.getInstance(context).setDeviceID(response.body().getUuid()); |
|
|
|
setMutableLiveData(StatusResource.success()); |
|
|
|
} else { |
|
|
|
final String errorMessage = createErrorMessage(call, response); |
|
|
@@ -224,6 +247,34 @@ public class DataRepository { |
|
|
|
}.getMutableLiveData(); |
|
|
|
} |
|
|
|
|
|
|
|
private MutableLiveData<List<Device>> getAllDevices(Context context){ |
|
|
|
final String token = UserStore.getInstance(context).getToken(); |
|
|
|
final HashMap<String,String> header = new HashMap<>(); |
|
|
|
header.put(ApiConstants.AUTHORIZATION_HEADER,token); |
|
|
|
MutableLiveData<List<Device>> liveData = new MutableLiveData<>(); |
|
|
|
clientApi.getAllDevices(header).enqueue(new Callback<List<Device>>() { |
|
|
|
@Override public void onResponse(final Call<List<Device>> call, final Response<List<Device>> response) { |
|
|
|
if (response.isSuccessful()) { |
|
|
|
liveData.setValue(response.body()); |
|
|
|
} else { |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override public void onFailure(final Call<List<Device>> call, final Throwable t) { |
|
|
|
if (t instanceof Exception) { |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
return liveData; |
|
|
|
} |
|
|
|
|
|
|
|
private boolean isDeviceLoggedIn(Context context){ |
|
|
|
return !UserStore.DEVICE_DEFAULT_VALUE.equals(UserStore.getInstance(context).getDeviceName()); |
|
|
|
} |
|
|
|
|
|
|
|
private String createErrorMessage(Call call, retrofit2.Response response) { |
|
|
|
return "Error: User agent: " + System.getProperty("http.agent") + ", Request body: " + call.request().body() + ", URL: " + |
|
|
|
call.request().url() + ", Code: " + response.code() + ", Message: " + |
|
|
@@ -256,8 +307,4 @@ public class DataRepository { |
|
|
|
private String getDeviceModel(){ |
|
|
|
return Build.MODEL; |
|
|
|
} |
|
|
|
|
|
|
|
public boolean isDeviceLoggedIn(Context context){ |
|
|
|
return !UserStore.DEVICE_DEFAULT_VALUE.equals(UserStore.getInstance(context).getDevice()); |
|
|
|
} |
|
|
|
} |