summaryrefslogtreecommitdiff
path: root/app/src/normal
diff options
context:
space:
mode:
authorcyberta <cyberta@riseup.net>2022-12-06 05:22:58 +0000
committercyberta <cyberta@riseup.net>2022-12-06 05:22:58 +0000
commit64427ae7fa3b6ff14d484efd3dc513744a615945 (patch)
tree3ac508716ac0210603f32f80baf07881c80b3ab1 /app/src/normal
parentc0d1a28e5d737fbf24e13ade9fd6988a07ee2719 (diff)
parent4c6f49fe5ec695541be06322a1cf227e2d6d083d (diff)
Merge branch 'main_ui_riseupvpn' into 'master'
new UI for RiseupVPN See merge request leap/bitmask_android!219
Diffstat (limited to 'app/src/normal')
-rw-r--r--app/src/normal/java/se.leap.bitmaskclient.base.fragments/EipFragment.java654
-rw-r--r--app/src/normal/java/se/leap/bitmaskclient/base/views/MainButton.java57
-rw-r--r--app/src/normal/res/drawable-anydpi-v24/background_main.xml (renamed from app/src/normal/res/drawable/background_main.xml)0
-rw-r--r--app/src/normal/res/drawable-anydpi-v24/bg_connected.xml14
-rw-r--r--app/src/normal/res/drawable-anydpi-v24/bg_connected_effect.xml44
-rw-r--r--app/src/normal/res/drawable-anydpi-v24/bg_connecting.xml13
-rw-r--r--app/src/normal/res/drawable-anydpi-v24/bg_connecting_effect.xml44
-rw-r--r--app/src/normal/res/drawable-anydpi-v24/bg_disconnected.xml13
-rw-r--r--app/src/normal/res/drawable-anydpi-v24/bg_disconnected_effect.xml33
-rw-r--r--app/src/normal/res/drawable-anydpi-v24/rotate_progress_image.xml (renamed from app/src/normal/res/drawable/rotate_progress_image.xml)0
-rw-r--r--app/src/normal/res/drawable-anydpi-v24/splash_icon.xml14
-rw-r--r--app/src/normal/res/drawable-hdpi/bg_connected.pngbin0 -> 101464 bytes
-rw-r--r--app/src/normal/res/drawable-hdpi/bg_connecting.pngbin0 -> 137369 bytes
-rw-r--r--app/src/normal/res/drawable-hdpi/bg_disconnected.pngbin0 -> 59922 bytes
-rw-r--r--app/src/normal/res/drawable-hdpi/rotate_progress_image.pngbin0 -> 6427 bytes
-rw-r--r--app/src/normal/res/drawable-hdpi/state_connected.pngbin0 -> 81235 bytes
-rw-r--r--app/src/normal/res/drawable-hdpi/state_connecting.pngbin0 -> 80386 bytes
-rw-r--r--app/src/normal/res/drawable-hdpi/state_disconnected.pngbin0 -> 73514 bytes
-rw-r--r--app/src/normal/res/drawable-xhdpi/background_main.png (renamed from app/src/normal/res/drawable-xhdpi/ic_splash_background.png)bin64868 -> 64868 bytes
-rw-r--r--app/src/normal/res/drawable-xhdpi/bg_connected.pngbin0 -> 168784 bytes
-rw-r--r--app/src/normal/res/drawable-xhdpi/bg_connecting.pngbin0 -> 230677 bytes
-rw-r--r--app/src/normal/res/drawable-xhdpi/bg_disconnected.pngbin0 -> 79223 bytes
-rw-r--r--app/src/normal/res/drawable-xhdpi/rotate_progress_image.pngbin0 -> 9736 bytes
-rw-r--r--app/src/normal/res/drawable-xhdpi/state_connected.pngbin0 -> 121655 bytes
-rw-r--r--app/src/normal/res/drawable-xhdpi/state_connecting.pngbin0 -> 122701 bytes
-rw-r--r--app/src/normal/res/drawable-xhdpi/state_disconnected.pngbin0 -> 116193 bytes
-rw-r--r--app/src/normal/res/drawable-xxhdpi/rotate_progress_image.pngbin0 -> 12752 bytes
-rw-r--r--app/src/normal/res/drawable-xxhdpi/state_connected.pngbin0 -> 220730 bytes
-rw-r--r--app/src/normal/res/drawable-xxhdpi/state_connecting.pngbin0 -> 226345 bytes
-rw-r--r--app/src/normal/res/drawable-xxhdpi/state_disconnected.pngbin0 -> 222370 bytes
-rw-r--r--app/src/normal/res/drawable-xxxhdpi/background_main.png (renamed from app/src/normal/res/drawable-xxxhdpi/ic_splash_background.png)bin131879 -> 131879 bytes
-rw-r--r--app/src/normal/res/drawable-xxxhdpi/state_connected.pngbin0 -> 324196 bytes
-rw-r--r--app/src/normal/res/drawable-xxxhdpi/state_connecting.pngbin0 -> 334967 bytes
-rw-r--r--app/src/normal/res/drawable-xxxhdpi/state_disconnected.pngbin0 -> 362086 bytes
-rw-r--r--app/src/normal/res/drawable/background_eip.xml52
-rw-r--r--app/src/normal/res/drawable/background_main.png (renamed from app/src/normal/res/drawable-hdpi/ic_splash_background.png)bin39702 -> 39702 bytes
-rw-r--r--app/src/normal/res/drawable/bg_connected.pngbin0 -> 50250 bytes
-rw-r--r--app/src/normal/res/drawable/bg_connecting.pngbin0 -> 68160 bytes
-rw-r--r--app/src/normal/res/drawable/bg_disconnected.pngbin0 -> 59917 bytes
-rw-r--r--app/src/normal/res/drawable/ic_splash_background.xml4
-rw-r--r--app/src/normal/res/drawable/rotate_progress_image.pngbin0 -> 4945 bytes
-rw-r--r--app/src/normal/res/drawable/splash_branding.xml3
-rw-r--r--app/src/normal/res/drawable/state_connected.pngbin0 -> 47593 bytes
-rw-r--r--app/src/normal/res/drawable/state_connecting.pngbin0 -> 47055 bytes
-rw-r--r--app/src/normal/res/drawable/state_disconnected.pngbin0 -> 40172 bytes
-rw-r--r--app/src/normal/res/drawable/state_transition_connected_disconnected.pngbin0 -> 40172 bytes
-rw-r--r--app/src/normal/res/layout-port/f_eip.xml154
-rw-r--r--app/src/normal/res/layout-xlarge-port/f_eip.xml162
-rw-r--r--app/src/normal/res/layout-xlarge/f_eip.xml155
-rw-r--r--app/src/normal/res/layout/f_eip.xml164
-rw-r--r--app/src/normal/res/layout/v_location_button.xml104
-rw-r--r--app/src/normal/res/layout/v_main_button.xml142
-rw-r--r--app/src/normal/res/values-v31/themes.xml8
53 files changed, 190 insertions, 1644 deletions
diff --git a/app/src/normal/java/se.leap.bitmaskclient.base.fragments/EipFragment.java b/app/src/normal/java/se.leap.bitmaskclient.base.fragments/EipFragment.java
deleted file mode 100644
index 0210077c..00000000
--- a/app/src/normal/java/se.leap.bitmaskclient.base.fragments/EipFragment.java
+++ /dev/null
@@ -1,654 +0,0 @@
-/**
- * Copyright (c) 2018 LEAP Encryption Access Project and contributers
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package se.leap.bitmaskclient.base.fragments;
-
-import static de.blinkt.openvpn.core.ConnectionStatus.LEVEL_NONETWORK;
-import static se.leap.bitmaskclient.R.string.vpn_certificate_user_message;
-import static se.leap.bitmaskclient.base.models.Constants.ASK_TO_CANCEL_VPN;
-import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_START;
-import static se.leap.bitmaskclient.base.models.Constants.EIP_EARLY_ROUTES;
-import static se.leap.bitmaskclient.base.models.Constants.EIP_RESTART_ON_BOOT;
-import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_KEY;
-import static se.leap.bitmaskclient.base.models.Constants.REQUEST_CODE_CONFIGURE_LEAP;
-import static se.leap.bitmaskclient.base.models.Constants.REQUEST_CODE_LOG_IN;
-import static se.leap.bitmaskclient.base.models.Constants.REQUEST_CODE_SWITCH_PROVIDER;
-import static se.leap.bitmaskclient.base.models.Constants.SHARED_PREFERENCES;
-import static se.leap.bitmaskclient.base.utils.ConfigHelper.isDefaultBitmask;
-import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getPreferredCity;
-import static se.leap.bitmaskclient.eip.EipSetupObserver.reconnectingWithDifferentGateway;
-import static se.leap.bitmaskclient.eip.GatewaysManager.Load.UNKNOWN;
-import static se.leap.bitmaskclient.providersetup.ProviderAPI.DOWNLOAD_GEOIP_JSON;
-import static se.leap.bitmaskclient.providersetup.ProviderAPI.UPDATE_INVALID_VPN_CERTIFICATE;
-import static se.leap.bitmaskclient.providersetup.ProviderAPI.USER_MESSAGE;
-
-import android.app.Activity;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.TextUtils;
-import android.text.style.RelativeSizeSpan;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.ColorRes;
-import androidx.annotation.NonNull;
-import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.widget.AppCompatImageView;
-import androidx.appcompat.widget.AppCompatTextView;
-import androidx.core.content.ContextCompat;
-import androidx.fragment.app.DialogFragment;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentTransaction;
-
-import java.util.Observable;
-import java.util.Observer;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import de.blinkt.openvpn.core.ConnectionStatus;
-import de.blinkt.openvpn.core.IOpenVPNServiceInternal;
-import de.blinkt.openvpn.core.OpenVPNService;
-import de.blinkt.openvpn.core.VpnStatus;
-import de.blinkt.openvpn.core.connection.Connection;
-import se.leap.bitmaskclient.R;
-import se.leap.bitmaskclient.base.FragmentManagerEnhanced;
-import se.leap.bitmaskclient.base.MainActivity;
-import se.leap.bitmaskclient.base.models.Provider;
-import se.leap.bitmaskclient.base.models.ProviderObservable;
-import se.leap.bitmaskclient.base.utils.PreferenceHelper;
-import se.leap.bitmaskclient.base.views.LocationButton;
-import se.leap.bitmaskclient.base.views.MainButton;
-import se.leap.bitmaskclient.databinding.FEipBinding;
-import se.leap.bitmaskclient.eip.EipCommand;
-import se.leap.bitmaskclient.eip.EipStatus;
-import se.leap.bitmaskclient.eip.GatewaysManager;
-import se.leap.bitmaskclient.providersetup.ProviderAPICommand;
-import se.leap.bitmaskclient.providersetup.ProviderListActivity;
-import se.leap.bitmaskclient.providersetup.activities.CustomProviderSetupActivity;
-import se.leap.bitmaskclient.providersetup.activities.LoginActivity;
-import se.leap.bitmaskclient.providersetup.models.LeapSRPSession;
-import se.leap.bitmaskclient.tor.TorServiceCommand;
-import se.leap.bitmaskclient.tor.TorStatusObservable;
-
-public class EipFragment extends Fragment implements Observer {
-
- public final static String TAG = EipFragment.class.getSimpleName();
-
-
- private SharedPreferences preferences;
- private Provider provider;
-
- AppCompatImageView background;
- AppCompatImageView stateView;
- MainButton mainButton;
- LocationButton locationButton;
- AppCompatTextView mainDescription;
- AppCompatTextView subDescription;
-
- private EipStatus eipStatus;
- private ProviderObservable providerObservable;
- private TorStatusObservable torStatusObservable;
-
- private GatewaysManager gatewaysManager;
-
- //---saved Instance -------
- private final String KEY_SHOW_PENDING_START_CANCELLATION = "KEY_SHOW_PENDING_START_CANCELLATION";
- private final String KEY_SHOW_ASK_TO_STOP_EIP = "KEY_SHOW_ASK_TO_STOP_EIP";
- private boolean showPendingStartCancellation = false;
- private boolean showAskToStopEip = false;
- //------------------------
- AlertDialog alertDialog;
-
- private IOpenVPNServiceInternal mService;
- // We use this service connection to detect if openvpn is running without network
- private EipFragmentServiceConnection openVpnConnection;
-
- @Override
- public void onAttach(Context context) {
- super.onAttach(context);
- Bundle arguments = getArguments();
- Activity activity = getActivity();
- if (activity != null) {
- if (arguments != null) {
- provider = arguments.getParcelable(PROVIDER_KEY);
- if (provider == null) {
- handleNoProvider(activity);
- } else {
- Log.d(TAG, provider.getName() + " configured as provider");
- }
- } else {
- handleNoProvider(activity);
- }
- }
- }
-
- private void handleNoProvider(Activity activity) {
- if (isDefaultBitmask()) {
- activity.startActivityForResult(new Intent(activity, ProviderListActivity.class), REQUEST_CODE_SWITCH_PROVIDER);
- } else {
- Log.e(TAG, "no provider given - try to reconfigure custom provider");
- startActivityForResult(new Intent(activity, CustomProviderSetupActivity.class), REQUEST_CODE_CONFIGURE_LEAP);
-
- }
-
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- openVpnConnection = new EipFragmentServiceConnection();
- eipStatus = EipStatus.getInstance();
- providerObservable = ProviderObservable.getInstance();
- torStatusObservable = TorStatusObservable.getInstance();
- Activity activity = getActivity();
- if (activity != null) {
- preferences = getActivity().getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE);
- } else {
- Log.e(TAG, "activity is null in onCreate - no preferences set!");
- }
-
- gatewaysManager = new GatewaysManager(getContext());
-
-
- }
-
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- FEipBinding binding = FEipBinding.inflate(LayoutInflater.from(getContext()), container, false);
- background = binding.background;
- mainButton = binding.mainButton;
- locationButton = binding.gatewayLocationButton;
- locationButton.setTextColor(R.color.black800);
- mainDescription = binding.mainDescription;
- subDescription = binding.subDescription;
- stateView = binding.stateView;
-
- eipStatus.addObserver(this);
- torStatusObservable.addObserver(this);
- providerObservable.addObserver(this);
-
- try {
- Bundle arguments = getArguments();
- if (arguments != null && arguments.containsKey(ASK_TO_CANCEL_VPN) && arguments.getBoolean(ASK_TO_CANCEL_VPN)) {
- arguments.remove(ASK_TO_CANCEL_VPN);
- setArguments(arguments);
- askToStopEIP();
- }
- } catch (IllegalStateException e) {
- // probably setArguments failed because the fragments state is already saved
- e.printStackTrace();
- }
-
- restoreFromSavedInstance(savedInstanceState);
- locationButton.setOnClickListener(v -> {
- FragmentManagerEnhanced fragmentManager = new FragmentManagerEnhanced(getActivity().getSupportFragmentManager());
- Fragment fragment = new GatewaySelectionFragment();
- fragmentManager.replace(R.id.main_container, fragment, MainActivity.TAG);
- });
-
- mainButton.setOnClickListener(v -> {
- handleIcon();
- });
- return binding.getRoot();
- }
-
- @Override
- public void onStart() {
- super.onStart();
- if (DonationReminderDialog.isCallable(getContext())) {
- showDonationReminderDialog();
- }
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (!eipStatus.isDisconnected()) {
- openVpnConnection.bindService();
- }
- handleNewState();
- }
-
- @Override
- public void onPause() {
- super.onPause();
- openVpnConnection.unbindService();
- }
-
- @Override
- public void onSaveInstanceState(@NonNull Bundle outState) {
- super.onSaveInstanceState(outState);
- if (showAskToStopEip) {
- outState.putBoolean(KEY_SHOW_ASK_TO_STOP_EIP, true);
- alertDialog.dismiss();
- } else if (showPendingStartCancellation) {
- outState.putBoolean(KEY_SHOW_PENDING_START_CANCELLATION, true);
- alertDialog.dismiss();
- }
- }
-
- private void restoreFromSavedInstance(Bundle savedInstanceState) {
- if (savedInstanceState != null && savedInstanceState.containsKey(KEY_SHOW_PENDING_START_CANCELLATION)) {
- showPendingStartCancellation = true;
- askPendingStartCancellation();
- } else if (savedInstanceState != null && savedInstanceState.containsKey(KEY_SHOW_ASK_TO_STOP_EIP)) {
- showAskToStopEip = true;
- askToStopEIP();
- }
- }
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- Activity activity = getActivity();
- if (activity != null) {
- ((MainActivity) activity).setDefaultActivityBarColor();
- }
- eipStatus.deleteObserver(this);
- providerObservable.deleteObserver(this);
- torStatusObservable.deleteObserver(this);
- background = null;
- mainButton = null;
- locationButton = null;
- mainDescription = null;
- subDescription = null;
- stateView = null;
- }
-
- private void saveStatus(boolean restartOnBoot) {
- preferences.edit().putBoolean(EIP_RESTART_ON_BOOT, restartOnBoot).apply();
- }
-
- void handleIcon() {
- if (isOpenVpnRunningWithoutNetwork() || eipStatus.isConnected() || eipStatus.isConnecting() || eipStatus.isUpdatingVpnCert())
- handleSwitchOff();
- else
- handleSwitchOn();
- }
-
- private void handleSwitchOn() {
- Context context = getContext();
- if (context == null) {
- Log.e(TAG, "context is null when switch turning on");
- return;
- }
-
- if (canStartEIP()) {
- startEipFromScratch();
- } else if (canLogInToStartEIP()) {
- askUserToLogIn(getString(vpn_certificate_user_message));
- } else {
- // provider has no VpnCertificate but user is logged in
- updateInvalidVpnCertificate();
- }
- }
-
- private boolean canStartEIP() {
- boolean certificateExists = provider.hasVpnCertificate();
- boolean isAllowedAnon = provider.allowsAnonymous();
- return (isAllowedAnon || certificateExists) && !eipStatus.isConnected() && !eipStatus.isConnecting();
- }
-
- private boolean canLogInToStartEIP() {
- boolean isAllowedRegistered = provider.allowsRegistered();
- boolean isLoggedIn = LeapSRPSession.loggedIn();
- return isAllowedRegistered && !isLoggedIn && !eipStatus.isConnecting() && !eipStatus.isConnected();
- }
-
- private void handleSwitchOff() {
- if (isOpenVpnRunningWithoutNetwork() || eipStatus.isConnecting() || eipStatus.isUpdatingVpnCert()) {
- askPendingStartCancellation();
- } else if (eipStatus.isConnected()) {
- askToStopEIP();
- }
- }
-
- private void setMainButtonEnabled(boolean enabled) {
- locationButton.setEnabled(enabled);
- mainButton.setEnabled(enabled);
- }
-
- public void startEipFromScratch() {
- saveStatus(true);
- Context context = getContext();
- if (context == null) {
- Log.e(TAG, "context is null when trying to start VPN");
- return;
- }
- if (!provider.getGeoipUrl().isDefault() && provider.shouldUpdateGeoIpJson()) {
- Bundle bundle = new Bundle();
- bundle.putBoolean(EIP_ACTION_START, true);
- bundle.putBoolean(EIP_EARLY_ROUTES, false);
- ProviderAPICommand.execute(context, DOWNLOAD_GEOIP_JSON, bundle, provider);
- } else {
- EipCommand.startVPN(context, false);
- }
- EipStatus.getInstance().updateState("UI_CONNECTING", "", 0, ConnectionStatus.LEVEL_START);
- }
-
- protected void stopEipIfPossible() {
- Context context = getContext();
- if (context == null) {
- Log.e(TAG, "context is null when trying to stop EIP");
- return;
- }
- EipCommand.stopVPN(context);
- }
-
- private void askPendingStartCancellation() {
- Activity activity = getActivity();
- if (activity == null) {
- Log.e(TAG, "activity is null when asking to cancel");
- return;
- }
-
- try {
- AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());
- showPendingStartCancellation = true;
- alertDialog = alertBuilder.setTitle(activity.getString(R.string.eip_cancel_connect_title))
- .setMessage(activity.getString(R.string.eip_cancel_connect_text))
- .setPositiveButton((android.R.string.yes), (dialog, which) -> {
- Context context = getContext();
- if (context != null && eipStatus.isUpdatingVpnCert() &&
- TorStatusObservable.isRunning()) {
- TorServiceCommand.stopTorServiceAsync(context.getApplicationContext());
- }
- stopEipIfPossible();
- })
- .setNegativeButton(activity.getString(android.R.string.no), (dialog, which) -> {
- }).setOnDismissListener(dialog -> showPendingStartCancellation = false).show();
- } catch (IllegalStateException e) {
- e.printStackTrace();
- }
-
- }
-
- protected void askToStopEIP() {
- Activity activity = getActivity();
- if (activity == null) {
- Log.e(TAG, "activity is null when asking to stop EIP");
- return;
- }
- try {
- AlertDialog.Builder alertBuilder = new AlertDialog.Builder(activity);
- showAskToStopEip = true;
- alertDialog = alertBuilder.setTitle(activity.getString(R.string.eip_cancel_connect_title))
- .setMessage(activity.getString(R.string.eip_warning_browser_inconsistency))
- .setPositiveButton((android.R.string.yes), (dialog, which) -> stopEipIfPossible())
- .setNegativeButton(activity.getString(android.R.string.no), (dialog, which) -> {
- }).setOnDismissListener(dialog -> showAskToStopEip = false).show();
- } catch (IllegalStateException e) {
- e.printStackTrace();
- }
-
- }
-
- @Override
- public void update(Observable observable, Object data) {
- if (observable instanceof EipStatus) {
- eipStatus = (EipStatus) observable;
- handleNewStateOnMain();
-
- if (eipStatus.isConnecting()) {
- openVpnConnection.bindService();
- }
- if ("NOPROCESS".equals(EipStatus.getInstance().getState())) {
- //assure that the Service is shutdown completely if openvpn was stopped
- openVpnConnection.unbindService();
- }
- } else if (observable instanceof ProviderObservable) {
- provider = ((ProviderObservable) observable).getCurrentProvider();
- } else if (observable instanceof TorStatusObservable && EipStatus.getInstance().isUpdatingVpnCert()) {
- handleNewStateOnMain();
- }
- }
-
- private void handleNewStateOnMain() {
- Activity activity = getActivity();
- if (activity != null) {
- activity.runOnUiThread(this::handleNewState);
- } else {
- Log.e("EipFragment", "activity is null");
- }
- }
-
- private void setActivityBarColor(@ColorRes int primaryColor, @ColorRes int secondaryColor) {
- Activity activity = getActivity();
- if (activity == null) {
- return;
- }
- ((MainActivity) getActivity()).setActivityBarColor(primaryColor, secondaryColor, R.color.actionbar_dark_color);
- }
-
- private void handleNewState() {
- Activity activity = getActivity();
- if (activity == null) {
- Log.e(TAG, "activity is null while trying to handle new state");
- return;
- }
-
- Log.d(TAG, "eip fragment eipStatus state: " + eipStatus.getState() + " - level: " + eipStatus.getLevel() + " - is reconnecting: " + eipStatus.isReconnecting());
- if (eipStatus.isUpdatingVpnCert()) {
- setMainButtonEnabled(true);
- String city = getPreferredCity(getContext());
- String locationName = VpnStatus.getCurrentlyConnectingVpnName() != null ?
- VpnStatus.getCurrentlyConnectingVpnName() :
- city == null ? getString(R.string.gateway_selection_recommended_location) : city;
- locationButton.setText(locationName);
- locationButton.setLocationLoad(UNKNOWN);
- locationButton.showBridgeIndicator(false);
- locationButton.showRecommendedIndicator(false);
- mainDescription.setText(R.string.eip_status_connecting);
- String torStatus = TorStatusObservable.getStringForCurrentStatus(getContext());
- if (!TextUtils.isEmpty(torStatus)) {
- Spannable spannable = new SpannableString(torStatus);
- spannable.setSpan(new RelativeSizeSpan(0.75f), 0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- subDescription.setText(TextUtils.concat(getString(R.string.updating_certificate_message) + "\n", spannable));
- } else {
- subDescription.setText(getString(R.string.updating_certificate_message));
- }
- background.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.bg_connecting));
- stateView.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.yellow_mask));
- mainButton.updateState(false, true, false);
- setActivityBarColor(R.color.bg_connecting_top, R.color.bg_connecting_top_light_transparent);
- } else if (eipStatus.isConnecting()) {
- setMainButtonEnabled(true);
- String city = getPreferredCity(getContext());
- String locationName = VpnStatus.getCurrentlyConnectingVpnName() != null ?
- VpnStatus.getCurrentlyConnectingVpnName() :
- city == null ? getString(R.string.gateway_selection_recommended_location) : city;
- locationButton.setText(locationName);
- locationButton.setLocationLoad(UNKNOWN);
- locationButton.showBridgeIndicator(false);
- locationButton.showRecommendedIndicator(false);
- mainDescription.setText(R.string.eip_status_connecting);
- subDescription.setText(null);
- background.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.bg_connecting));
- stateView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.yellow_mask));
- mainButton.updateState(false, true, false);
- setActivityBarColor(R.color.bg_connecting_top, R.color.bg_connecting_top_light_transparent);
- } else if (eipStatus.isConnected()) {
- setMainButtonEnabled(true);
- mainButton.updateState(true, false, false);
- Connection.TransportType transportType = PreferenceHelper.getUseBridges(getContext()) ? Connection.TransportType.OBFS4 : Connection.TransportType.OPENVPN;
- locationButton.setLocationLoad(PreferenceHelper.useObfuscationPinning(getContext()) ? GatewaysManager.Load.UNKNOWN : gatewaysManager.getLoadForLocation(VpnStatus.getLastConnectedVpnName(), transportType));
- locationButton.setText(VpnStatus.getLastConnectedVpnName());
- locationButton.showBridgeIndicator(VpnStatus.isUsingBridges());
- locationButton.showRecommendedIndicator(getPreferredCity(getContext()) == null);
- mainDescription.setText(R.string.eip_status_secured);
- subDescription.setText(null);
- background.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.bg_connected));
- stateView.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.green_mask));
- setActivityBarColor(R.color.bg_running_top, R.color.bg_running_top_light_transparent);
- } else if(isOpenVpnRunningWithoutNetwork()) {
- Log.d(TAG, "eip fragment eipStatus - isOpenVpnRunningWithoutNetwork");
- setMainButtonEnabled(true);
- mainButton.updateState(true, false, true);
- locationButton.setText(VpnStatus.getCurrentlyConnectingVpnName());
- locationButton.showBridgeIndicator(VpnStatus.isUsingBridges());
- locationButton.showBridgeIndicator(VpnStatus.isUsingBridges());
- locationButton.showRecommendedIndicator(getPreferredCity(getContext())== null);
- mainDescription.setText(R.string.eip_state_connected);
- subDescription.setText(R.string.eip_state_no_network);
- background.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.bg_connecting));
- stateView.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.yellow_mask));
- setActivityBarColor(R.color.bg_connecting_top, R.color.bg_connecting_top_light_transparent);
- } else if (eipStatus.isDisconnected() && reconnectingWithDifferentGateway()) {
- locationButton.setText(VpnStatus.getCurrentlyConnectingVpnName());
- locationButton.setLocationLoad(UNKNOWN);
- locationButton.showBridgeIndicator(false);
- locationButton.showRecommendedIndicator(false);
- mainDescription.setText(R.string.eip_status_connecting);
- subDescription.setText(R.string.reconnecting);
- background.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.bg_connecting));
- stateView.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.yellow_mask));
- setActivityBarColor(R.color.bg_connecting_top, R.color.bg_connecting_top_light_transparent);
-
- } else if (eipStatus.isDisconnecting()) {
- setMainButtonEnabled(false);
- background.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.bg_disconnected));
- stateView.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.red_mask));
- mainButton.updateState(false, false, false);
- mainDescription.setText(R.string.eip_status_unsecured);
- setActivityBarColor(R.color.bg_disconnected_top, R.color.bg_disconnected_top_light_transparent);
- } else if (eipStatus.isBlocking()) {
- setMainButtonEnabled(true);
- mainButton.updateState(true, false, true);
- locationButton.setText(getString(R.string.no_location));
- locationButton.setLocationLoad(UNKNOWN);
- locationButton.showBridgeIndicator(false);
- locationButton.showRecommendedIndicator(false);
- mainDescription.setText(R.string.eip_state_connected);
- subDescription.setText(getString(R.string.eip_state_blocking, getString(R.string.app_name)));
- background.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.bg_disconnected));
- stateView.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.red_mask));
- setActivityBarColor(R.color.bg_disconnected_top, R.color.bg_disconnected_top_light_transparent);
- } else {
- locationButton.setText(getContext().getString(R.string.vpn_button_turn_on));
- setMainButtonEnabled(true);
- mainButton.updateState(false, false, false);
- locationButton.setLocationLoad(UNKNOWN);
- locationButton.showBridgeIndicator(false);
- String city = getPreferredCity(getContext());
- locationButton.setText(city == null ? getString(R.string.gateway_selection_recommended_location) : city);
- locationButton.showRecommendedIndicator(false);
- mainDescription.setText(R.string.eip_status_unsecured);
- subDescription.setText(null);
- background.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.bg_disconnected));
- stateView.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.red_mask));
- setActivityBarColor(R.color.bg_disconnected_top, R.color.bg_disconnected_top_light_transparent);
- }
- }
-
- private boolean isOpenVpnRunningWithoutNetwork() {
- boolean isRunning = false;
- try {
- isRunning = eipStatus.getLevel() == LEVEL_NONETWORK &&
- mService.isVpnRunning();
- } catch (Exception e) {
- //eat me
- e.printStackTrace();
- }
-
- return isRunning;
- }
-
- private void updateInvalidVpnCertificate() {
- eipStatus.setUpdatingVpnCert(true);
- ProviderAPICommand.execute(getContext(), UPDATE_INVALID_VPN_CERTIFICATE, provider);
- }
-
- private void askUserToLogIn(String userMessage) {
- Intent intent = new Intent(getContext(), LoginActivity.class);
- intent.putExtra(PROVIDER_KEY, provider);
-
- if(userMessage != null) {
- intent.putExtra(USER_MESSAGE, userMessage);
- }
-
- Activity activity = getActivity();
- if (activity != null) {
- activity.startActivityForResult(intent, REQUEST_CODE_LOG_IN);
- }
- }
-
- private class EipFragmentServiceConnection implements ServiceConnection {
- private final AtomicBoolean bind = new AtomicBoolean(false);
-
- void bindService() {
- Activity activity = getActivity();
- if (activity == null) {
- Log.e(TAG, "activity is null when binding OpenVpn");
- return;
- }
- if (!bind.get()) {
- activity.runOnUiThread(() -> {
- Intent intent = new Intent(activity, OpenVPNService.class);
- intent.setAction(OpenVPNService.START_SERVICE);
-
- activity.bindService(intent, EipFragmentServiceConnection.this, Context.BIND_AUTO_CREATE);
- bind.set(true);
- });
- }
- }
-
- void unbindService() {
- Activity activity = getActivity();
- if (activity == null) {
- return;
- }
- if (bind.get()) {
- activity.runOnUiThread(() -> {
- activity.unbindService(EipFragmentServiceConnection.this);
- bind.set(false);
- });
- }
- }
-
- @Override
- public void onServiceConnected(ComponentName className,
- IBinder service) {
- mService = IOpenVPNServiceInternal.Stub.asInterface(service);
- handleNewState();
- }
-
- @Override
- public void onServiceDisconnected(ComponentName arg0) {
- mService = null;
- }
- }
-
- public void showDonationReminderDialog() {
- try {
- FragmentTransaction fragmentTransaction = new FragmentManagerEnhanced(
- getActivity().getSupportFragmentManager()).removePreviousFragment(
- DonationReminderDialog.TAG);
- DialogFragment newFragment = new DonationReminderDialog();
- newFragment.setCancelable(false);
- newFragment.show(fragmentTransaction, DonationReminderDialog.TAG);
- } catch (IllegalStateException | NullPointerException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/app/src/normal/java/se/leap/bitmaskclient/base/views/MainButton.java b/app/src/normal/java/se/leap/bitmaskclient/base/views/MainButton.java
deleted file mode 100644
index 715063b5..00000000
--- a/app/src/normal/java/se/leap/bitmaskclient/base/views/MainButton.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package se.leap.bitmaskclient.base.views;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.widget.RelativeLayout;
-
-import androidx.appcompat.widget.AppCompatImageView;
-import androidx.core.content.ContextCompat;
-
-import se.leap.bitmaskclient.R;
-import se.leap.bitmaskclient.databinding.VMainButtonBinding;
-
-public class MainButton extends RelativeLayout {
-
- private static final String TAG = MainButton.class.getSimpleName();
-
- AppCompatImageView button;
-
- public MainButton(Context context) {
- super(context);
- initLayout(context);
- }
-
- public MainButton(Context context, AttributeSet attrs) {
- super(context, attrs);
- initLayout(context);
- }
-
- public MainButton(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- initLayout(context);
- }
-
-
- @TargetApi(21)
- public MainButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- initLayout(context);
- }
-
- private void initLayout(Context context) {
- VMainButtonBinding binding = VMainButtonBinding.inflate(LayoutInflater.from(context), this, true);
- button = binding.button;
- }
-
- public void updateState(boolean isOn, boolean isProcessing, boolean isError) {
- if (isProcessing) {
- button.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.button_circle_cancel));
- } else {
- button.setImageDrawable(
- ContextCompat.getDrawable(getContext(),
- isOn ? R.drawable.button_circle_stop : R.drawable.button_circle_start));
- }
- }
-}
diff --git a/app/src/normal/res/drawable/background_main.xml b/app/src/normal/res/drawable-anydpi-v24/background_main.xml
index 4b60e9dc..4b60e9dc 100644
--- a/app/src/normal/res/drawable/background_main.xml
+++ b/app/src/normal/res/drawable-anydpi-v24/background_main.xml
diff --git a/app/src/normal/res/drawable-anydpi-v24/bg_connected.xml b/app/src/normal/res/drawable-anydpi-v24/bg_connected.xml
new file mode 100644
index 00000000..19dac103
--- /dev/null
+++ b/app/src/normal/res/drawable-anydpi-v24/bg_connected.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:gravity="fill">
+ <shape android:shape="rectangle">
+ <solid android:color="@color/bg_running"/>
+ </shape>
+ </item>
+ <item
+ android:top="80dp"
+ android:gravity="fill"
+ android:drawable="@drawable/bg_connected_effect"
+ >
+ </item>
+</layer-list> \ No newline at end of file
diff --git a/app/src/normal/res/drawable-anydpi-v24/bg_connected_effect.xml b/app/src/normal/res/drawable-anydpi-v24/bg_connected_effect.xml
new file mode 100644
index 00000000..08ef8172
--- /dev/null
+++ b/app/src/normal/res/drawable-anydpi-v24/bg_connected_effect.xml
@@ -0,0 +1,44 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
+ android:viewportWidth="411"
+ android:viewportHeight="703"
+ android:width="411dp"
+ android:height="703dp">
+ <path
+ android:pathData="M628.549 500.593C751.417 416.034 654.462 61.8767 411.994 -290.44C169.527 -642.756 -126.637 -859.816 -249.505 -775.257C-372.373 -690.697 -275.418 -336.54 -32.9505 15.7764C209.517 368.093 505.681 585.153 628.549 500.593Z">
+ <aapt:attr
+ name="android:fillColor">
+ <gradient
+ android:startX="415.099"
+ android:startY="-19.956"
+ android:endX="685.832"
+ android:endY="373.431"
+ android:tileMode="clamp">
+ <item
+ android:color="#00A6C28A"
+ android:offset="0" />
+ <item
+ android:color="#44669933"
+ android:offset="1" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:pathData="M-186.124 473.683C-63.0333 557.917 232.557 340.077 474.094 -12.8776C715.632 -365.832 811.653 -720.244 688.562 -804.479C565.471 -888.714 269.881 -670.874 28.3433 -317.919C-213.195 35.0357 -309.215 389.448 -186.124 473.683Z">
+ <aapt:attr
+ name="android:fillColor">
+ <gradient
+ android:startX="222.826"
+ android:startY="87.2986"
+ android:endX="-46.8688"
+ android:endY="481.398"
+ android:tileMode="clamp">
+ <item
+ android:color="#00A6C28A"
+ android:offset="0" />
+ <item
+ android:color="#44669933"
+ android:offset="1" />
+ </gradient>
+ </aapt:attr>
+ </path>
+</vector>
diff --git a/app/src/normal/res/drawable-anydpi-v24/bg_connecting.xml b/app/src/normal/res/drawable-anydpi-v24/bg_connecting.xml
new file mode 100644
index 00000000..8482d30e
--- /dev/null
+++ b/app/src/normal/res/drawable-anydpi-v24/bg_connecting.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:gravity="fill">
+ <shape android:shape="rectangle">
+ <solid android:color="@color/bg_connecting"/>
+ </shape>
+ </item>
+ <item android:gravity="fill"
+ android:bottom="80dp"
+ android:drawable="@drawable/bg_connecting_effect"
+ >
+ </item>
+</layer-list> \ No newline at end of file
diff --git a/app/src/normal/res/drawable-anydpi-v24/bg_connecting_effect.xml b/app/src/normal/res/drawable-anydpi-v24/bg_connecting_effect.xml
new file mode 100644
index 00000000..fd462a54
--- /dev/null
+++ b/app/src/normal/res/drawable-anydpi-v24/bg_connecting_effect.xml
@@ -0,0 +1,44 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
+ android:viewportWidth="375"
+ android:viewportHeight="629"
+ android:width="375dp"
+ android:height="629dp">
+ <path
+ android:pathData="M96.6338 471.305C226.719 515.286 420.512 289.654 529.484 -32.658C638.456 -354.97 621.341 -651.909 491.256 -695.89C361.172 -739.871 167.378 -514.239 58.4058 -191.927C-50.5662 130.385 -33.4509 427.324 96.6338 471.305Z">
+ <aapt:attr
+ name="android:fillColor">
+ <gradient
+ android:startX="132.695"
+ android:startY="21.7787"
+ android:endX="11.0197"
+ android:endY="381.664"
+ android:tileMode="clamp">
+ <item
+ android:color="#00FFAA33"
+ android:offset="0" />
+ <item
+ android:color="#33FFAA33"
+ android:offset="1" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:pathData="M183.501 628.837C313.565 628.837 419.003 353.304 419.003 13.4182C419.003 -326.468 313.565 -602 183.501 -602C53.4376 -602 -52 -326.468 -52 13.4182C-52 353.304 53.4376 628.837 183.501 628.837Z">
+ <aapt:attr
+ name="android:fillColor">
+ <gradient
+ android:startX="183.501"
+ android:startY="255.483"
+ android:endX="183.501"
+ android:endY="634.991"
+ android:tileMode="clamp">
+ <item
+ android:color="#00FFAA33"
+ android:offset="0" />
+ <item
+ android:color="#33FFAA33"
+ android:offset="1" />
+ </gradient>
+ </aapt:attr>
+ </path>
+</vector> \ No newline at end of file
diff --git a/app/src/normal/res/drawable-anydpi-v24/bg_disconnected.xml b/app/src/normal/res/drawable-anydpi-v24/bg_disconnected.xml
new file mode 100644
index 00000000..a5729185
--- /dev/null
+++ b/app/src/normal/res/drawable-anydpi-v24/bg_disconnected.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:gravity="fill">
+ <shape android:shape="rectangle">
+ <solid android:color="@color/bg_disconnected"/>
+ </shape>
+ </item>
+ <item
+ android:gravity="fill"
+ android:drawable="@drawable/bg_disconnected_effect"
+ >
+ </item>
+</layer-list> \ No newline at end of file
diff --git a/app/src/normal/res/drawable-anydpi-v24/bg_disconnected_effect.xml b/app/src/normal/res/drawable-anydpi-v24/bg_disconnected_effect.xml
new file mode 100644
index 00000000..bcc6064a
--- /dev/null
+++ b/app/src/normal/res/drawable-anydpi-v24/bg_disconnected_effect.xml
@@ -0,0 +1,33 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
+ android:viewportWidth="375"
+ android:viewportHeight="636"
+ android:width="375dp"
+ android:height="636dp"
+ >
+ <group
+ android:scaleY="0.8"
+ android:scaleX="1.25"
+ android:translateX="-46.875"
+ >
+ <path
+ android:pathData="M183.514 458.837C313.578 458.837 419.016 183.305 419.016 -156.582C419.016 -496.468 313.578 -772 183.514 -772C53.4506 -772 -51.9869 -496.468 -51.9869 -156.582C-51.9869 183.305 53.4506 458.837 183.514 458.837Z">
+ <aapt:attr
+ name="android:fillColor">
+ <gradient
+ android:startX="183.514"
+ android:startY="0"
+ android:endX="183.514"
+ android:endY="212"
+ android:tileMode="clamp">
+ <item
+ android:color="#55D3635C"
+ android:offset="0" />
+ <item
+ android:color="#33AF0909"
+ android:offset="1" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ </group>
+
+</vector> \ No newline at end of file
diff --git a/app/src/normal/res/drawable/rotate_progress_image.xml b/app/src/normal/res/drawable-anydpi-v24/rotate_progress_image.xml
index 44a35ba9..44a35ba9 100644
--- a/app/src/normal/res/drawable/rotate_progress_image.xml
+++ b/app/src/normal/res/drawable-anydpi-v24/rotate_progress_image.xml
diff --git a/app/src/normal/res/drawable-anydpi-v24/splash_icon.xml b/app/src/normal/res/drawable-anydpi-v24/splash_icon.xml
new file mode 100644
index 00000000..f882d322
--- /dev/null
+++ b/app/src/normal/res/drawable-anydpi-v24/splash_icon.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/rotate_progress_image"
+ android:height="198dp"
+ android:width="198dp"
+ android:gravity="fill"/>
+ <item
+ android:gravity="center"
+ android:height="52.75dp"
+ android:width="80dp"
+ >
+ <bitmap android:src="@drawable/logo"/>
+ </item>
+</layer-list> \ No newline at end of file
diff --git a/app/src/normal/res/drawable-hdpi/bg_connected.png b/app/src/normal/res/drawable-hdpi/bg_connected.png
new file mode 100644
index 00000000..7c64939a
--- /dev/null
+++ b/app/src/normal/res/drawable-hdpi/bg_connected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-hdpi/bg_connecting.png b/app/src/normal/res/drawable-hdpi/bg_connecting.png
new file mode 100644
index 00000000..49620c2c
--- /dev/null
+++ b/app/src/normal/res/drawable-hdpi/bg_connecting.png
Binary files differ
diff --git a/app/src/normal/res/drawable-hdpi/bg_disconnected.png b/app/src/normal/res/drawable-hdpi/bg_disconnected.png
new file mode 100644
index 00000000..36a048d5
--- /dev/null
+++ b/app/src/normal/res/drawable-hdpi/bg_disconnected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-hdpi/rotate_progress_image.png b/app/src/normal/res/drawable-hdpi/rotate_progress_image.png
new file mode 100644
index 00000000..d7c85e02
--- /dev/null
+++ b/app/src/normal/res/drawable-hdpi/rotate_progress_image.png
Binary files differ
diff --git a/app/src/normal/res/drawable-hdpi/state_connected.png b/app/src/normal/res/drawable-hdpi/state_connected.png
new file mode 100644
index 00000000..fccc060a
--- /dev/null
+++ b/app/src/normal/res/drawable-hdpi/state_connected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-hdpi/state_connecting.png b/app/src/normal/res/drawable-hdpi/state_connecting.png
new file mode 100644
index 00000000..72e3ae45
--- /dev/null
+++ b/app/src/normal/res/drawable-hdpi/state_connecting.png
Binary files differ
diff --git a/app/src/normal/res/drawable-hdpi/state_disconnected.png b/app/src/normal/res/drawable-hdpi/state_disconnected.png
new file mode 100644
index 00000000..d2ef7d99
--- /dev/null
+++ b/app/src/normal/res/drawable-hdpi/state_disconnected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xhdpi/ic_splash_background.png b/app/src/normal/res/drawable-xhdpi/background_main.png
index c2135c04..c2135c04 100644
--- a/app/src/normal/res/drawable-xhdpi/ic_splash_background.png
+++ b/app/src/normal/res/drawable-xhdpi/background_main.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xhdpi/bg_connected.png b/app/src/normal/res/drawable-xhdpi/bg_connected.png
new file mode 100644
index 00000000..ca129080
--- /dev/null
+++ b/app/src/normal/res/drawable-xhdpi/bg_connected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xhdpi/bg_connecting.png b/app/src/normal/res/drawable-xhdpi/bg_connecting.png
new file mode 100644
index 00000000..294e4708
--- /dev/null
+++ b/app/src/normal/res/drawable-xhdpi/bg_connecting.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xhdpi/bg_disconnected.png b/app/src/normal/res/drawable-xhdpi/bg_disconnected.png
new file mode 100644
index 00000000..15bdb108
--- /dev/null
+++ b/app/src/normal/res/drawable-xhdpi/bg_disconnected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xhdpi/rotate_progress_image.png b/app/src/normal/res/drawable-xhdpi/rotate_progress_image.png
new file mode 100644
index 00000000..d6eb6b65
--- /dev/null
+++ b/app/src/normal/res/drawable-xhdpi/rotate_progress_image.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xhdpi/state_connected.png b/app/src/normal/res/drawable-xhdpi/state_connected.png
new file mode 100644
index 00000000..c852459d
--- /dev/null
+++ b/app/src/normal/res/drawable-xhdpi/state_connected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xhdpi/state_connecting.png b/app/src/normal/res/drawable-xhdpi/state_connecting.png
new file mode 100644
index 00000000..d81190fe
--- /dev/null
+++ b/app/src/normal/res/drawable-xhdpi/state_connecting.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xhdpi/state_disconnected.png b/app/src/normal/res/drawable-xhdpi/state_disconnected.png
new file mode 100644
index 00000000..c0d57a03
--- /dev/null
+++ b/app/src/normal/res/drawable-xhdpi/state_disconnected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xxhdpi/rotate_progress_image.png b/app/src/normal/res/drawable-xxhdpi/rotate_progress_image.png
new file mode 100644
index 00000000..893b074b
--- /dev/null
+++ b/app/src/normal/res/drawable-xxhdpi/rotate_progress_image.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xxhdpi/state_connected.png b/app/src/normal/res/drawable-xxhdpi/state_connected.png
new file mode 100644
index 00000000..32286177
--- /dev/null
+++ b/app/src/normal/res/drawable-xxhdpi/state_connected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xxhdpi/state_connecting.png b/app/src/normal/res/drawable-xxhdpi/state_connecting.png
new file mode 100644
index 00000000..75cf3782
--- /dev/null
+++ b/app/src/normal/res/drawable-xxhdpi/state_connecting.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xxhdpi/state_disconnected.png b/app/src/normal/res/drawable-xxhdpi/state_disconnected.png
new file mode 100644
index 00000000..ac560317
--- /dev/null
+++ b/app/src/normal/res/drawable-xxhdpi/state_disconnected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xxxhdpi/ic_splash_background.png b/app/src/normal/res/drawable-xxxhdpi/background_main.png
index 1b8046fa..1b8046fa 100644
--- a/app/src/normal/res/drawable-xxxhdpi/ic_splash_background.png
+++ b/app/src/normal/res/drawable-xxxhdpi/background_main.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xxxhdpi/state_connected.png b/app/src/normal/res/drawable-xxxhdpi/state_connected.png
new file mode 100644
index 00000000..f5a5adaf
--- /dev/null
+++ b/app/src/normal/res/drawable-xxxhdpi/state_connected.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xxxhdpi/state_connecting.png b/app/src/normal/res/drawable-xxxhdpi/state_connecting.png
new file mode 100644
index 00000000..806dcbf4
--- /dev/null
+++ b/app/src/normal/res/drawable-xxxhdpi/state_connecting.png
Binary files differ
diff --git a/app/src/normal/res/drawable-xxxhdpi/state_disconnected.png b/app/src/normal/res/drawable-xxxhdpi/state_disconnected.png
new file mode 100644
index 00000000..9e216955
--- /dev/null
+++ b/app/src/normal/res/drawable-xxxhdpi/state_disconnected.png
Binary files differ
diff --git a/app/src/normal/res/drawable/background_eip.xml b/app/src/normal/res/drawable/background_eip.xml
deleted file mode 100644
index 9b20a8fd..00000000
--- a/app/src/normal/res/drawable/background_eip.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<vector android:height="24dp" android:viewportHeight="100.0"
- android:viewportWidth="100.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
- <path android:pathData="M50,33m-82000,0a82000,82000 0,1 1,164000 0a82000,82000 0,1 1,-164000 0"/>
- <path android:fillAlpha="1" android:fillColor="#b39ddb"
- android:pathData="M50,33 L30664.67,-73860.37A80000,80000 0,0 0,50 -79950Z"
- android:strokeColor="#b39ddb" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#9fa8da"
- android:pathData="m50,33 l56568.54,-56568.54a80000,80000 0,0 0,-25953.87 -17341.82z"
- android:strokeColor="#9fa8da" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#90caf9"
- android:pathData="m50,33 l73910.37,-30614.67a80000,80000 0,0 0,-17341.82 -25953.87z"
- android:strokeColor="#90caf9" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#81d4fa"
- android:pathData="M50,33L80050,50A80000,80000 0,0 0,73960.37 -30564.67Z"
- android:strokeColor="#81d4fa" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#80deea"
- android:pathData="M50,33 L73960.37,30664.67A80000,80000 0,0 0,80050 50Z"
- android:strokeColor="#80deea" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#80cbc4"
- android:pathData="m50,33 l56568.54,56568.54a80000,80000 0,0 0,17341.82 -25953.87z"
- android:strokeColor="#80cbc4" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#a5d6a7"
- android:pathData="m50,33 l30614.67,73910.37a80000,80000 0,0 0,25953.87 -17341.82z"
- android:strokeColor="#a5d6a7" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#c5e1a5"
- android:pathData="M50,33L50,80050A80000,80000 0,0 0,30664.67 73960.37Z"
- android:strokeColor="#c5e1a5" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#e6ee9c"
- android:pathData="M50,33 L-30564.67,73960.37A80000,80000 0,0 0,50 80050Z"
- android:strokeColor="#e6ee9c" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#fff59d"
- android:pathData="m50,33 l-56568.54,56568.54a80000,80000 0,0 0,25953.87 17341.82z"
- android:strokeColor="#fff59d" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#ffe082"
- android:pathData="m50,33 l-73910.37,30614.67a80000,80000 0,0 0,17341.82 25953.87z"
- android:strokeColor="#ffe082" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#ffcc80"
- android:pathData="m50,33l-80000,0a80000,80000 0,0 0,6089.64 30614.67z"
- android:strokeColor="#ffcc80" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#ffab91"
- android:pathData="M50,33 L-73860.37,-30564.67A80000,80000 0,0 0,-79950 50Z"
- android:strokeColor="#ffab91" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#ef9a9a"
- android:pathData="m50,33 l-56568.54,-56568.54a80000,80000 0,0 0,-17341.82 25953.87z"
- android:strokeColor="#ef9a9a" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#f48fb1"
- android:pathData="m50,33 l-30614.67,-73910.37a80000,80000 0,0 0,-25953.87 17341.82z"
- android:strokeColor="#f48fb1" android:strokeWidth="0"/>
- <path android:fillAlpha="1" android:fillColor="#ce93d8"
- android:pathData="m50,33l0,-80000a80000,80000 0,0 0,-30614.67 6089.64z"
- android:strokeColor="#ce93d8" android:strokeWidth="0"/>
-</vector>
diff --git a/app/src/normal/res/drawable-hdpi/ic_splash_background.png b/app/src/normal/res/drawable/background_main.png
index 3e5f7871..3e5f7871 100644
--- a/app/src/normal/res/drawable-hdpi/ic_splash_background.png
+++ b/app/src/normal/res/drawable/background_main.png
Binary files differ
diff --git a/app/src/normal/res/drawable/bg_connected.png b/app/src/normal/res/drawable/bg_connected.png
new file mode 100644
index 00000000..9741dcba
--- /dev/null
+++ b/app/src/normal/res/drawable/bg_connected.png
Binary files differ
diff --git a/app/src/normal/res/drawable/bg_connecting.png b/app/src/normal/res/drawable/bg_connecting.png
new file mode 100644
index 00000000..d85ddd4b
--- /dev/null
+++ b/app/src/normal/res/drawable/bg_connecting.png
Binary files differ
diff --git a/app/src/normal/res/drawable/bg_disconnected.png b/app/src/normal/res/drawable/bg_disconnected.png
new file mode 100644
index 00000000..a22b7097
--- /dev/null
+++ b/app/src/normal/res/drawable/bg_disconnected.png
Binary files differ
diff --git a/app/src/normal/res/drawable/ic_splash_background.xml b/app/src/normal/res/drawable/ic_splash_background.xml
new file mode 100644
index 00000000..aa2618c1
--- /dev/null
+++ b/app/src/normal/res/drawable/ic_splash_background.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/background_main"/>
+</selector> \ No newline at end of file
diff --git a/app/src/normal/res/drawable/rotate_progress_image.png b/app/src/normal/res/drawable/rotate_progress_image.png
new file mode 100644
index 00000000..fe7f3526
--- /dev/null
+++ b/app/src/normal/res/drawable/rotate_progress_image.png
Binary files differ
diff --git a/app/src/normal/res/drawable/splash_branding.xml b/app/src/normal/res/drawable/splash_branding.xml
new file mode 100644
index 00000000..8c4ee21c
--- /dev/null
+++ b/app/src/normal/res/drawable/splash_branding.xml
@@ -0,0 +1,3 @@
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/footer_text_drawable" />
+</layer-list> \ No newline at end of file
diff --git a/app/src/normal/res/drawable/state_connected.png b/app/src/normal/res/drawable/state_connected.png
new file mode 100644
index 00000000..e515f3f5
--- /dev/null
+++ b/app/src/normal/res/drawable/state_connected.png
Binary files differ
diff --git a/app/src/normal/res/drawable/state_connecting.png b/app/src/normal/res/drawable/state_connecting.png
new file mode 100644
index 00000000..98dd7978
--- /dev/null
+++ b/app/src/normal/res/drawable/state_connecting.png
Binary files differ
diff --git a/app/src/normal/res/drawable/state_disconnected.png b/app/src/normal/res/drawable/state_disconnected.png
new file mode 100644
index 00000000..a4bd4a78
--- /dev/null
+++ b/app/src/normal/res/drawable/state_disconnected.png
Binary files differ
diff --git a/app/src/normal/res/drawable/state_transition_connected_disconnected.png b/app/src/normal/res/drawable/state_transition_connected_disconnected.png
new file mode 100644
index 00000000..a4bd4a78
--- /dev/null
+++ b/app/src/normal/res/drawable/state_transition_connected_disconnected.png
Binary files differ
diff --git a/app/src/normal/res/layout-port/f_eip.xml b/app/src/normal/res/layout-port/f_eip.xml
deleted file mode 100644
index eed5fde6..00000000
--- a/app/src/normal/res/layout-port/f_eip.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/eipServiceFragment"
- >
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_left"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.3"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_center"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.175"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_outer_left"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintGuide_percent="0.125"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_outer_right"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.875"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_bottom"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.66"
- />
-
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_right"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.7"
- />
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/background"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- app:srcCompat="@drawable/bg_disconnected"
- android:scaleType="fitXY"
- android:layout_marginTop="-300dp"
- android:layout_marginBottom="-300dp"
- android:layout_marginLeft="-300dp"
- android:layout_marginRight="-300dp"
-
- />
-
-
-
- <androidx.appcompat.widget.AppCompatTextView
- android:id="@+id/main_description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toTopOf="@+id/sub_description"
- android:padding="@dimen/activity_margin"
- android:layout_marginTop="@dimen/activity_margin"
- android:textAppearance="@android:style/TextAppearance.Large"
- android:textStyle="bold"
- android:textSize="34sp"
- android:autoSizeMinTextSize="28sp"
- android:autoSizeTextType="uniform"
- android:textColor="@color/colorEipFragmentFont"
- app:layout_constraintDimensionRatio="1:1"
- tools:text="Connection secure"
- android:gravity="center"
- android:maxLines="1"
- />
-
- <androidx.appcompat.widget.AppCompatTextView
- android:id="@+id/sub_description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toBottomOf="@id/main_description"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- android:padding="@dimen/activity_margin"
- android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
- android:textStyle="bold"
- android:textColor="@color/colorEipFragmentFont"
- app:layout_constraintDimensionRatio="1:1"
- tools:text="A LONG TEXT WITH SEVERAL THINGS BLABLkk \n kdjfkj \n kjdfkjdf"
- android:gravity="center"
- android:maxLines="3"
- android:ellipsize="end"
- />
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/state_view"
- android:layout_width="0dp"
- android:layout_height="0dp"
- app:layout_constraintBottom_toTopOf="@id/guideline_horizontal_bottom"
- app:layout_constraintTop_toTopOf="@id/guideline_horizontal_center"
- app:layout_constraintLeft_toLeftOf="@id/guideline_vertical_outer_left"
- app:layout_constraintRight_toRightOf="@id/guideline_vertical_outer_right"
- app:layout_constraintVertical_bias="1"
- app:srcCompat="@drawable/red_mask"
- />
- <se.leap.bitmaskclient.base.views.MainButton
- android:id="@+id/main_button"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_margin="@dimen/stdpadding"
- app:layout_constraintTop_toBottomOf="@+id/guideline_horizontal_bottom"
- app:layout_constraintBottom_toTopOf="@id/gateway_location_button"
- app:layout_constraintDimensionRatio="1:1"
- app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_right"
- app:layout_constraintStart_toStartOf="@+id/guideline_vertical_left"
- />
-
- <se.leap.bitmaskclient.base.views.LocationButton
- android:id="@+id/gateway_location_button"
- android:layout_width="match_parent"
- android:layout_height="64dp"
- android:layout_marginBottom="@dimen/stdpadding"
- android:layout_marginEnd="@dimen/stdpadding"
- android:layout_marginStart="@dimen/stdpadding"
- android:layout_marginTop="@dimen/stdpadding"
- android:layout_marginLeft="@dimen/stdpadding"
- android:layout_marginRight="@dimen/stdpadding"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- tools:text="SEATTLE"
- android:gravity="center_vertical" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/normal/res/layout-xlarge-port/f_eip.xml b/app/src/normal/res/layout-xlarge-port/f_eip.xml
deleted file mode 100644
index ae548c82..00000000
--- a/app/src/normal/res/layout-xlarge-port/f_eip.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/eipServiceFragment"
- >
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_left"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.3"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_top"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.025"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_center"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.175"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_outer_left"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintGuide_percent="0.15"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_outer_right"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.85"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_bottom"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.66"
- />
-
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_right"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.7"
- />
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/background"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- app:srcCompat="@drawable/bg_disconnected"
- android:scaleType="fitXY"
- android:layout_marginTop="-300dp"
- android:layout_marginBottom="-300dp"
- android:layout_marginLeft="-300dp"
- android:layout_marginRight="-300dp"
-
- />
-
-
-
- <androidx.appcompat.widget.AppCompatTextView
- android:id="@+id/main_description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toTopOf="@id/guideline_horizontal_top"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toTopOf="@+id/sub_description"
- android:padding="@dimen/activity_margin"
- android:layout_marginTop="@dimen/activity_margin"
- android:textAppearance="@android:style/TextAppearance.Large"
- android:textSize="45sp"
- android:textStyle="bold"
- android:autoSizeMinTextSize="38sp"
- android:autoSizeTextType="uniform"
- android:textColor="@color/colorEipFragmentFont"
- app:layout_constraintDimensionRatio="1:1"
- tools:text="Connection secure"
- android:gravity="center"
- android:maxLines="1"
- />
-
- <androidx.appcompat.widget.AppCompatTextView
- android:id="@+id/sub_description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toBottomOf="@id/main_description"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- android:padding="@dimen/activity_margin"
- android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
- android:textStyle="bold"
- android:textColor="@color/colorEipFragmentFont"
- app:layout_constraintDimensionRatio="1:1"
- tools:text="A LONG TEXT WITH SEVERAL THINGS BLABLkk \n kdjfkj \n kjdfkjdf"
- android:gravity="center"
- android:maxLines="2"
- android:ellipsize="end"
- />
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/state_view"
- android:layout_width="0dp"
- android:layout_height="0dp"
- app:layout_constraintBottom_toTopOf="@id/guideline_horizontal_bottom"
- app:layout_constraintTop_toTopOf="@id/guideline_horizontal_center"
- app:layout_constraintLeft_toLeftOf="@id/guideline_vertical_outer_left"
- app:layout_constraintRight_toRightOf="@id/guideline_vertical_outer_right"
- app:layout_constraintVertical_bias="1"
- app:srcCompat="@drawable/red_mask"
- />
- <se.leap.bitmaskclient.base.views.MainButton
- android:id="@+id/main_button"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_margin="@dimen/stdpadding"
- app:layout_constraintTop_toBottomOf="@+id/guideline_horizontal_bottom"
- app:layout_constraintBottom_toTopOf="@id/gateway_location_button"
- app:layout_constraintDimensionRatio="1:1"
- app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_right"
- app:layout_constraintStart_toStartOf="@+id/guideline_vertical_left"
- />
-
- <se.leap.bitmaskclient.base.views.LocationButton
- android:id="@+id/gateway_location_button"
- android:layout_width="match_parent"
- android:layout_height="64dp"
- android:layout_marginBottom="@dimen/stdpadding"
- android:layout_marginEnd="@dimen/stdpadding"
- android:layout_marginStart="@dimen/stdpadding"
- android:layout_marginTop="@dimen/stdpadding"
- android:layout_marginLeft="@dimen/stdpadding"
- android:layout_marginRight="@dimen/stdpadding"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- tools:text="SEATTLE"
- android:gravity="center_vertical" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/normal/res/layout-xlarge/f_eip.xml b/app/src/normal/res/layout-xlarge/f_eip.xml
deleted file mode 100644
index a4d94394..00000000
--- a/app/src/normal/res/layout-xlarge/f_eip.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This is the layout for extra large landscape, extra large portrait
- can be found in layout-xlarge-port
--->
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/eipServiceFragment"
- >
-
-
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_center"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.25"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_left"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.3" />
-
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_bottom"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.55" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_button_top"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.875"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_button_bottom"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.98"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_right"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintGuide_percent="0.7" />
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/background"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scaleType="fitXY"
- android:layout_marginLeft="-300dp"
- android:layout_marginRight="-300dp"
- android:layout_marginTop="-300dp"
- android:layout_marginBottom="-300dp"
- app:srcCompat="@drawable/bg_disconnected" />
-
-
- <androidx.appcompat.widget.AppCompatTextView
- android:id="@+id/main_description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toTopOf="@+id/sub_description"
- android:padding="@dimen/stdpadding"
- android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
- android:textSize="45sp"
- android:textStyle="bold"
- android:textColor="@color/colorEipFragmentFont"
- app:layout_constraintDimensionRatio="1:1"
- tools:text="Connection secure"
- />
-
- <androidx.appcompat.widget.AppCompatTextView
- android:id="@+id/sub_description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toBottomOf="@id/main_description"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toTopOf="@+id/guideline_horizontal_center"
- android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
- android:textStyle="bold"
- android:textColor="@color/colorEipFragmentFont"
- android:paddingLeft="@dimen/stdpadding"
- android:paddingStart="@dimen/stdpadding"
- android:paddingRight="@dimen/stdpadding"
- android:paddingEnd="@dimen/stdpadding"
- android:paddingBottom="@dimen/stdpadding"
- app:layout_constraintDimensionRatio="1:1"
- tools:text="Your traffic is securly routed through \n another"
- android:maxLines="2"
- android:gravity="center"
- />
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/state_view"
- android:layout_width="0dp"
- android:layout_height="0dp"
- app:layout_constraintBottom_toTopOf="@id/guideline_horizontal_bottom"
- app:layout_constraintTop_toBottomOf="@id/guideline_horizontal_center"
- app:layout_constraintLeft_toLeftOf="@id/guideline_vertical_left"
- app:layout_constraintRight_toRightOf="@id/guideline_vertical_right"
- app:layout_constraintVertical_bias="1"
- app:srcCompat="@drawable/red_mask"
- />
-
- <se.leap.bitmaskclient.base.views.MainButton
- android:id="@+id/main_button"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_margin="@dimen/stdpadding"
- app:layout_constraintTop_toBottomOf="@id/guideline_horizontal_bottom"
- app:layout_constraintBottom_toTopOf="@+id/guideline_horizontal_button_top"
- app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_right"
- app:layout_constraintStart_toStartOf="@+id/guideline_vertical_left"
- app:layout_constraintDimensionRatio="1:1"
- />
-
-
- <se.leap.bitmaskclient.base.views.LocationButton
- android:id="@+id/gateway_location_button"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_marginEnd="@dimen/stdpadding"
- android:layout_marginStart="@dimen/stdpadding"
-
- android:layout_marginLeft="@dimen/stdpadding"
- android:layout_marginRight="@dimen/stdpadding"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@id/guideline_horizontal_button_top"
- app:layout_constraintBottom_toBottomOf="@+id/guideline_horizontal_button_bottom"
- tools:text="SEATTLE"
- android:gravity="center_vertical" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/normal/res/layout/f_eip.xml b/app/src/normal/res/layout/f_eip.xml
deleted file mode 100644
index 9c921721..00000000
--- a/app/src/normal/res/layout/f_eip.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This is the default layout for landscape, portrait can be found
- in layout-port
--->
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/eipServiceFragment"
- >
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_top"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.1"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_center"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.25"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_left"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.3" />
-
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_bottom"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.45" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_button_top"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.8"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_horizontal_button_bottom"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.98"
- />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/guideline_vertical_right"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:orientation="vertical"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintGuide_percent="0.7" />
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/background"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scaleType="fitXY"
- android:layout_marginLeft="-300dp"
- android:layout_marginRight="-300dp"
- android:layout_marginTop="-300dp"
- android:layout_marginBottom="-300dp"
- app:srcCompat="@drawable/bg_disconnected" />
-
-
- <androidx.appcompat.widget.AppCompatTextView
- android:id="@+id/main_description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toTopOf="@+id/sub_description"
- android:paddingLeft="@dimen/stdpadding"
- android:paddingStart="@dimen/stdpadding"
- android:paddingRight="@dimen/stdpadding"
- android:paddingEnd="@dimen/stdpadding"
- android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
- android:textSize="26sp"
- android:textStyle="bold"
- android:textColor="@color/colorEipFragmentFont"
- app:layout_constraintDimensionRatio="1:1"
- tools:text="Connection secure"
- />
-
- <androidx.appcompat.widget.AppCompatTextView
- android:id="@+id/sub_description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toBottomOf="@id/main_description"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toTopOf="@+id/guideline_horizontal_center"
- android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
- android:textStyle="bold"
- android:textColor="@color/colorEipFragmentFont"
- android:paddingLeft="@dimen/stdpadding"
- android:paddingStart="@dimen/stdpadding"
- android:paddingRight="@dimen/stdpadding"
- android:paddingEnd="@dimen/stdpadding"
- android:paddingBottom="@dimen/stdpadding"
- app:layout_constraintDimensionRatio="1:1"
- tools:text="Your traffic is securly routed through \n another"
- android:maxLines="2"
- android:gravity="center"
- />
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/state_view"
- android:layout_width="0dp"
- android:layout_height="0dp"
- app:layout_constraintBottom_toTopOf="@id/guideline_horizontal_bottom"
- app:layout_constraintTop_toBottomOf="@id/guideline_horizontal_center"
- app:layout_constraintLeft_toLeftOf="@id/guideline_vertical_left"
- app:layout_constraintRight_toRightOf="@id/guideline_vertical_right"
- app:layout_constraintVertical_bias="1"
- app:srcCompat="@drawable/red_mask"
- />
-
- <se.leap.bitmaskclient.base.views.MainButton
- android:id="@+id/main_button"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_margin="@dimen/stdpadding"
- app:layout_constraintTop_toBottomOf="@id/guideline_horizontal_bottom"
- app:layout_constraintBottom_toTopOf="@+id/guideline_horizontal_button_top"
- app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_right"
- app:layout_constraintStart_toStartOf="@+id/guideline_vertical_left"
- app:layout_constraintDimensionRatio="1:1"
- />
-
-
- <se.leap.bitmaskclient.base.views.LocationButton
- android:id="@+id/gateway_location_button"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_marginEnd="@dimen/stdpadding"
- android:layout_marginStart="@dimen/stdpadding"
-
- android:layout_marginLeft="@dimen/stdpadding"
- android:layout_marginRight="@dimen/stdpadding"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@id/guideline_horizontal_button_top"
- app:layout_constraintBottom_toBottomOf="@+id/guideline_horizontal_button_bottom"
- tools:text="SEATTLE"
- android:gravity="center_vertical" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/normal/res/layout/v_location_button.xml b/app/src/normal/res/layout/v_location_button.xml
deleted file mode 100644
index 8aaf4978..00000000
--- a/app/src/normal/res/layout/v_location_button.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_gravity="center_vertical"
- android:layout_height="match_parent"
- android:padding="@dimen/stdpadding"
- android:background="@drawable/cust_button_light_rect"
- >
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/world_icn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignTop="@+id/text_location"
- android:layout_alignBottom="@+id/text_location"
- android:scaleType="fitCenter"
- android:src="@drawable/ic_web"
- android:layout_gravity="center"
- app:tint="@color/colorLocationButtonTint"
- />
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/recommended_icn"
- android:scaleType="fitCenter"
- android:layout_marginRight="-13dp"
- android:layout_marginEnd="-13dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignTop="@id/text_location"
- android:layout_alignBottom="@+id/text_location"
- android:layout_toEndOf="@id/world_icn"
- android:layout_toRightOf="@id/world_icn"
- android:src="@drawable/ic_lightning_bolt"
- app:tint="@color/colorLocationButtonTint"
-
- android:visibility="gone"
- tools:visibility="visible"
- />
- <androidx.appcompat.widget.AppCompatTextView
- android:id="@+id/text_location"
- android:paddingStart="@dimen/stdpadding"
- android:paddingLeft="@dimen/stdpadding"
- android:paddingEnd="@dimen/stdpadding"
- android:paddingRight="@dimen/stdpadding"
- android:maxLines="1"
- android:ellipsize="end"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- app:autoSizeTextType="uniform"
- android:gravity="center_vertical"
- app:autoSizeMinTextSize="15sp"
- app:autoSizeMaxTextSize="24sp"
- android:layout_toEndOf="@id/recommended_icn"
- android:layout_toRightOf="@+id/recommended_icn"
- android:layout_toLeftOf="@+id/bridge_icn"
- android:layout_toStartOf="@+id/bridge_icn"
- android:layout_gravity="center_vertical"
- android:layout_centerInParent="true"
- android:textAppearance="@style/TextAppearance.AppCompat.Large"
- android:textStyle="bold"
- android:textColor="@color/white"
- tools:text="Seattle along message"
- />
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/bridge_icn"
-
- android:paddingStart="@dimen/compact_padding"
- android:paddingLeft="@dimen/compact_padding"
- android:paddingRight="@dimen/compact_padding"
- android:paddingEnd="@dimen/compact_padding"
- android:scaleType="fitCenter"
- android:layout_width="48dp"
- android:layout_height="wrap_content"
- android:layout_alignTop="@id/text_location"
- android:layout_alignBottom="@+id/text_location"
- android:layout_toStartOf="@id/load_indicator"
- android:layout_toLeftOf="@id/load_indicator"
- android:src="@drawable/ic_bridge_36"
- android:visibility="gone"
- tools:visibility="visible"
- app:tint="@color/colorLocationButtonTint"
- />
-
- <se.leap.bitmaskclient.base.views.LocationIndicator
- android:id="@+id/load_indicator"
- android:layout_marginBottom="4dp"
- android:layout_width="48dp"
- android:layout_height="40dp"
- android:layout_alignParentEnd="true"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true"
- android:paddingTop="@dimen/stdpadding"
- android:paddingBottom="@dimen/stdpadding"
- android:visibility="visible"
- android:layout_gravity="center_vertical"
- app:tint="@color/colorLocationButtonTintTransparent"
- />
-
-
-
-</RelativeLayout> \ No newline at end of file
diff --git a/app/src/normal/res/layout/v_main_button.xml b/app/src/normal/res/layout/v_main_button.xml
deleted file mode 100644
index e3f96693..00000000
--- a/app/src/normal/res/layout/v_main_button.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools">
-
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/vpn_btn_guideline_left"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.125" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/vpn_btn_guideline_right"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.875" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/vpn_btn_guideline_top"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.125" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/vpn_btn_guideline_bottom"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.875" />
-
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/icn_guideline_left"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.2" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/icn_guideline_right"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.8" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/icn_guideline_top"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.2" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/icn_guideline_bottom"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.8" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/border_guideline_left"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.025" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/border_guideline_right"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- app:layout_constraintGuide_percent="0.975" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/border_guideline_top"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.025" />
-
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/border_guideline_bottom"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- app:layout_constraintGuide_percent="0.975" />
-
-
- <!-- <ProgressBar
- android:id="@+id/progressBar"
- style="@style/Widget.AppCompat.ProgressBar.Horizontal"
-
- android:layout_width="0dp"
- android:layout_height="0dp"
- app:layout_constraintBottom_toBottomOf="@id/border_guideline_bottom"
- app:layout_constraintEnd_toEndOf="@id/border_guideline_right"
- app:layout_constraintStart_toStartOf="@id/border_guideline_left"
- app:layout_constraintTop_toTopOf="@id/border_guideline_top"
- app:layout_constraintDimensionRatio="1:1"
- android:indeterminate="true"
- android:indeterminateDuration="800"
- android:indeterminateDrawable="@drawable/progressbar_circle"
- android:interpolator="@android:anim/decelerate_interpolator"
- android:indeterminateBehavior="cycle"
- />-->
-
- <!--<androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/progress_circular"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:scaleType="fitXY"
-
- app:layout_constraintTop_toTopOf="@+id/button"
- app:layout_constraintBottom_toBottomOf="@+id/button"
- app:layout_constraintLeft_toLeftOf="@+id/button"
- app:layout_constraintRight_toRightOf="@+id/button"
- app:layout_constraintDimensionRatio="1:1"
- android:src="@drawable/rainbow_circle" />-->
-
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/button"
- android:layout_width="0dp"
- android:layout_height="0dp"
- app:layout_constraintBottom_toTopOf="@+id/vpn_btn_guideline_bottom"
- app:layout_constraintEnd_toStartOf="@+id/vpn_btn_guideline_right"
- app:layout_constraintStart_toStartOf="@+id/vpn_btn_guideline_left"
- app:layout_constraintTop_toTopOf="@+id/vpn_btn_guideline_top"
- app:layout_constraintDimensionRatio="1:1"
- app:srcCompat="@drawable/button_circle_start"
- />
-
-
-
-
-
-</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/app/src/normal/res/values-v31/themes.xml b/app/src/normal/res/values-v31/themes.xml
new file mode 100644
index 00000000..7ea17424
--- /dev/null
+++ b/app/src/normal/res/values-v31/themes.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
+ <item name="android:windowSplashScreenBackground">@color/white</item>
+ <item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_icon</item>
+ <item name="android:windowSplashScreenBrandingImage">@drawable/splash_branding</item>
+ </style>
+</resources> \ No newline at end of file