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 ec3fdd9..e7607c6 100644 --- a/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java +++ b/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java @@ -203,6 +203,7 @@ public class LoginActivity extends BaseActivityBubble { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { Toast.makeText(this, getString(R.string.success), Toast.LENGTH_SHORT).show(); + loginViewModel.setHostName(this,bubbleName.getText().toString().trim()); Log.d("TAG", "Success"); final Intent mainActivityIntent = new Intent(this, MainActivity.class); mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); diff --git a/ui/src/main/java/com/wireguard/android/activity/MainActivity.java b/ui/src/main/java/com/wireguard/android/activity/MainActivity.java index 9369910..d5363ee 100644 --- a/ui/src/main/java/com/wireguard/android/activity/MainActivity.java +++ b/ui/src/main/java/com/wireguard/android/activity/MainActivity.java @@ -5,10 +5,12 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import com.wireguard.android.R; @@ -22,6 +24,8 @@ public class MainActivity extends AppCompatActivity { private Button connectButton; private ImageView imageMyBubble; private ImageView mark; + private ImageButton myBubbleButton; + private ImageButton accountButton; private boolean connectionStateFlag; private static final int REQUEST_CODE_VPN_PERMISSION = 23491; @@ -30,6 +34,9 @@ public class MainActivity extends AppCompatActivity { public static final int CONNECTED_TEXT_VIEW_TOP_MARGIN = 150; public static final int DISCONNECTED_TEXT_VIEW_BOTTOM_MARGIN = 90; public static final int CONNECTED_TEXT_VIEW_BOTTOM_MARGIN = 100; + private static final String BASE_URL_PREFIX = "https://"; + private static final String BASE_URL_SUFFIX_MY_BUBBLE = ":1443/"; + private static final String BASE_URL_SUFFIX_ACCOUNT = ":1443/me"; @Override protected void onCreate(Bundle savedInstanceState) { @@ -68,6 +75,8 @@ public class MainActivity extends AppCompatActivity { imageMyBubble = findViewById(R.id.imageMyBubble); mark = findViewById(R.id.mark); titleMyBubble = findViewById(R.id.titleMyBubble); + myBubbleButton = findViewById(R.id.myBubbleButton); + accountButton = findViewById(R.id.accountButton); } private void initListeners() { @@ -76,6 +85,32 @@ public class MainActivity extends AppCompatActivity { connect(); } }); + myBubbleButton.setOnClickListener(new OnClickListener() { + @Override public void onClick(final View v) { + showMyBubble(); + } + }); + accountButton.setOnClickListener(new OnClickListener() { + @Override public void onClick(final View v) { + showAccount(); + } + }); + } + + private void showAccount() { + final String hostname = mainViewModel.getHostname(this); + final String url = BASE_URL_PREFIX + hostname + BASE_URL_SUFFIX_ACCOUNT; + final Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(url)); + startActivity(intent); + } + + private void showMyBubble() { + final String hostname = mainViewModel.getHostname(this); + final String url = BASE_URL_PREFIX + hostname + BASE_URL_SUFFIX_MY_BUBBLE; + final Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(url)); + startActivity(intent); } private void connect() { 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 d32058a..644b493 100644 --- a/ui/src/main/java/com/wireguard/android/repository/DataRepository.java +++ b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java @@ -476,4 +476,12 @@ public class DataRepository { } } } + + public void setHostName(Context context, String hostname){ + UserStore.getInstance(context).setHostname(hostname); + } + + public String getHostname(Context context){ + return UserStore.getInstance(context).getHostname(); + } } 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 ee46734..4a45181 100644 --- a/ui/src/main/java/com/wireguard/android/util/UserStore.java +++ b/ui/src/main/java/com/wireguard/android/util/UserStore.java @@ -12,10 +12,12 @@ public class UserStore { private static final String DEVICE_DATA_KEY = "com.wireguard.android.util.bubbleDeviceResponse"; private static final String DEVICE_ID_KEY = "com.wireguard.android.util.bubbleDeviceIDResponse"; private static final String USER_BASE_URL_KEY = "com.wireguard.android.util.bubbleUserURLResponse"; + private static final String HOSTNAME_KEY = "com.wireguard.android.util.bubbleHostnameResponse"; 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 final String USER_BASE_URL_DEFAULT_VALUE = ""; + private static final String HOSTNAME_DEFAULT_VALUE = ""; public static UserStore getInstance(Context context) { if (instance == null) { @@ -61,4 +63,12 @@ public class UserStore { public String getUserURL(){ return sharedPreferences.getString(USER_BASE_URL_KEY,USER_BASE_URL_DEFAULT_VALUE); } + + public void setHostname(String hostName){ + sharedPreferences.edit().putString(HOSTNAME_KEY,hostName).apply(); + } + + public String getHostname(){ + return sharedPreferences.getString(HOSTNAME_KEY,HOSTNAME_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 43728a8..82afda2 100644 --- a/ui/src/main/java/com/wireguard/android/viewmodel/LoginViewModel.java +++ b/ui/src/main/java/com/wireguard/android/viewmodel/LoginViewModel.java @@ -36,4 +36,8 @@ public class LoginViewModel extends ViewModel { public MutableLiveData getCertificate(Context context){ return DataRepository.getRepositoryInstance().getCertificate(context); } + + public void setHostName(Context context, String hostname){ + DataRepository.getRepositoryInstance().setHostName(context,hostname); + } } diff --git a/ui/src/main/java/com/wireguard/android/viewmodel/MainViewModel.java b/ui/src/main/java/com/wireguard/android/viewmodel/MainViewModel.java index c4285cd..ec3ba8a 100644 --- a/ui/src/main/java/com/wireguard/android/viewmodel/MainViewModel.java +++ b/ui/src/main/java/com/wireguard/android/viewmodel/MainViewModel.java @@ -39,4 +39,8 @@ public class MainViewModel extends ViewModel { public boolean isVPNConnected(Context context, boolean connectionStateFlag) { return DataRepository.getRepositoryInstance().isVPNConnected(context,connectionStateFlag); } + + public String getHostname(Context context){ + return DataRepository.getRepositoryInstance().getHostname(context); + } } diff --git a/ui/src/main/res/layout/activity_main.xml b/ui/src/main/res/layout/activity_main.xml index c7066ed..e249076 100644 --- a/ui/src/main/res/layout/activity_main.xml +++ b/ui/src/main/res/layout/activity_main.xml @@ -19,36 +19,36 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> - - - + + + - + + app:layout_constraintEnd_toStartOf="@+id/accountButton" + app:layout_constraintStart_toEndOf="@+id/myBubbleButton" + app:layout_constraintTop_toTopOf="@+id/myBubbleButton" />