summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/base
diff options
context:
space:
mode:
authorcyberta <cyberta@riseup.net>2023-10-31 18:40:55 +0000
committercyberta <cyberta@riseup.net>2023-10-31 18:40:55 +0000
commite62532bb0b2f57293edf18ae82afab5f3c8621e7 (patch)
treeb3b8259dd475882d8c87c0aac54488866fc2e76c /app/src/main/java/se/leap/bitmaskclient/base
parent2274d71a7942d5a89a27918b28041dae5be3816a (diff)
parentbd00c1d8385db2fb6de07fa17349f0bfb260b1a7 (diff)
Merge branch 'update_dependencies_2' into 'master'
Update dependencies Closes #9041 See merge request leap/bitmask_android!259
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/base')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/MainActivity.java25
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/StartActivity.java2
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/fragments/AboutFragment.java43
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/fragments/AlwaysOnDialog.java48
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/fragments/DonationReminderDialog.java49
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/fragments/EipFragment.java48
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/fragments/TetheringDialog.java38
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/views/IconCheckboxEntry.java30
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/views/ProviderHeaderView.java109
9 files changed, 59 insertions, 333 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/MainActivity.java b/app/src/main/java/se/leap/bitmaskclient/base/MainActivity.java
index 7dd01ccb..5da238d4 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/MainActivity.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/MainActivity.java
@@ -19,7 +19,6 @@ package se.leap.bitmaskclient.base;
import static androidx.appcompat.app.ActionBar.DISPLAY_SHOW_CUSTOM;
import static se.leap.bitmaskclient.R.string.downloading_vpn_certificate_failed;
-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.BROADCAST_RESULT_CODE;
import static se.leap.bitmaskclient.base.models.Constants.BROADCAST_RESULT_KEY;
@@ -42,11 +41,9 @@ import static se.leap.bitmaskclient.providersetup.ProviderAPI.INCORRECTLY_UPDATE
import static se.leap.bitmaskclient.providersetup.ProviderAPI.TOR_EXCEPTION;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.TOR_TIMEOUT;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.UPDATE_INVALID_VPN_CERTIFICATE;
-import static se.leap.bitmaskclient.providersetup.ProviderAPI.USER_MESSAGE;
import android.content.Context;
import android.content.Intent;
-import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
@@ -69,7 +66,6 @@ import se.leap.bitmaskclient.BuildConfig;
import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.base.fragments.EipFragment;
import se.leap.bitmaskclient.base.fragments.ExcludeAppsFragment;
-import se.leap.bitmaskclient.base.fragments.LogFragment;
import se.leap.bitmaskclient.base.fragments.MainActivityErrorDialog;
import se.leap.bitmaskclient.base.fragments.MotdFragment;
import se.leap.bitmaskclient.base.fragments.NavigationDrawerFragment;
@@ -83,8 +79,6 @@ import se.leap.bitmaskclient.eip.EipCommand;
import se.leap.bitmaskclient.eip.EipSetupListener;
import se.leap.bitmaskclient.eip.EipSetupObserver;
import se.leap.bitmaskclient.providersetup.ProviderAPI;
-import se.leap.bitmaskclient.providersetup.activities.LoginActivity;
-import se.leap.bitmaskclient.providersetup.models.LeapSRPSession;
public class MainActivity extends AppCompatActivity implements EipSetupListener, Observer {
@@ -310,10 +304,10 @@ public class MainActivity extends AppCompatActivity implements EipSetupListener,
return;
}
- if (LeapSRPSession.loggedIn() || provider.allowsAnonymous()) {
+ if (provider.allowsAnonymous()) {
showMainActivityErrorDialog(error);
} else if (isInvalidCertificateForLoginOnlyProvider(error)) {
- askUserToLogIn(getString(vpn_certificate_user_message));
+ showMainActivityErrorDialog(getString(R.string.login_not_supported));
}
}
break;
@@ -341,11 +335,7 @@ public class MainActivity extends AppCompatActivity implements EipSetupListener,
// TODO CATCH ME IF YOU CAN - WHAT DO WE WANT TO DO?
break;
case INCORRECTLY_UPDATED_INVALID_VPN_CERTIFICATE:
- if (LeapSRPSession.loggedIn() || provider.allowsAnonymous()) {
showMainActivityErrorDialog(getString(downloading_vpn_certificate_failed));
- } else {
- askUserToLogIn(getString(vpn_certificate_user_message));
- }
break;
case TOR_TIMEOUT:
case TOR_EXCEPTION:
@@ -429,20 +419,11 @@ public class MainActivity extends AppCompatActivity implements EipSetupListener,
try {
JSONObject errorJson = new JSONObject(errorJsonString);
return ERROR_INVALID_VPN_CERTIFICATE.toString().equals(errorJson.getString(ERRORID)) &&
- !LeapSRPSession.loggedIn() &&
+ provider.allowsRegistered() &&
!provider.allowsAnonymous();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
-
- private void askUserToLogIn(String userMessage) {
- Intent intent = new Intent(this, LoginActivity.class);
- intent.putExtra(PROVIDER_KEY, provider);
- if (userMessage != null) {
- intent.putExtra(USER_MESSAGE, userMessage);
- }
- startActivityForResult(intent, REQUEST_CODE_LOG_IN);
- }
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/StartActivity.java b/app/src/main/java/se/leap/bitmaskclient/base/StartActivity.java
index 19f03dee..21fc81e4 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/StartActivity.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/StartActivity.java
@@ -24,7 +24,6 @@ import static se.leap.bitmaskclient.base.models.Constants.EXTRA_MOTD_MSG;
import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_EIP_DEFINITION;
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.utils.ConfigHelper.isDefaultBitmask;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.storeProviderInPreferences;
import android.app.Activity;
@@ -52,7 +51,6 @@ import se.leap.bitmaskclient.base.models.ProviderObservable;
import se.leap.bitmaskclient.base.utils.DateHelper;
import se.leap.bitmaskclient.base.utils.PreferenceHelper;
import se.leap.bitmaskclient.eip.EipCommand;
-import se.leap.bitmaskclient.providersetup.activities.CustomProviderSetupActivity;
import se.leap.bitmaskclient.providersetup.activities.SetupActivity;
/**
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/AboutFragment.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/AboutFragment.java
index e92aa703..275dc1c4 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/AboutFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/AboutFragment.java
@@ -1,5 +1,9 @@
package se.leap.bitmaskclient.base.fragments;
+import static android.view.View.VISIBLE;
+import static se.leap.bitmaskclient.R.string.about_fragment_title;
+import static se.leap.bitmaskclient.base.utils.ViewHelper.setActionBarSubtitle;
+
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
@@ -7,42 +11,24 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import androidx.appcompat.widget.AppCompatTextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.Unbinder;
import se.leap.bitmaskclient.BuildConfig;
import se.leap.bitmaskclient.R;
-
-import static android.view.View.VISIBLE;
-import static se.leap.bitmaskclient.R.string.about_fragment_title;
-import static se.leap.bitmaskclient.base.utils.ViewHelper.setActionBarSubtitle;
+import se.leap.bitmaskclient.databinding.FAboutBinding;
public class AboutFragment extends Fragment {
final public static String TAG = AboutFragment.class.getSimpleName();
final public static int VIEWED = 0;
- private Unbinder unbinder;
-
- @BindView(R.id.version)
- AppCompatTextView versionTextView;
-
- @BindView(R.id.terms_of_service)
- AppCompatTextView termsOfService;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.f_about, container, false);
- unbinder = ButterKnife.bind(this, view);
+ FAboutBinding binding = FAboutBinding.inflate(inflater);
setActionBarSubtitle(this, about_fragment_title);
- return view;
- }
- @Override
- public void onStart() {
- super.onStart();
String version;
String name = "Bitmask";
try {
@@ -54,18 +40,13 @@ public class AboutFragment extends Fragment {
version = "error fetching version";
}
- versionTextView.setText(getString(R.string.version_info, name, version));
+ binding.version.setText(getString(R.string.version_info, name, version));
if (BuildConfig.FLAVOR_branding.equals("custom") && hasTermsOfServiceResource()) {
- termsOfService.setText(getString(getTermsOfServiceResource()));
- termsOfService.setVisibility(VISIBLE);
+ binding.termsOfService.setText(getString(getTermsOfServiceResource()));
+ binding.termsOfService.setVisibility(VISIBLE);
}
- }
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- unbinder.unbind();
+ return binding.getRoot();
}
private boolean hasTermsOfServiceResource() {
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/AlwaysOnDialog.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/AlwaysOnDialog.java
index e68ba170..faa9950b 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/AlwaysOnDialog.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/AlwaysOnDialog.java
@@ -1,26 +1,20 @@
package se.leap.bitmaskclient.base.fragments;
+import static se.leap.bitmaskclient.base.utils.PreferenceHelper.saveShowAlwaysOnDialog;
+
import android.app.Dialog;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
-import android.widget.CheckBox;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDialogFragment;
-import androidx.appcompat.widget.AppCompatTextView;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.Unbinder;
import se.leap.bitmaskclient.R;
-import se.leap.bitmaskclient.base.views.IconTextView;
-
-import static se.leap.bitmaskclient.base.utils.PreferenceHelper.saveShowAlwaysOnDialog;
+import se.leap.bitmaskclient.databinding.DCheckboxConfirmBinding;
/**
@@ -33,41 +27,24 @@ public class AlwaysOnDialog extends AppCompatDialogFragment {
public final static String TAG = AlwaysOnDialog.class.getName();
- @BindView(R.id.do_not_show_again)
- CheckBox doNotShowAgainCheckBox;
-
- @BindView(R.id.user_message)
- IconTextView userMessage;
-
- @BindView(R.id.block_vpn_user_message)
- AppCompatTextView blockVpnUserMessage;
-
- private Unbinder unbinder;
-
-
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
-
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+
LayoutInflater inflater = getActivity().getLayoutInflater();
- View view = inflater.inflate(R.layout.d_checkbox_confirm, null);
- unbinder = ButterKnife.bind(this, view);
+ DCheckboxConfirmBinding binding = DCheckboxConfirmBinding.inflate(inflater);
- userMessage.setIcon(R.drawable.ic_settings);
- userMessage.setText(getString(R.string.always_on_vpn_user_message));
+ binding.userMessage.setIcon(R.drawable.ic_settings);
+ binding.userMessage.setText(getString(R.string.always_on_vpn_user_message));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- blockVpnUserMessage.setVisibility(View.VISIBLE);
+ binding.blockVpnUserMessage.setVisibility(View.VISIBLE);
}
- builder.setView(view)
+ builder.setView(binding.getRoot())
.setPositiveButton(android.R.string.ok, (dialog, id) -> {
- if (doNotShowAgainCheckBox.isChecked()) {
+ if (binding.doNotShowAgain.isChecked()) {
saveShowAlwaysOnDialog(false);
}
Intent intent = new Intent("android.net.vpn.SETTINGS");
@@ -78,9 +55,4 @@ public class AlwaysOnDialog extends AppCompatDialogFragment {
return builder.create();
}
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- unbinder.unbind();
- }
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/DonationReminderDialog.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/DonationReminderDialog.java
index 08346791..6a0a63c5 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/DonationReminderDialog.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/DonationReminderDialog.java
@@ -1,5 +1,10 @@
package se.leap.bitmaskclient.base.fragments;
+import static se.leap.bitmaskclient.base.models.Constants.DONATION_REMINDER_DURATION;
+import static se.leap.bitmaskclient.base.models.Constants.DONATION_URL;
+import static se.leap.bitmaskclient.base.models.Constants.ENABLE_DONATION;
+import static se.leap.bitmaskclient.base.models.Constants.ENABLE_DONATION_REMINDER;
+
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
@@ -8,59 +13,32 @@ import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.Button;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDialogFragment;
import java.text.ParseException;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.Unbinder;
-import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.base.utils.DateHelper;
import se.leap.bitmaskclient.base.utils.PreferenceHelper;
-
-import static se.leap.bitmaskclient.base.models.Constants.DONATION_REMINDER_DURATION;
-import static se.leap.bitmaskclient.base.models.Constants.DONATION_URL;
-import static se.leap.bitmaskclient.base.models.Constants.ENABLE_DONATION;
-import static se.leap.bitmaskclient.base.models.Constants.ENABLE_DONATION_REMINDER;
-import static se.leap.bitmaskclient.base.models.Constants.FIRST_TIME_USER_DATE;
-import static se.leap.bitmaskclient.base.models.Constants.LAST_DONATION_REMINDER_DATE;
+import se.leap.bitmaskclient.databinding.DonationReminderDialogBinding;
public class DonationReminderDialog extends AppCompatDialogFragment {
public final static String TAG = DonationReminderDialog.class.getName();
private static boolean isShown = false;
- @BindView(R.id.btnDonate)
- Button btnDonate;
-
- @BindView(R.id.btnLater)
- Button btnLater;
-
- private Unbinder unbinder;
-
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
-
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
- View view = inflater.inflate(R.layout.donation_reminder_dialog, null);
- unbinder = ButterKnife.bind(this, view);
+ DonationReminderDialogBinding binding = DonationReminderDialogBinding.inflate(inflater);
isShown = true;
- builder.setView(view);
- btnDonate.setOnClickListener(v -> {
+ builder.setView(binding.getRoot());
+ binding.btnDonate.setOnClickListener(v -> {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(DONATION_URL));
try {
startActivity(browserIntent);
@@ -70,7 +48,7 @@ public class DonationReminderDialog extends AppCompatDialogFragment {
PreferenceHelper.lastDonationReminderDate(DateHelper.getCurrentDateString());
dismiss();
});
- btnLater.setOnClickListener(v -> {
+ binding.btnLater.setOnClickListener(v -> {
PreferenceHelper.lastDonationReminderDate(DateHelper.getCurrentDateString());
dismiss();
});
@@ -78,12 +56,6 @@ public class DonationReminderDialog extends AppCompatDialogFragment {
return builder.create();
}
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- unbinder.unbind();
- }
-
public static boolean isCallable(Context context) {
if (isShown) {
return false;
@@ -97,7 +69,6 @@ public class DonationReminderDialog extends AppCompatDialogFragment {
Log.e(TAG, "context is null!");
return false;
}
-
String firstTimeUserDate = PreferenceHelper.getFirstTimeUserDate();
if (firstTimeUserDate == null) {
PreferenceHelper.firstTimeUserDate(DateHelper.getCurrentDateString());
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/EipFragment.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/EipFragment.java
index 670cdfd8..c500b55b 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/EipFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/EipFragment.java
@@ -16,21 +16,16 @@
*/
package se.leap.bitmaskclient.base.fragments;
-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.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.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.Context;
@@ -46,6 +41,7 @@ import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Toast;
import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes;
@@ -80,10 +76,7 @@ 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.providersetup.activities.SetupActivity;
import se.leap.bitmaskclient.tor.TorServiceCommand;
import se.leap.bitmaskclient.tor.TorStatusObservable;
@@ -136,14 +129,7 @@ public class EipFragment extends Fragment implements Observer {
}
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);
-
- }
-
+ activity.startActivityForResult(new Intent(activity, SetupActivity.class), REQUEST_CODE_SWITCH_PROVIDER);
}
@Override
@@ -283,11 +269,10 @@ public class EipFragment extends Fragment implements Observer {
if (canStartEIP()) {
startEipFromScratch();
- } else if (canLogInToStartEIP()) {
- askUserToLogIn(getString(vpn_certificate_user_message));
- } else {
- // provider has no VpnCertificate but user is logged in
+ } else if (provider.allowsAnonymous()){
updateInvalidVpnCertificate();
+ } else {
+ Toast.makeText(getContext(), R.string.config_error_found, Toast.LENGTH_LONG).show();
}
}
@@ -297,12 +282,6 @@ public class EipFragment extends Fragment implements Observer {
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 (eipStatus.isVPNRunningWithoutNetwork() || eipStatus.isConnecting() || eipStatus.isUpdatingVpnCert()) {
askPendingStartCancellation();
@@ -562,7 +541,6 @@ public class EipFragment extends Fragment implements Observer {
// eat me
}
-
stateView.setImageResource(drawableRes);
stateView.setTag(drawableRes);
if (stateView.getDrawable() instanceof Animatable) {
@@ -592,20 +570,6 @@ public class EipFragment extends Fragment implements Observer {
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);
- }
- }
-
public void showDonationReminderDialog() {
try {
FragmentTransaction fragmentTransaction = new FragmentManagerEnhanced(
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/TetheringDialog.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/TetheringDialog.java
index eb9d149f..588daa3f 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/TetheringDialog.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/TetheringDialog.java
@@ -19,7 +19,6 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDialogFragment;
-import androidx.appcompat.widget.AppCompatTextView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -28,13 +27,11 @@ import java.util.Observer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.Unbinder;
import de.blinkt.openvpn.core.VpnStatus;
import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.base.utils.PreferenceHelper;
import se.leap.bitmaskclient.base.views.IconCheckboxEntry;
+import se.leap.bitmaskclient.databinding.DListSelectionBinding;
import se.leap.bitmaskclient.firewall.FirewallManager;
import se.leap.bitmaskclient.tethering.TetheringObservable;
@@ -59,17 +56,8 @@ public class TetheringDialog extends AppCompatDialogFragment implements Observer
public final static String TAG = TetheringDialog.class.getName();
- @BindView(R.id.tvTitle)
- AppCompatTextView title;
-
- @BindView(R.id.user_message)
- AppCompatTextView userMessage;
-
- @BindView(R.id.selection_list_view)
- RecyclerView selectionListView;
DialogListAdapter adapter;
private DialogListAdapter.ViewModel[] dataset;
- private Unbinder unbinder;
public static class DialogListAdapter extends RecyclerView.Adapter<DialogListAdapter.ViewHolder> {
@@ -139,21 +127,19 @@ public class TetheringDialog extends AppCompatDialogFragment implements Observer
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
- View view = inflater.inflate(R.layout.d_list_selection, null);
- unbinder = ButterKnife.bind(this, view);
+ DListSelectionBinding binding = DListSelectionBinding.inflate(inflater);
- title.setText(R.string.tethering);
- userMessage.setMovementMethod(LinkMovementMethod.getInstance());
- userMessage.setLinkTextColor(getContext().getResources().getColor(R.color.colorPrimary));
- userMessage.setText(createUserMessage());
+ binding.tvTitle.setText(R.string.tethering);
+ binding.userMessage.setMovementMethod(LinkMovementMethod.getInstance());
+ binding.userMessage.setLinkTextColor(getContext().getResources().getColor(R.color.colorPrimary));
+ binding.userMessage.setText(createUserMessage());
initDataset();
adapter = new DialogListAdapter(dataset, this::onItemClick);
- selectionListView.setAdapter(adapter);
- selectionListView.setLayoutManager(new LinearLayoutManager(getActivity()));
-
+ binding.selectionListView.setAdapter(adapter);
+ binding.selectionListView.setLayoutManager(new LinearLayoutManager(getActivity()));
- builder.setView(view)
+ builder.setView(binding.getRoot())
.setPositiveButton(android.R.string.ok, (dialog, id) -> {
PreferenceHelper.allowWifiTethering(dataset[0].checked);
PreferenceHelper.allowUsbTethering(dataset[1].checked);
@@ -190,12 +176,6 @@ public class TetheringDialog extends AppCompatDialogFragment implements Observer
TetheringObservable.getInstance().deleteObserver(this);
}
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- unbinder.unbind();
- }
-
public void onItemClick(DialogListAdapter.ViewModel item) {
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/views/IconCheckboxEntry.java b/app/src/main/java/se/leap/bitmaskclient/base/views/IconCheckboxEntry.java
index 0957712b..ee1a6903 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/views/IconCheckboxEntry.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/views/IconCheckboxEntry.java
@@ -5,31 +5,20 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
-import android.view.View;
import android.widget.LinearLayout;
import androidx.annotation.Nullable;
-import androidx.appcompat.widget.AppCompatImageView;
-import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
-import butterknife.BindView;
-import butterknife.ButterKnife;
import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.base.fragments.TetheringDialog;
+import se.leap.bitmaskclient.databinding.VIconSelectTextListItemBinding;
public class IconCheckboxEntry extends LinearLayout {
- @BindView(android.R.id.text1)
- AppCompatTextView textView;
-
- @BindView(R.id.material_icon)
- AppCompatImageView iconView;
-
- @BindView(R.id.checked_icon)
- AppCompatImageView checkedIcon;
+ VIconSelectTextListItemBinding binding;
public IconCheckboxEntry(Context context) {
super(context);
@@ -55,14 +44,13 @@ public class IconCheckboxEntry extends LinearLayout {
void initLayout(Context context, AttributeSet attrs) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View rootview = inflater.inflate(R.layout.v_icon_select_text_list_item, this, true);
- ButterKnife.bind(this, rootview);
+ binding = VIconSelectTextListItemBinding.inflate(inflater, this, true);
}
public void bind(TetheringDialog.DialogListAdapter.ViewModel model) {
this.setEnabled(model.enabled);
- textView.setText(model.text);
- textView.setEnabled(model.enabled);
+ binding.text1.setText(model.text);
+ binding.text1.setEnabled(model.enabled);
Drawable checkIcon = DrawableCompat.wrap(getResources().getDrawable(R.drawable.ic_check_bold)).mutate();
if (model.enabled) {
@@ -71,14 +59,14 @@ public class IconCheckboxEntry extends LinearLayout {
DrawableCompat.setTint(checkIcon, ContextCompat.getColor(getContext(), R.color.colorDisabled));
}
- iconView.setImageDrawable(model.image);
- checkedIcon.setImageDrawable(checkIcon);
+ binding.materialIcon.setImageDrawable(model.image);
+ binding.checkedIcon.setImageDrawable(checkIcon);
setChecked(model.checked);
}
public void setChecked(boolean checked) {
- checkedIcon.setVisibility(checked ? VISIBLE : GONE);
- checkedIcon.setContentDescription(checked ? "selected" : "unselected");
+ binding.checkedIcon.setVisibility(checked ? VISIBLE : GONE);
+ binding.checkedIcon.setContentDescription(checked ? "selected" : "unselected");
}
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/views/ProviderHeaderView.java b/app/src/main/java/se/leap/bitmaskclient/base/views/ProviderHeaderView.java
deleted file mode 100644
index 811a54a2..00000000
--- a/app/src/main/java/se/leap/bitmaskclient/base/views/ProviderHeaderView.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package se.leap.bitmaskclient.base.views;
-
-import android.content.Context;
-import androidx.annotation.DrawableRes;
-import androidx.annotation.RequiresApi;
-import androidx.annotation.StringRes;
-import androidx.appcompat.widget.AppCompatImageView;
-import androidx.appcompat.widget.AppCompatTextView;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.RelativeLayout;
-
-import se.leap.bitmaskclient.R;
-
-import static se.leap.bitmaskclient.base.utils.ViewHelper.convertDimensionToPx;
-
-/**
- * Created by cyberta on 29.06.18.
- */
-
-public class ProviderHeaderView extends RelativeLayout {
- private int stdPadding;
- private int compactPadding;
- private int stdImageSize;
- private int compactImageSize;
-
- AppCompatImageView providerHeaderLogo;
- AppCompatTextView providerHeaderText;
-
- public ProviderHeaderView(Context context) {
- super(context);
- initLayout(context);
- }
-
- public ProviderHeaderView(Context context, AttributeSet attrs) {
- super(context, attrs);
- initLayout(context);
- }
-
- public ProviderHeaderView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- initLayout(context);
- }
-
- @RequiresApi(21)
- public ProviderHeaderView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- initLayout(context);
- }
-
-
- void initLayout(Context context) {
- LayoutInflater inflater = (LayoutInflater) context
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View rootview = inflater.inflate(R.layout.v_provider_header, this, true);
- providerHeaderLogo = rootview.findViewById(R.id.provider_header_logo);
- providerHeaderText = rootview.findViewById(R.id.provider_header_text);
-
- stdPadding = convertDimensionToPx(context, R.dimen.stdpadding);
- compactPadding = convertDimensionToPx(context, R.dimen.compact_padding);
- stdImageSize = convertDimensionToPx(context, R.dimen.bitmask_logo);
- compactImageSize = convertDimensionToPx(context, R.dimen.bitmask_logo_compact);
- }
-
- public void setTitle(String title) {
- providerHeaderText.setText(title);
- }
-
- public void setTitle(@StringRes int stringRes) {
- providerHeaderText.setText(stringRes);
- }
-
- public void setLogo(@DrawableRes int drawableRes) {
- providerHeaderLogo.setImageResource(drawableRes);
- }
-
- public void showCompactLayout() {
- LayoutParams logoLayoutParams = (LayoutParams) providerHeaderLogo.getLayoutParams();
- logoLayoutParams.width = compactImageSize;
- logoLayoutParams.height = compactImageSize;
- providerHeaderLogo.setLayoutParams(logoLayoutParams);
-
- LayoutParams textLayoutParams = (LayoutParams) providerHeaderText.getLayoutParams();
- textLayoutParams.addRule(RIGHT_OF, R.id.provider_header_logo);
- textLayoutParams.addRule(BELOW, 0);
- textLayoutParams.addRule(ALIGN_TOP, R.id.provider_header_logo);
- textLayoutParams.setMargins(compactPadding, compactPadding, compactPadding, compactPadding);
-
- providerHeaderText.setLayoutParams(textLayoutParams);
- providerHeaderText.setMaxLines(2);
- }
-
- public void showStandardLayout() {
- LayoutParams logoLayoutParams = (LayoutParams) providerHeaderLogo.getLayoutParams();
- logoLayoutParams.width = stdImageSize;
- logoLayoutParams.height = stdImageSize;
- providerHeaderLogo.setLayoutParams(logoLayoutParams);
-
- LayoutParams textLayoutParams = (LayoutParams) providerHeaderText.getLayoutParams();
- textLayoutParams.addRule(RIGHT_OF, 0);
- textLayoutParams.addRule(BELOW, R.id.provider_header_logo);
- textLayoutParams.addRule(ALIGN_TOP, 0);
- textLayoutParams.setMargins(stdPadding, stdPadding, stdPadding, stdPadding);
- providerHeaderText.setLayoutParams(textLayoutParams);
- providerHeaderText.setMaxLines(1);
- }
-
-}