create_tunnel
en dev
hace 4 años
@@ -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<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) { | |||
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; | |||
} | |||
} | |||
}); | |||
@@ -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<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>() { | |||
@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())); | |||
} | |||
}); | |||
} | |||
@@ -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<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() { | |||