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 c30ff64..b9f994a 100644 --- a/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java +++ b/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java @@ -2,6 +2,8 @@ package com.wireguard.android.activity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; + +import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; @@ -9,6 +11,7 @@ import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; + import com.wireguard.android.R; import com.wireguard.android.model.User; import com.wireguard.android.resource.StatusResource; @@ -38,10 +41,11 @@ public class LoginActivity extends BaseActivityBubble { private void initListeners() { sign.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { + final String tunnelName = bubbleName.getText().toString().trim(); final String username = userName.getText().toString().trim(); final String password = LoginActivity.this.password.getText().toString().trim(); showLoadingDialog(); - login(username,password); + login(tunnelName, username, password); } }); } @@ -53,23 +57,26 @@ public class LoginActivity extends BaseActivityBubble { sign = findViewById(R.id.signButton); } - private void login(String username, String password) { - loginViewModel.login(username,password,this).observe(this, new Observer>() { + private void login(String tunnelName, String username, String password) { + loginViewModel.login(tunnelName, username, password, this).observe(this, new Observer>() { @Override public void onChanged(final StatusResource userStatusResource) { switch (userStatusResource.status) { case SUCCESS: - Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_SHORT).show(); - Log.d("TAG", "Success"); - closeLoadingDialog(); - 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; + Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_SHORT).show(); + Log.d("TAG", "Success"); + closeLoadingDialog(); + Intent intent = new Intent(LoginActivity.this, MainActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); + 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; } } }); 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 d9e51ce..8ab2f40 100644 --- a/ui/src/main/java/com/wireguard/android/repository/DataRepository.java +++ b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java @@ -5,6 +5,7 @@ import android.os.Build; import android.provider.Settings; import android.provider.Settings.Secure; +import com.wireguard.android.Application; import com.wireguard.android.api.ApiConstants; import com.wireguard.android.api.network.ClientApi; import com.wireguard.android.api.network.ClientService; @@ -13,7 +14,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 com.wireguard.config.Config; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -63,7 +66,7 @@ public class DataRepository { return instance; } - public MutableLiveData> login(String username, String password, Context context) { + public MutableLiveData> login(String tunnelName, String username, String password, Context context) { return new NetworkBoundStatusResource() { @Override protected void createCall() { @@ -229,7 +232,27 @@ public class DataRepository { final InputStream inputStream = response.body().byteStream(); final Scanner scanner = new Scanner(inputStream).useDelimiter(DELIMITER); final String data = scanner.hasNext() ? scanner.next() : ""; - postMutableLiveData(StatusResource.success()); + parseConfig(data); + } + }); + } + + private void parseConfig(String data) { + try { + final byte[] configText = data.getBytes(); + final Config config = Config.parse(new ByteArrayInputStream(configText)); + createTunnel(config, tunnelName); + } catch (Exception e) { + postMutableLiveData(StatusResource.error(e.getMessage())); + } + } + + private void createTunnel(Config config, String tunnelName) { + Application.getTunnelManager().create(tunnelName, config).whenComplete((observableTunnel, throwable) -> { + if (observableTunnel != null) { + setMutableLiveData(StatusResource.success()); + } else { + setMutableLiveData(StatusResource.error(throwable.getMessage())); } }); } 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 b804581..8b21efb 100644 --- a/ui/src/main/java/com/wireguard/android/viewmodel/LoginViewModel.java +++ b/ui/src/main/java/com/wireguard/android/viewmodel/LoginViewModel.java @@ -1,15 +1,17 @@ package com.wireguard.android.viewmodel; import android.content.Context; + import com.wireguard.android.model.User; import com.wireguard.android.repository.DataRepository; import com.wireguard.android.resource.StatusResource; + import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModel; public class LoginViewModel extends ViewModel { - public LiveData> login(String username,String password, Context context){ - return DataRepository.getRepositoryInstance().login(username,password,context); + public LiveData> login(String tunnelName, String username, String password, Context context) { + return DataRepository.getRepositoryInstance().login(tunnelName,username, password, context); } @Override protected void onCleared() {