Browse Source

Adds add device functionality.

pull/4/head
Mushegh Sahakyan 4 years ago
parent
commit
b9ba7cd02e
3 changed files with 164 additions and 31 deletions
  1. +24
    -1
      ui/src/main/java/com/wireguard/android/activity/LoginActivity.java
  2. +138
    -28
      ui/src/main/java/com/wireguard/android/repository/DataRepository.java
  3. +2
    -2
      ui/src/main/java/com/wireguard/android/viewmodel/LoginViewModel.java

+ 24
- 1
ui/src/main/java/com/wireguard/android/activity/LoginActivity.java View File

@@ -4,6 +4,8 @@ package com.wireguard.android.activity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
@@ -13,6 +15,7 @@ import android.widget.EditText;
import android.widget.Toast;
import com.wireguard.android.R;
import com.wireguard.android.api.ApiConstants;
import com.wireguard.android.model.Device;
import com.wireguard.android.model.User;
import com.wireguard.android.resource.StatusResource;
import com.wireguard.android.viewmodel.LoginViewModel;
@@ -62,7 +65,27 @@ public class LoginActivity extends AppCompatActivity {
@Override public void onChanged(final StatusResource<User> userStatusResource) {
switch (userStatusResource.status){
case SUCCESS:
Toast.makeText(LoginActivity.this,"Success",Toast.LENGTH_SHORT).show();
loginViewModel.addDevice(LoginActivity.this).observe(LoginActivity.this, new Observer<StatusResource<Device>>() {
@Override public void onChanged(final StatusResource<Device> deviceStatusResource) {
switch (deviceStatusResource.status){
case SUCCESS:
Toast.makeText(LoginActivity.this,"Success",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Log.d("TAG","Success");
break;
case LOADING:
Log.d("TAG","Loading");
break;
case ERROR:
Toast.makeText(LoginActivity.this,"Login Failed",Toast.LENGTH_SHORT).show();
Log.d("TAG","Error");
break;
}
}
});
// Toast.makeText(LoginActivity.this,"Success",Toast.LENGTH_SHORT).show();
Log.d("TAG","Success");
break;
case LOADING:


+ 138
- 28
ui/src/main/java/com/wireguard/android/repository/DataRepository.java View File

@@ -1,8 +1,9 @@
package com.wireguard.android.repository;

import android.content.Context;

import com.wireguard.android.activity.LoginActivity;
import android.os.Build;
import android.provider.Settings;
import android.provider.Settings.Secure;
import com.wireguard.android.api.ApiConstants;
import com.wireguard.android.api.network.ClientApi;
import com.wireguard.android.api.network.ClientService;
@@ -11,10 +12,9 @@ import com.wireguard.android.model.Device;
import com.wireguard.android.model.User;
import com.wireguard.android.resource.StatusResource;
import com.wireguard.android.util.UserStore;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import androidx.lifecycle.MutableLiveData;
import retrofit2.Call;
import retrofit2.Callback;
@@ -102,35 +102,124 @@ public class DataRepository {
}.getMutableLiveData();
}

public MutableLiveData<StatusResource<Device>> addDevice(String name ,Context context) {
public MutableLiveData<StatusResource<Device>> addDevice(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.HEADER,token);
final HashMap<String,String> body = new HashMap<>();
body.put(ApiConstants.DEVICE_NAME,name);
body.put(ApiConstants.DEVICE_TYPE,"android");
clientApi.addDevice(header, body).enqueue(new Callback<Device>() {
@Override public void onResponse(final Call<Device> call, final Response<Device> response) {
if (response.isSuccessful()) {
setMutableLiveData(StatusResource.success());
} else {
String errorMessage = createErrorMessage(call, response);
setMutableLiveData(StatusResource.error(errorMessage));
}
}
final String brand = getBrand();
final String model = getDeviceModel();
final String imei = getDeviceIMEI(context);
final String deviceName = brand + " " + model + " " + ":" + " " + imei;
final String token = UserStore.getInstance(context).getToken();
final HashMap<String,String> header = new HashMap<>();
header.put(ApiConstants.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()) {
String brandModel = brand + " " + model + " ";
final List<Device> list = response.body();
final List<String> arrayListDevicesName = new ArrayList<>();
boolean flag = true;
for (final Device device : list) {
final String[] deviceNameItem = device.getName().split(":");
final String[] myDeviceName = deviceName.split(":");
if(deviceNameItem.length>1){
if(deviceNameItem[0].contains(myDeviceName[0]) && deviceNameItem[1].contains(myDeviceName[1])){
setMutableLiveData(StatusResource.success());
flag = false;
break;
}
else {
final String[] itemDevice = device.getName().split(":");
if (itemDevice.length != 1) {
if(itemDevice[0].contains(brandModel)) {
arrayListDevicesName.add(itemDevice[0]);
}
}
}

}
}
if(flag) {
if (arrayListDevicesName.isEmpty()) {
brandModel = deviceName;
final HashMap<String, String> body = new HashMap<>();
body.put(ApiConstants.DEVICE_NAME, brandModel);
body.put(ApiConstants.DEVICE_TYPE, "android");
clientApi.addDevice(header, body).enqueue(new Callback<Device>() {
@Override public void onResponse(final Call<Device> call, final Response<Device> response) {
if (response.isSuccessful()) {
setMutableLiveData(StatusResource.success());
} else {
final String errorMessage = createErrorMessage(call, response);
setMutableLiveData(StatusResource.error(errorMessage));
}
}

@Override public void onFailure(final Call<Device> call, final Throwable t) {
if (t instanceof Exception) {
setMutableLiveData(StatusResource.error(NO_INTERNET_CONNECTION));
}
}
});
} else {
for (int i = (arrayListDevicesName.size() - 1); i >= arrayListDevicesName.size() - 1; i--) {
if (arrayListDevicesName.get(i).contains(brandModel)) {
final char[] arr = arrayListDevicesName.get(i).toCharArray();
if (arr[arr.length - 2] != ')') {
brandModel += "(2)" + " " + ":" + " " + imei;
} else {
String countDevice = "";
int indexfirst = 0;
int indexlast = 0;
for (int j = arr.length - 1; j >= 0; j--) {
if (arr[j] == '(') {
indexfirst = j;
}
if (arr[j] == ')') {
indexlast = j;
}
}
final String device = new String(arr);
countDevice += device.substring(indexfirst + 1, indexlast);
int count = Integer.parseInt(countDevice);
count++;
brandModel += "(" + count + ")" + " " + ":" + " " + imei;
}
}
final HashMap<String, String> body = new HashMap<>();
body.put(ApiConstants.DEVICE_NAME, brandModel);
body.put(ApiConstants.DEVICE_TYPE, "android");
clientApi.addDevice(header, body).enqueue(new Callback<Device>() {
@Override public void onResponse(final Call<Device> call, final Response<Device> response) {
if (response.isSuccessful()) {
setMutableLiveData(StatusResource.success());
} else {
final String errorMessage = createErrorMessage(call, response);
setMutableLiveData(StatusResource.error(errorMessage));
}
}

@Override public void onFailure(final Call<Device> call, final Throwable t) {
if (t instanceof Exception) {
setMutableLiveData(StatusResource.error(NO_INTERNET_CONNECTION));
}
}
});
}
}
}
}
}
@Override public void onFailure(final Call<List<Device>> call, final Throwable t) {
if (t instanceof Exception) {
setMutableLiveData(StatusResource.error(NO_INTERNET_CONNECTION));
}
}
});

@Override public void onFailure(final Call<Device> call, final Throwable t) {
if (t instanceof Exception) {
setMutableLiveData(StatusResource.error(NO_INTERNET_CONNECTION));
}
}
});
}.getMutableLiveData();
}
}.getMutableLiveData();
}

