create_tunnel
into dev
4 years ago
@@ -2,6 +2,8 @@ package com.wireguard.android.activity; | |||||
import androidx.lifecycle.Observer; | import androidx.lifecycle.Observer; | ||||
import androidx.lifecycle.ViewModelProvider; | import androidx.lifecycle.ViewModelProvider; | ||||
import android.content.Intent; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.util.Log; | import android.util.Log; | ||||
import android.view.View; | import android.view.View; | ||||
@@ -9,6 +11,7 @@ import android.view.View.OnClickListener; | |||||
import android.widget.Button; | import android.widget.Button; | ||||
import android.widget.EditText; | import android.widget.EditText; | ||||
import android.widget.Toast; | import android.widget.Toast; | ||||
import com.wireguard.android.R; | import com.wireguard.android.R; | ||||
import com.wireguard.android.model.User; | import com.wireguard.android.model.User; | ||||
import com.wireguard.android.resource.StatusResource; | import com.wireguard.android.resource.StatusResource; | ||||
@@ -38,10 +41,11 @@ public class LoginActivity extends BaseActivityBubble { | |||||
private void initListeners() { | private void initListeners() { | ||||
sign.setOnClickListener(new OnClickListener() { | sign.setOnClickListener(new OnClickListener() { | ||||
@Override public void onClick(final View v) { | @Override public void onClick(final View v) { | ||||
final String tunnelName = bubbleName.getText().toString().trim(); | |||||
final String username = userName.getText().toString().trim(); | final String username = userName.getText().toString().trim(); | ||||
final String password = LoginActivity.this.password.getText().toString().trim(); | final String password = LoginActivity.this.password.getText().toString().trim(); | ||||
showLoadingDialog(); | showLoadingDialog(); | ||||
login(username,password); | |||||
login(tunnelName, username, password); | |||||
} | } | ||||
}); | }); | ||||
} | } | ||||
@@ -53,23 +57,26 @@ public class LoginActivity extends BaseActivityBubble { | |||||
sign = findViewById(R.id.signButton); | sign = findViewById(R.id.signButton); | ||||
} | } | ||||
private void login(String username, String password) { | |||||
loginViewModel.login(username,password,this).observe(this, new Observer<StatusResource<User>>() { | |||||
private void login(String tunnelName, String username, String password) { | |||||
loginViewModel.login(tunnelName, username, password, this).observe(this, new Observer<StatusResource<User>>() { | |||||
@Override public void onChanged(final StatusResource<User> userStatusResource) { | @Override public void onChanged(final StatusResource<User> userStatusResource) { | ||||
switch (userStatusResource.status) { | switch (userStatusResource.status) { | ||||
case SUCCESS: | 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; | |||||
} | } | ||||
} | } | ||||
}); | }); | ||||
@@ -5,6 +5,7 @@ import android.os.Build; | |||||
import android.provider.Settings; | import android.provider.Settings; | ||||
import android.provider.Settings.Secure; | import android.provider.Settings.Secure; | ||||
import com.wireguard.android.Application; | |||||
import com.wireguard.android.api.ApiConstants; | import com.wireguard.android.api.ApiConstants; | ||||
import com.wireguard.android.api.network.ClientApi; | import com.wireguard.android.api.network.ClientApi; | ||||
import com.wireguard.android.api.network.ClientService; | 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.model.User; | ||||
import com.wireguard.android.resource.StatusResource; | import com.wireguard.android.resource.StatusResource; | ||||
import com.wireguard.android.util.UserStore; | import com.wireguard.android.util.UserStore; | ||||
import com.wireguard.config.Config; | |||||
import java.io.ByteArrayInputStream; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.io.InputStream; | import java.io.InputStream; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
@@ -63,7 +66,7 @@ public class DataRepository { | |||||
return instance; | return instance; | ||||
} | } | ||||
public MutableLiveData<StatusResource<User>> login(String username, String password, Context context) { | |||||
public MutableLiveData<StatusResource<User>> login(String tunnelName, String username, String password, Context context) { | |||||
return new NetworkBoundStatusResource<User>() { | return new NetworkBoundStatusResource<User>() { | ||||
@Override protected void createCall() { | @Override protected void createCall() { | ||||
@@ -229,7 +232,27 @@ public class DataRepository { | |||||
final InputStream inputStream = response.body().byteStream(); | final InputStream inputStream = response.body().byteStream(); | ||||
final Scanner scanner = new Scanner(inputStream).useDelimiter(DELIMITER); | final Scanner scanner = new Scanner(inputStream).useDelimiter(DELIMITER); | ||||
final String data = scanner.hasNext() ? scanner.next() : ""; | 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())); | |||||
} | } | ||||
}); | }); | ||||
} | } | ||||
@@ -1,15 +1,17 @@ | |||||
package com.wireguard.android.viewmodel; | package com.wireguard.android.viewmodel; | ||||
import android.content.Context; | import android.content.Context; | ||||
import com.wireguard.android.model.User; | import com.wireguard.android.model.User; | ||||
import com.wireguard.android.repository.DataRepository; | import com.wireguard.android.repository.DataRepository; | ||||
import com.wireguard.android.resource.StatusResource; | import com.wireguard.android.resource.StatusResource; | ||||
import androidx.lifecycle.LiveData; | import androidx.lifecycle.LiveData; | ||||
import androidx.lifecycle.ViewModel; | import androidx.lifecycle.ViewModel; | ||||
public class LoginViewModel extends ViewModel { | public class LoginViewModel extends ViewModel { | ||||
public LiveData<StatusResource<User>> login(String username,String password, Context context){ | |||||
return DataRepository.getRepositoryInstance().login(username,password,context); | |||||
public LiveData<StatusResource<User>> login(String tunnelName, String username, String password, Context context) { | |||||
return DataRepository.getRepositoryInstance().login(tunnelName,username, password, context); | |||||
} | } | ||||
@Override protected void onCleared() { | @Override protected void onCleared() { | ||||