From bbd818fcf3f10bde37d3b5c3f4995270ea7e6ad9 Mon Sep 17 00:00:00 2001 From: Mushegh98 Date: Wed, 27 May 2020 00:37:31 +0400 Subject: [PATCH] Implements add device methods. --- .../android/activity/LoginActivity.java | 24 ---- .../com/wireguard/android/model/Device.java | 5 - .../android/repository/DataRepository.java | 121 ++++++++++++------ .../com/wireguard/android/util/UserStore.java | 14 +- .../android/viewmodel/LoginViewModel.java | 17 --- 5 files changed, 96 insertions(+), 85 deletions(-) diff --git a/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java b/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java index 79016e7..c30ff64 100644 --- a/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java +++ b/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java @@ -10,7 +10,6 @@ import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.wireguard.android.R; -import com.wireguard.android.model.Device; import com.wireguard.android.model.User; import com.wireguard.android.resource.StatusResource; import com.wireguard.android.viewmodel.LoginViewModel; @@ -59,32 +58,9 @@ public class LoginActivity extends BaseActivityBubble { @Override public void onChanged(final StatusResource userStatusResource) { switch (userStatusResource.status) { case SUCCESS: - if (loginViewModel.isDeviceLoggedIn(LoginActivity.this)) { Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_SHORT).show(); Log.d("TAG", "Success"); closeLoadingDialog(); - } else { - loginViewModel.addDevice(LoginActivity.this).observe(LoginActivity.this, new Observer>() { - @Override public void onChanged(final StatusResource deviceStatusResource) { - switch (deviceStatusResource.status) { - case SUCCESS: - closeLoadingDialog(); - Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_SHORT).show(); - Log.d("TAG", "Success"); - break; - case LOADING: - Log.d("TAG", "Loading"); - break; - case ERROR: - closeLoadingDialog(); - Toast.makeText(LoginActivity.this, "Login Failed", Toast.LENGTH_SHORT).show(); - Log.d("TAG", "Error"); - break; - } - } - }); - } - Log.d("TAG", "Success"); break; case LOADING: Log.d("TAG", "Loading"); diff --git a/ui/src/main/java/com/wireguard/android/model/Device.java b/ui/src/main/java/com/wireguard/android/model/Device.java index e56963d..7820e68 100644 --- a/ui/src/main/java/com/wireguard/android/model/Device.java +++ b/ui/src/main/java/com/wireguard/android/model/Device.java @@ -1,8 +1,3 @@ -/* - * Copyright © 2020 WireGuard LLC. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - package com.wireguard.android.model; import com.google.gson.annotations.Expose; 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 72c4971..e0838c1 100644 --- a/ui/src/main/java/com/wireguard/android/repository/DataRepository.java +++ b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java @@ -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>() { + @Override public void onChanged(final StatusResource 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>() { + @Override public void onChanged(final List 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>() { + @Override public void onChanged(final StatusResource 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> getAllDevices(Context context) { - return new NetworkBoundStatusResource() { - @Override protected void createCall() { - final String token = UserStore.getInstance(context).getToken(); - final HashMap header = new HashMap<>(); - header.put(ApiConstants.AUTHORIZATION_HEADER,token); - clientApi.getAllDevices(header).enqueue(new Callback>() { - @Override public void onResponse(final Call> call, final Response> response) { - if (response.isSuccessful()) { - List list = response.body(); - setMutableLiveData(StatusResource.success()); - } else { - String errorMessage = createErrorMessage(call, response); - setMutableLiveData(StatusResource.error(errorMessage)); - } - } - - @Override public void onFailure(final Call> call, final Throwable t) { - if (t instanceof Exception) { - setMutableLiveData(StatusResource.error(NO_INTERNET_CONNECTION)); - } - } - }); - } - }.getMutableLiveData(); - } - - public MutableLiveData> addDevice(Context context) { + private MutableLiveData> addDevice(Context context) { return new NetworkBoundStatusResource() { @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() { @Override public void onResponse(final Call call, final Response 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() { @Override public void onResponse(final Call call, final Response 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> getAllDevices(Context context){ + final String token = UserStore.getInstance(context).getToken(); + final HashMap header = new HashMap<>(); + header.put(ApiConstants.AUTHORIZATION_HEADER,token); + MutableLiveData> liveData = new MutableLiveData<>(); + clientApi.getAllDevices(header).enqueue(new Callback>() { + @Override public void onResponse(final Call> call, final Response> response) { + if (response.isSuccessful()) { + liveData.setValue(response.body()); + } else { + + } + } + + @Override public void onFailure(final Call> 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()); - } } diff --git a/ui/src/main/java/com/wireguard/android/util/UserStore.java b/ui/src/main/java/com/wireguard/android/util/UserStore.java index 438c52c..8537f31 100644 --- a/ui/src/main/java/com/wireguard/android/util/UserStore.java +++ b/ui/src/main/java/com/wireguard/android/util/UserStore.java @@ -10,8 +10,10 @@ public class UserStore { private static final String USER_SHARED_PREF = "com.wireguard.android.util.bubbleUserSharedPref"; private static final String USER_DATA_KEY = "com.wireguard.android.util.bubbleUserResponse"; private static final String DEVICE_DATA_KEY = "com.wireguard.android.util.bubbleDeviceResponse"; + private static final String DEVICE_ID_KEY = "com.wireguard.android.util.bubbleDeviceIDResponse"; public static final String USER_TOKEN_DEFAULT_VALUE = ""; public static final String DEVICE_DEFAULT_VALUE = ""; + public static final String DEVICE_ID_DEFAULT_VALUE = ""; public static UserStore getInstance(Context context) { if (instance == null) { @@ -37,11 +39,19 @@ public class UserStore { return sharedPreferences.getString(USER_DATA_KEY, USER_TOKEN_DEFAULT_VALUE); } - public void setDevice(String device){ + public void setDeviceName(String device){ sharedPreferences.edit().putString(DEVICE_DATA_KEY, device).apply(); } - public String getDevice(){ + public String getDeviceName(){ return sharedPreferences.getString(DEVICE_DATA_KEY, DEVICE_DEFAULT_VALUE); } + + public void setDeviceID(String id){ + sharedPreferences.edit().putString(DEVICE_ID_KEY,id).apply(); + } + + public String getDeviceID(){ + return sharedPreferences.getString(DEVICE_ID_KEY,DEVICE_ID_DEFAULT_VALUE); + } } diff --git a/ui/src/main/java/com/wireguard/android/viewmodel/LoginViewModel.java b/ui/src/main/java/com/wireguard/android/viewmodel/LoginViewModel.java index 8c8622d..3b3b0ec 100644 --- a/ui/src/main/java/com/wireguard/android/viewmodel/LoginViewModel.java +++ b/ui/src/main/java/com/wireguard/android/viewmodel/LoginViewModel.java @@ -1,14 +1,9 @@ package com.wireguard.android.viewmodel; import android.content.Context; - -import com.wireguard.android.model.Device; import com.wireguard.android.model.User; import com.wireguard.android.repository.DataRepository; import com.wireguard.android.resource.StatusResource; - -import java.util.HashMap; - import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModel; @@ -16,16 +11,4 @@ public class LoginViewModel extends ViewModel { public LiveData> login(String username,String password, Context context){ return DataRepository.getRepositoryInstance().login(username,password,context); } - - public LiveData> getAllDevices(Context context){ - return DataRepository.getRepositoryInstance().getAllDevices(context); - } - - public LiveData> addDevice(Context context){ - return DataRepository.getRepositoryInstance().addDevice(context); - } - - public boolean isDeviceLoggedIn(Context context){ - return DataRepository.getRepositoryInstance().isDeviceLoggedIn(context); - } }