private String createErrorMessage(Call call, retrofit2.Response response) {
return "Error: User agent: " + System.getProperty("http.agent") + ", Request body: " + call.request().body() + ", URL: " +
@@ -143,4 +232,25 @@ public class DataRepository {
return !UserStore.USER_TOKEN_DEFAULT_VALUE.equals(UserStore.getInstance(context).getToken());
}

private String getBrand() {
final String brand = Build.MANUFACTURER;
return capitalize(brand);
}


private String capitalize(final String brand) {
if (brand == null || brand.isEmpty()) {
return "";
}
final char first = brand.charAt(0);
return Character.isUpperCase(first) ? brand : Character.toUpperCase(first) + brand.substring(1);
}

private String getDeviceIMEI(final Context context) {
return Settings.Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
}

private String getDeviceModel(){
return Build.MODEL;
}
}

+ 2
- 2
ui/src/main/java/com/wireguard/android/viewmodel/LoginViewModel.java View File

@@ -21,7 +21,7 @@ public class LoginViewModel extends ViewModel {
return DataRepository.getRepositoryInstance().getAllDevices(context);
}

public LiveData<StatusResource<Device>> addDevice(String name, Context context){
return DataRepository.getRepositoryInstance().addDevice(name,context);
public LiveData<StatusResource<Device>> addDevice(Context context){
return DataRepository.getRepositoryInstance().addDevice(context);
}
}

Loading…
Cancel
Save