@@ -203,6 +203,7 @@ public class LoginActivity extends BaseActivityBubble { | |||||
super.onActivityResult(requestCode, resultCode, data); | super.onActivityResult(requestCode, resultCode, data); | ||||
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { | if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { | ||||
Toast.makeText(this, getString(R.string.success), Toast.LENGTH_SHORT).show(); | Toast.makeText(this, getString(R.string.success), Toast.LENGTH_SHORT).show(); | ||||
loginViewModel.setHostName(this,bubbleName.getText().toString().trim()); | |||||
Log.d("TAG", "Success"); | Log.d("TAG", "Success"); | ||||
final Intent mainActivityIntent = new Intent(this, MainActivity.class); | final Intent mainActivityIntent = new Intent(this, MainActivity.class); | ||||
mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); | mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); | ||||
@@ -5,10 +5,12 @@ import androidx.appcompat.app.AppCompatActivity; | |||||
import androidx.lifecycle.Observer; | import androidx.lifecycle.Observer; | ||||
import androidx.lifecycle.ViewModelProvider; | import androidx.lifecycle.ViewModelProvider; | ||||
import android.content.Intent; | import android.content.Intent; | ||||
import android.net.Uri; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.view.View; | import android.view.View; | ||||
import android.view.View.OnClickListener; | import android.view.View.OnClickListener; | ||||
import android.widget.Button; | import android.widget.Button; | ||||
import android.widget.ImageButton; | |||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
import android.widget.TextView; | import android.widget.TextView; | ||||
import com.wireguard.android.R; | import com.wireguard.android.R; | ||||
@@ -22,6 +24,8 @@ public class MainActivity extends AppCompatActivity { | |||||
private Button connectButton; | private Button connectButton; | ||||
private ImageView imageMyBubble; | private ImageView imageMyBubble; | ||||
private ImageView mark; | private ImageView mark; | ||||
private ImageButton myBubbleButton; | |||||
private ImageButton accountButton; | |||||
private boolean connectionStateFlag; | private boolean connectionStateFlag; | ||||
private static final int REQUEST_CODE_VPN_PERMISSION = 23491; | 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 CONNECTED_TEXT_VIEW_TOP_MARGIN = 150; | ||||
public static final int DISCONNECTED_TEXT_VIEW_BOTTOM_MARGIN = 90; | public static final int DISCONNECTED_TEXT_VIEW_BOTTOM_MARGIN = 90; | ||||
public static final int CONNECTED_TEXT_VIEW_BOTTOM_MARGIN = 100; | 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 | @Override | ||||
protected void onCreate(Bundle savedInstanceState) { | protected void onCreate(Bundle savedInstanceState) { | ||||
@@ -68,6 +75,8 @@ public class MainActivity extends AppCompatActivity { | |||||
imageMyBubble = findViewById(R.id.imageMyBubble); | imageMyBubble = findViewById(R.id.imageMyBubble); | ||||
mark = findViewById(R.id.mark); | mark = findViewById(R.id.mark); | ||||
titleMyBubble = findViewById(R.id.titleMyBubble); | titleMyBubble = findViewById(R.id.titleMyBubble); | ||||
myBubbleButton = findViewById(R.id.myBubbleButton); | |||||
accountButton = findViewById(R.id.accountButton); | |||||
} | } | ||||
private void initListeners() { | private void initListeners() { | ||||
@@ -76,6 +85,32 @@ public class MainActivity extends AppCompatActivity { | |||||
connect(); | 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() { | private void connect() { | ||||
@@ -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(); | |||||
} | |||||
} | } |
@@ -12,10 +12,12 @@ public class UserStore { | |||||
private static final String DEVICE_DATA_KEY = "com.wireguard.android.util.bubbleDeviceResponse"; | 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 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 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 USER_TOKEN_DEFAULT_VALUE = ""; | ||||
public static final String DEVICE_DEFAULT_VALUE = ""; | public static final String DEVICE_DEFAULT_VALUE = ""; | ||||
public static final String DEVICE_ID_DEFAULT_VALUE = ""; | public static final String DEVICE_ID_DEFAULT_VALUE = ""; | ||||
public static final String USER_BASE_URL_DEFAULT_VALUE = ""; | public static final String USER_BASE_URL_DEFAULT_VALUE = ""; | ||||
private static final String HOSTNAME_DEFAULT_VALUE = ""; | |||||
public static UserStore getInstance(Context context) { | public static UserStore getInstance(Context context) { | ||||
if (instance == null) { | if (instance == null) { | ||||
@@ -61,4 +63,12 @@ public class UserStore { | |||||
public String getUserURL(){ | public String getUserURL(){ | ||||
return sharedPreferences.getString(USER_BASE_URL_KEY,USER_BASE_URL_DEFAULT_VALUE); | 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); | |||||
} | |||||
} | } |
@@ -36,4 +36,8 @@ public class LoginViewModel extends ViewModel { | |||||
public MutableLiveData<byte[]> getCertificate(Context context){ | public MutableLiveData<byte[]> getCertificate(Context context){ | ||||
return DataRepository.getRepositoryInstance().getCertificate(context); | return DataRepository.getRepositoryInstance().getCertificate(context); | ||||
} | } | ||||
public void setHostName(Context context, String hostname){ | |||||
DataRepository.getRepositoryInstance().setHostName(context,hostname); | |||||
} | |||||
} | } |
@@ -39,4 +39,8 @@ public class MainViewModel extends ViewModel { | |||||
public boolean isVPNConnected(Context context, boolean connectionStateFlag) { | public boolean isVPNConnected(Context context, boolean connectionStateFlag) { | ||||
return DataRepository.getRepositoryInstance().isVPNConnected(context,connectionStateFlag); | return DataRepository.getRepositoryInstance().isVPNConnected(context,connectionStateFlag); | ||||
} | } | ||||
public String getHostname(Context context){ | |||||
return DataRepository.getRepositoryInstance().getHostname(context); | |||||
} | |||||
} | } |
@@ -19,36 +19,36 @@ | |||||
app:layout_constraintEnd_toEndOf="parent" | app:layout_constraintEnd_toEndOf="parent" | ||||
app:layout_constraintStart_toStartOf="parent" /> | app:layout_constraintStart_toStartOf="parent" /> | ||||
<TextView | |||||
android:id="@+id/bubbleConnectionTitle" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginStart="@dimen/margin_start_and_end" | |||||
android:layout_marginTop="32dp" | |||||
android:layout_marginEnd="@dimen/margin_start_and_end" | |||||
android:fontFamily="@font/josefin_sans" | |||||
android:letterSpacing="-0.02" | |||||
android:text="@string/my_bubble" | |||||
android:textColor="@color/black" | |||||
android:textSize="@dimen/bubble_connection_title_text_size" | |||||
android:textStyle="bold" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintHorizontal_bias="0.498" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" /> | |||||
<TextView | |||||
android:id="@+id/title" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginStart="@dimen/margin_start_and_end" | |||||
android:layout_marginTop="@dimen/margin_start_and_end" | |||||
android:layout_marginEnd="@dimen/margin_start_and_end" | |||||
android:text="@string/your_private_bubble" | |||||
android:textAlignment="center" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/bubbleConnectionTitle" /> | |||||
<TextView | |||||
android:id="@+id/bubbleConnectionTitle" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginStart="@dimen/margin_start_and_end" | |||||
android:layout_marginTop="32dp" | |||||
android:layout_marginEnd="@dimen/margin_start_and_end" | |||||
android:fontFamily="@font/josefin_sans" | |||||
android:letterSpacing="-0.02" | |||||
android:text="@string/my_bubble" | |||||
android:textColor="@color/black" | |||||
android:textSize="@dimen/bubble_connection_title_text_size" | |||||
android:textStyle="bold" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintHorizontal_bias="0.498" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" /> | |||||
<TextView | |||||
android:id="@+id/title" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginStart="@dimen/margin_start_and_end" | |||||
android:layout_marginTop="@dimen/margin_start_and_end" | |||||
android:layout_marginEnd="@dimen/margin_start_and_end" | |||||
android:text="@string/your_private_bubble" | |||||
android:textAlignment="center" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/bubbleConnectionTitle" /> | |||||
<ImageView | <ImageView | ||||
@@ -84,9 +84,9 @@ | |||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:layout_marginStart="@dimen/margin_start_and_end" | android:layout_marginStart="@dimen/margin_start_and_end" | ||||
android:layout_marginTop="80dp" | android:layout_marginTop="80dp" | ||||
android:visibility="gone" | |||||
android:layout_marginEnd="@dimen/margin_start_and_end" | android:layout_marginEnd="@dimen/margin_start_and_end" | ||||
android:src="@drawable/mark" | android:src="@drawable/mark" | ||||
android:visibility="gone" | |||||
app:layout_constraintEnd_toEndOf="@+id/imageMyBubble" | app:layout_constraintEnd_toEndOf="@+id/imageMyBubble" | ||||
app:layout_constraintStart_toStartOf="@+id/imageMyBubble" | app:layout_constraintStart_toStartOf="@+id/imageMyBubble" | ||||
@@ -135,29 +135,29 @@ | |||||
</LinearLayout> | </LinearLayout> | ||||
<ImageButton | <ImageButton | ||||
android:id="@+id/myBubbleImageView" | |||||
android:id="@+id/myBubbleButton" | |||||
android:layout_width="@dimen/icons_size" | android:layout_width="@dimen/icons_size" | ||||
android:layout_height="@dimen/icons_size" | android:layout_height="@dimen/icons_size" | ||||
android:layout_marginStart="@dimen/margin_start_and_end" | android:layout_marginStart="@dimen/margin_start_and_end" | ||||
android:layout_marginBottom="44dp" | android:layout_marginBottom="44dp" | ||||
android:background="@drawable/my_bubble" | android:background="@drawable/my_bubble" | ||||
app:layout_constraintBottom_toBottomOf="parent" | app:layout_constraintBottom_toBottomOf="parent" | ||||
app:layout_constraintEnd_toStartOf="@+id/accountImageView" | |||||
app:layout_constraintEnd_toStartOf="@+id/accountButton" | |||||
app:layout_constraintHorizontal_bias="0.5" | app:layout_constraintHorizontal_bias="0.5" | ||||
app:layout_constraintStart_toStartOf="parent" /> | app:layout_constraintStart_toStartOf="parent" /> | ||||
<ImageButton | |||||
android:id="@+id/accountImageView" | |||||
android:layout_width="@dimen/icons_size" | |||||
android:layout_height="@dimen/icons_size" | |||||
android:layout_marginStart="@dimen/margin_start_and_end" | |||||
android:layout_marginEnd="@dimen/margin_start_and_end" | |||||
android:background="@drawable/account" | |||||
app:layout_constraintBottom_toBottomOf="@+id/myBubbleImageView" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintHorizontal_bias="0.5" | |||||
app:layout_constraintStart_toEndOf="@+id/myBubbleImageView" | |||||
app:layout_constraintTop_toTopOf="@+id/myBubbleImageView" /> | |||||
<ImageButton | |||||
android:id="@+id/accountButton" | |||||
android:layout_width="@dimen/icons_size" | |||||
android:layout_height="@dimen/icons_size" | |||||
android:layout_marginStart="@dimen/margin_start_and_end" | |||||
android:layout_marginEnd="@dimen/margin_start_and_end" | |||||
android:background="@drawable/account" | |||||
app:layout_constraintBottom_toBottomOf="@+id/myBubbleButton" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintHorizontal_bias="0.5" | |||||
app:layout_constraintStart_toEndOf="@+id/myBubbleButton" | |||||
app:layout_constraintTop_toTopOf="@+id/myBubbleButton" /> | |||||
<ImageButton | <ImageButton | ||||
android:id="@+id/imageButton" | android:id="@+id/imageButton" | ||||
@@ -166,9 +166,9 @@ | |||||
android:layout_marginTop="32dp" | android:layout_marginTop="32dp" | ||||
android:background="@drawable/home" | android:background="@drawable/home" | ||||
app:layout_constraintBottom_toBottomOf="parent" | app:layout_constraintBottom_toBottomOf="parent" | ||||
app:layout_constraintEnd_toStartOf="@+id/accountImageView" | |||||
app:layout_constraintStart_toEndOf="@+id/myBubbleImageView" | |||||
app:layout_constraintTop_toTopOf="@+id/myBubbleImageView" /> | |||||
app:layout_constraintEnd_toStartOf="@+id/accountButton" | |||||
app:layout_constraintStart_toEndOf="@+id/myBubbleButton" | |||||
app:layout_constraintTop_toTopOf="@+id/myBubbleButton" /> | |||||
<androidx.constraintlayout.widget.Constraints | <androidx.constraintlayout.widget.Constraints | ||||
android:id="@+id/constraints" | android:id="@+id/constraints" | ||||