summaryrefslogtreecommitdiff
path: root/main/src/main/java/de/blinkt/openvpn/fragments/FaqFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/main/java/de/blinkt/openvpn/fragments/FaqFragment.java')
-rw-r--r--main/src/main/java/de/blinkt/openvpn/fragments/FaqFragment.java195
1 files changed, 157 insertions, 38 deletions
diff --git a/main/src/main/java/de/blinkt/openvpn/fragments/FaqFragment.java b/main/src/main/java/de/blinkt/openvpn/fragments/FaqFragment.java
index 5086530b..30be7b2a 100644
--- a/main/src/main/java/de/blinkt/openvpn/fragments/FaqFragment.java
+++ b/main/src/main/java/de/blinkt/openvpn/fragments/FaqFragment.java
@@ -6,6 +6,7 @@
package de.blinkt.openvpn.fragments;
import android.app.Fragment;
+import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
@@ -15,43 +16,162 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import java.util.Vector;
+
import de.blinkt.openvpn.R;
-public class FaqFragment extends Fragment {
-private static int[] faqitems[] =
- {
- {R.string.faq_howto_title, R.string.faq_howto},
- {R.string.faq_vpndialog43_title, R.string.faq_vpndialog43},
- {R.string.faq_system_dialogs_title, R.string.faq_system_dialogs},
- {R.string.faq_duplicate_notification_title, R.string.faq_duplicate_notification},
- {R.string.faq_androids_clients_title, R.string.faq_android_clients},
- {R.string.battery_consumption_title, R.string.baterry_consumption},
- {R.string.tap_mode, R.string.faq_tap_mode},
- {R.string.vpn_tethering_title, R.string.faq_tethering},
- {R.string.faq_security_title, R.string.faq_security},
- {R.string.broken_images, R.string.broken_images_faq},
- {R.string.faq_shortcut, R.string.faq_howto_shortcut},
- {R.string.tap_mode, R.string.tap_faq2},
- {R.string.copying_log_entries, R.string.faq_copying},
- {R.string.tap_mode, R.string.tap_faq3},
- {R.string.faq_routing_title, R.string.faq_routing}
- };
+public class FaqFragment extends Fragment {
+ static class FAQEntry {
+
+ public FAQEntry(int startVersion, int endVersion, int description) {
+ this (startVersion, endVersion, -1, description);
+ }
+
+ public FAQEntry(int startVersion, int endVersion, int title, int description) {
+ this.startVersion = startVersion;
+ this.endVersion = endVersion;
+ this.description = description;
+ this.title = title;
+ }
+
+ final int startVersion;
+ final int endVersion;
+ final int description;
+ final int title;
+
+ public boolean runningVersion() {
+ if (Build.VERSION.SDK_INT >= startVersion) {
+ if (Build.VERSION.SDK_INT <= endVersion)
+ return true;
+
+ if (endVersion == -1)
+ return true;
+
+ String release = Build.VERSION.RELEASE;
+ boolean isAtLeast442 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT &&
+ !release.startsWith("4.4.3") && !release.startsWith("4.4.3")
+ && !release.startsWith("4.4.4") && !release.startsWith("4.4.5") && !release.startsWith("4.4.6");
+
+ boolean isAtLeast443 = isAtLeast442 && !release.startsWith("4.4.2");
+ if (endVersion == -441 && !isAtLeast442)
+ return true;
+
+ if (endVersion == -442 && !isAtLeast443)
+ return true;
+
+
+ }
+ return false;
+ }
+
+ public String getVersionsString(Context c) {
+ if (startVersion == Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
+ if (endVersion == -1)
+ return null;
+ else
+ return c.getString(R.string.version_upto, getAndroidVersionString(c, endVersion));
+ }
+
+ if (endVersion==-1)
+ return getAndroidVersionString(c, startVersion) + " and later";
+
+
+ String startver = getAndroidVersionString(c, startVersion);
+
+ if (endVersion == startVersion)
+ return startver;
+
+ return String.format("%s - %s", startver, getAndroidVersionString(c, endVersion));
+ }
+
+
+ private String getAndroidVersionString(Context c, int versionCode) {
+ switch (versionCode) {
+ case Build.VERSION_CODES.ICE_CREAM_SANDWICH:
+ return "4.0 (Ice Cream Sandwich)";
+ case -441:
+ return "4.4.1 (KitKat)";
+ case -442:
+ return "4.4.2 (KitKat)";
+ case Build.VERSION_CODES.JELLY_BEAN_MR2:
+ return "4.3 (Jelly Bean MR2)";
+ case Build.VERSION_CODES.KITKAT:
+ return "4.4 (KitKat)";
+ case Build.VERSION_CODES.LOLLIPOP:
+ return "5.0 (Lollipop)";
+ default:
+ return "API " + versionCode;
+ }
+ }
+
+
+ }
+
+ private static FAQEntry[] faqitemsVersionSpecific = {
+
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.faq_howto_title, R.string.faq_howto),
+
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.faq_duplicate_notification_title, R.string.faq_duplicate_notification),
+
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.faq_androids_clients_title, R.string.faq_android_clients),
+
+
+ new FAQEntry(Build.VERSION_CODES.LOLLIPOP, -1, R.string.ab_lollipop_reinstall_title, R.string.ab_lollipop_reinstall),
+
+
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, Build.VERSION_CODES.JELLY_BEAN_MR2, R.string.vpn_tethering_title, R.string.faq_tethering),
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, Build.VERSION_CODES.JELLY_BEAN_MR2, R.string.broken_images, R.string.broken_images_faq),
+
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.battery_consumption_title, R.string.baterry_consumption),
+
+
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, Build.VERSION_CODES.KITKAT , R.string.faq_system_dialogs_title, R.string.faq_system_dialogs),
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.tap_mode, R.string.faq_tap_mode),
+
+ new FAQEntry(Build.VERSION_CODES.JELLY_BEAN_MR2, Build.VERSION_CODES.JELLY_BEAN_MR2, R.string.ab_secondary_users),
+ new FAQEntry(Build.VERSION_CODES.JELLY_BEAN_MR2, -1, R.string.faq_vpndialog43_title, R.string.faq_vpndialog43),
+
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.faq_security_title, R.string.faq_security),
+
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.faq_shortcut, R.string.faq_howto_shortcut),
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.tap_mode, R.string.tap_faq2),
+
+ new FAQEntry(Build.VERSION_CODES.KITKAT, -1, R.string.vpn_tethering_title, R.string.ab_tethering_44),
+ new FAQEntry(Build.VERSION_CODES.KITKAT, -441, R.string.ab_kitkat_mss),
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.copying_log_entries, R.string.faq_copying),
+
+ new FAQEntry(Build.VERSION_CODES.KITKAT, -442, R.string.ab_persist_tun),
+ new FAQEntry(Build.VERSION_CODES.KITKAT, -1, R.string.faq_routing_title, R.string.faq_routing),
+ new FAQEntry(Build.VERSION_CODES.KITKAT, Build.VERSION_CODES.KITKAT, R.string.ab_kitkat_reconnect),
+ new FAQEntry(Build.VERSION_CODES.KITKAT, Build.VERSION_CODES.KITKAT, R.string.ab_vpn_reachability_44),
+
+
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.ab_only_cidr_title, R.string.ab_only_cidr),
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.ab_proxy_title, R.string.ab_proxy),
+
+ new FAQEntry(Build.VERSION_CODES.LOLLIPOP, -1, R.string.ab_not_route_to_vpn),
+ new FAQEntry(Build.VERSION_CODES.ICE_CREAM_SANDWICH, -1, R.string.tap_mode, R.string.tap_faq3),
+
+ };
+
+
+
private RecyclerView mRecyclerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View v= inflater.inflate(R.layout.faq, container, false);
+ Bundle savedInstanceState) {
+ View v = inflater.inflate(R.layout.faq, container, false);
DisplayMetrics displaymetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
- int dpWidth = (int) (displaymetrics.widthPixels /getResources().getDisplayMetrics().density);
+ int dpWidth = (int) (displaymetrics.widthPixels / getResources().getDisplayMetrics().density);
//better way but does not work on 5.0
//int dpWidth = (int) (container.getWidth()/getResources().getDisplayMetrics().density);
- int columns = dpWidth/360;
+ int columns = dpWidth / 360;
columns = Math.max(1, columns);
@@ -66,25 +186,24 @@ private static int[] faqitems[] =
mRecyclerView.setAdapter(new FaqViewAdapter(getActivity(), getFAQEntries()));
- return v;
+ return v;
}
- /* I think the problem mentioned in there should not affect, 4.3+ */
- private int[][] getFAQEntries() {
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
- int[][] newFaqItems = new int[faqitems.length - 1][2];
- int j=0;
- for (int i = 0;i < faqitems.length;i++) {
- if (faqitems[i][0] != R.string.broken_images) {
- newFaqItems[j] = faqitems[i];
- j++;
- }
- }
- return newFaqItems;
+ private FAQEntry[] getFAQEntries() {
+ Vector<FAQEntry> faqItems = new Vector<>();
- } else {
- return faqitems;
+ for (FAQEntry fe : faqitemsVersionSpecific)
+ {
+ if (fe.runningVersion())
+ faqItems.add(fe);
}
+ for (FAQEntry fe : faqitemsVersionSpecific)
+ {
+ if (!fe.runningVersion())
+ faqItems.add(fe);
+ }
+
+ return faqItems.toArray(new FAQEntry[faqItems.size()]);
}
}