From 0d73e7601979c0da3aae23d1961986d2f88316b1 Mon Sep 17 00:00:00 2001 From: Janak Amarasena Date: Sun, 3 Jun 2018 18:53:31 +0530 Subject: Added donation reminders --- app/build.gradle | 16 ++++- .../main/java/se/leap/bitmaskclient/Constants.java | 8 ++- .../java/se/leap/bitmaskclient/EipFragment.java | 82 ++++++++++++++++++++++ .../drawer/NavigationDrawerFragment.java | 8 ++- app/src/main/res/values/strings.xml | 6 +- 5 files changed, 113 insertions(+), 7 deletions(-) (limited to 'app') diff --git a/app/build.gradle b/app/build.gradle index 045aa8d0..09858cd2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,20 @@ android { resValue "string", "app_name", "Bitmask" vectorDrawables.useSupportLibrary = true buildConfigField 'boolean', 'openvpn3', 'false' - //Build Config Feilds for default donation details - buildConfigField 'String', 'donation_url', '"https://leap.se/en/about-us/donate"' + + //Build Config Fields for default donation details + + //This is the default donation URL and should be set to the donation page of LEAP + // and this should not be set/altered anywhere else. + buildConfigField 'String', 'default_donation_url', '"https://leap.se/en/about-us/donate"' + //This is the donation URL and should be set to the relevant donation page. + buildConfigField 'String', 'donation_url', 'null' + //The field to enable donations in the app. + buildConfigField 'boolean', 'enable_donation', 'true' + //The field to enable donation reminder popup in the app if enable_donation is set to 'false' this will be disabled. + buildConfigField 'boolean', 'enable_donation_reminder', 'true' + //The duration in days to trigger the donation reminder + buildConfigField 'int', 'donation_reminder_duration', '30' testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" dexOptions { jumboMode true diff --git a/app/src/main/java/se/leap/bitmaskclient/Constants.java b/app/src/main/java/se/leap/bitmaskclient/Constants.java index bcce1549..b4e8646e 100644 --- a/app/src/main/java/se/leap/bitmaskclient/Constants.java +++ b/app/src/main/java/se/leap/bitmaskclient/Constants.java @@ -91,6 +91,12 @@ public interface Constants { ////////////////////////////////////////////// // CUSTOM CONSTANTS ///////////////////////////////////////////// - String DONATION_URL = BuildConfig.donation_url; + boolean ENABLE_DONATION = BuildConfig.enable_donation; + boolean ENABLE_DONATION_REMINDER = BuildConfig.enable_donation_reminder; + int DONATION_REMINDER_DURATION = BuildConfig.donation_reminder_duration; + String DONATION_URL = BuildConfig.donation_url == null || BuildConfig.donation_url.equals("")? + BuildConfig.default_donation_url:BuildConfig.donation_url; + String LAST_DONATION_REMINDER_DATE = "last_daonation_reminder_date"; + } diff --git a/app/src/main/java/se/leap/bitmaskclient/EipFragment.java b/app/src/main/java/se/leap/bitmaskclient/EipFragment.java index 5dbec7b0..86a5d7c66 100644 --- a/app/src/main/java/se/leap/bitmaskclient/EipFragment.java +++ b/app/src/main/java/se/leap/bitmaskclient/EipFragment.java @@ -25,9 +25,11 @@ import android.content.ServiceConnection; import android.content.SharedPreferences; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; +import android.net.Uri; import android.os.Bundle; import android.os.IBinder; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.app.AlertDialog; import android.support.v7.widget.AppCompatImageView; @@ -38,6 +40,10 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.temporal.ChronoUnit; +import java.util.Date; import java.util.Observable; import java.util.Observer; @@ -55,11 +61,16 @@ import se.leap.bitmaskclient.views.VpnStateImage; import static android.view.View.GONE; import static android.view.View.VISIBLE; import static de.blinkt.openvpn.core.ConnectionStatus.LEVEL_NONETWORK; +import static se.leap.bitmaskclient.Constants.DONATION_REMINDER_DURATION; import static se.leap.bitmaskclient.Constants.EIP_RESTART_ON_BOOT; import static se.leap.bitmaskclient.Constants.PROVIDER_KEY; import static se.leap.bitmaskclient.Constants.REQUEST_CODE_LOG_IN; import static se.leap.bitmaskclient.Constants.REQUEST_CODE_SWITCH_PROVIDER; import static se.leap.bitmaskclient.Constants.SHARED_PREFERENCES; +import static se.leap.bitmaskclient.Constants.DONATION_URL; +import static se.leap.bitmaskclient.Constants.ENABLE_DONATION; +import static se.leap.bitmaskclient.Constants.ENABLE_DONATION_REMINDER; +import static se.leap.bitmaskclient.Constants.LAST_DONATION_REMINDER_DATE; import static se.leap.bitmaskclient.ProviderAPI.UPDATE_INVALID_VPN_CERTIFICATE; import static se.leap.bitmaskclient.ProviderAPI.USER_MESSAGE; import static se.leap.bitmaskclient.R.string.vpn_certificate_user_message; @@ -102,6 +113,8 @@ public class EipFragment extends Fragment implements Observer { private IOpenVPNServiceInternal mService; private ServiceConnection openVpnConnection; + private final String DATE_PATTERN = "dd/MM/yyyy"; + @Override public void onAttach(Context context) { super.onAttach(context); @@ -151,6 +164,14 @@ public class EipFragment extends Fragment implements Observer { return view; } + @Override + public void onStart() { + super.onStart(); + if (isDonationReminderCallable()){ + showDonationReminder(); + } + } + @Override public void onResume() { super.onResume(); @@ -483,4 +504,65 @@ public class EipFragment extends Fragment implements Observer { mService = null; } } + + private void showDonationReminder() { + Activity activity = getActivity(); + if (activity == null) { + Log.e(TAG, "activity is null when triggering donation reminder"); + return; + } + saveLastDonationReminderDate(); + String message = activity.getString(R.string.donate_message) == null || activity.getString(R.string.donate_message).equals("")? + activity.getString(R.string.donate_default_message):activity.getString(R.string.donate_message); + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(activity.getString(R.string.donate_title)) + .setMessage(message) + .setPositiveButton(R.string.donate_button_donate, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(DONATION_URL)); + startActivity(browserIntent); + } + }) + .setNegativeButton(R.string.donate_button_remind_later, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + } + }) + .show(); + } + + private boolean isDonationReminderCallable(){ + if (!ENABLE_DONATION||!ENABLE_DONATION_REMINDER){ + return false; + } + + if (preferences==null){ + Log.e(TAG, "preferences is null!"); + return false; + } + + String lastDonationReminderDate = preferences.getString(LAST_DONATION_REMINDER_DATE, null); + if (lastDonationReminderDate==null){ + return true; + } + + SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN); + Date lastDate; + try { + lastDate = sdf.parse(lastDonationReminderDate); + } catch (ParseException e) { + e.printStackTrace(); + Log.e(TAG, e.getMessage()); + return false; + } + + Date currentDate = new Date(); + long diffDays = (currentDate.getTime() - lastDate.getTime())/(1000*60*60*24); + return diffDays >= DONATION_REMINDER_DURATION; + } + + private void saveLastDonationReminderDate(){ + SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN); + Date lastDate = new Date(); + preferences.edit().putString(LAST_DONATION_REMINDER_DATE, sdf.format(lastDate)).apply(); + } } diff --git a/app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java b/app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java index 371e65fc..14c2eacf 100644 --- a/app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java +++ b/app/src/main/java/se/leap/bitmaskclient/drawer/NavigationDrawerFragment.java @@ -47,7 +47,6 @@ import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.CompoundButton; import android.widget.ListView; -import android.widget.Toast; import se.leap.bitmaskclient.ConfigHelper; import se.leap.bitmaskclient.DrawerSettingsAdapter; @@ -69,6 +68,7 @@ import static se.leap.bitmaskclient.Constants.PROVIDER_KEY; import static se.leap.bitmaskclient.Constants.REQUEST_CODE_SWITCH_PROVIDER; import static se.leap.bitmaskclient.Constants.SHARED_PREFERENCES; import static se.leap.bitmaskclient.Constants.DONATION_URL; +import static se.leap.bitmaskclient.Constants.ENABLE_DONATION; import static se.leap.bitmaskclient.DrawerSettingsAdapter.ABOUT; import static se.leap.bitmaskclient.DrawerSettingsAdapter.ALWAYS_ON; import static se.leap.bitmaskclient.DrawerSettingsAdapter.BATTERY_SAVER; @@ -80,7 +80,7 @@ import static se.leap.bitmaskclient.DrawerSettingsAdapter.SWITCH_PROVIDER; import static se.leap.bitmaskclient.R.string.about_fragment_title; import static se.leap.bitmaskclient.R.string.log_fragment_title; import static se.leap.bitmaskclient.R.string.switch_provider_menu_option; -import static se.leap.bitmaskclient.R.string.navigation_drawer_donation_button; +import static se.leap.bitmaskclient.R.string.donate_title; /** * Fragment used for managing interactions for and presentation of a navigation drawer. @@ -188,7 +188,9 @@ public class NavigationDrawerFragment extends Fragment { settingsListAdapter.addItem(getSimpleTextInstance(getString(switch_provider_menu_option), SWITCH_PROVIDER)); settingsListAdapter.addItem(getSimpleTextInstance(getString(log_fragment_title), LOG)); settingsListAdapter.addItem(getSimpleTextInstance(getString(about_fragment_title), ABOUT)); - settingsListAdapter.addItem(getSimpleTextInstance(getString(navigation_drawer_donation_button), DONATE)); + if (ENABLE_DONATION) { + settingsListAdapter.addItem(getSimpleTextInstance(getString(donate_title), DONATE)); + } mDrawerSettingsListView.setAdapter(settingsListAdapter); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 503d7df6..3aa00124 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -113,5 +113,9 @@ Always-on VPN Do not show again. To enable always-on VPN in Android VPN Settings click on the configure icon [img src] and turn the switch on." - Donate + Donate + Please donate today if you value secure communication that is easy for both the end-user and the service provider. + LEAP depends on donations and grants. Please donate today if you value secure communication that is easy for both the end-user and the service provider. + Remind me later + Donate -- cgit v1.2.3