From 6704dceec70c42c58d489b8a31c7a73b9c377fd9 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Wed, 16 Mar 2016 13:33:50 +0100 Subject: [PATCH] requiring policy re-acceptance only if major version differs (IDEA-153084) --- .../src/com/intellij/ide/PrivacyPolicy.java | 77 +++++++------------ .../src/com/intellij/idea/StartupUtil.java | 28 ++++--- ...vacyPolicy-1.0.html => PrivacyPolicy.html} | 0 3 files changed, 41 insertions(+), 64 deletions(-) rename platform/platform-resources/src/{PrivacyPolicy-1.0.html => PrivacyPolicy.html} (100%) diff --git a/platform/platform-api/src/com/intellij/ide/PrivacyPolicy.java b/platform/platform-api/src/com/intellij/ide/PrivacyPolicy.java index 1d17f69470dc..0c94482d28b4 100644 --- a/platform/platform-api/src/com/intellij/ide/PrivacyPolicy.java +++ b/platform/platform-api/src/com/intellij/ide/PrivacyPolicy.java @@ -17,6 +17,7 @@ package com.intellij.ide; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; @@ -35,10 +36,7 @@ public final class PrivacyPolicy { private static final String VERSION_COMMENT_START = ""; private static final String ACCEPTED_VERSION_KEY = "JetBrains.privacy_policy.accepted_version"; - private static final Version EMBEDDED_VERSION = new Version(1, 0); private static final Version MAGIC_VERSION = new Version(999, 999); - @Nullable - private static volatile Version ourLatestVersion; private static final File ourCachedPolicyFile; static { @@ -75,9 +73,12 @@ public final class PrivacyPolicy { ourCachedPolicyFile = new File(dataDir, CACHED_RESOURCE_NAME); } - public static boolean isLatestVersionAccepted() { - final Version latest = getLatestVersion(); - return getAcceptedVersion().equals(latest) || MAGIC_VERSION.equals(latest); + public static boolean isVersionAccepted(final Version ver) { + if (ver.isUnknown() || MAGIC_VERSION.equals(ver)) { + return true; + } + final Version currentAccepted = getAcceptedVersion(); + return !currentAccepted.isUnknown() && currentAccepted.getMajor() == ver.getMajor() ; } public static void setVersionAccepted(@NotNull Version version) { @@ -89,50 +90,22 @@ public final class PrivacyPolicy { } } - @NotNull - public static Version getLatestVersion() { - final Version cached = ourLatestVersion; - if (cached != null) { - return cached; - } - Version latest = EMBEDDED_VERSION; - if (ourCachedPolicyFile.exists()) { - try { - final Version version = loadVersion(new FileInputStream(ourCachedPolicyFile)); - if (!version.isUnknown() && version.compareTo(latest) > 0) { - latest = version; - } - } - catch (FileNotFoundException ignored) { - } - } - ourLatestVersion = latest; - return latest; - } - @NotNull public static Version getAcceptedVersion() { return Version.fromString(Prefs.get(ACCEPTED_VERSION_KEY, null)); } - public static String getText() { - return getText(getLatestVersion()); - } - @NotNull - public static String getText(@NotNull Version version) { - String text = null; + public static Pair getContent() { try { - if (EMBEDDED_VERSION.equals(version)) { - text = loadText(PrivacyPolicy.class.getResourceAsStream("/PrivacyPolicy-" + EMBEDDED_VERSION + ".html")); - } - else { - text = loadText(new FileInputStream(ourCachedPolicyFile)); + final Pair fromFile = loadContent(new FileInputStream(ourCachedPolicyFile)); + if (!fromFile.getFirst().isUnknown()) { + return fromFile; } } - catch (Exception ignored) { + catch (IOException ignored) { } - return text == null? "" : text; + return loadContent(PrivacyPolicy.class.getResourceAsStream("/PrivacyPolicy.html")); } public static void updateText(String text) { @@ -142,18 +115,16 @@ public final class PrivacyPolicy { catch (IOException e) { LOG.info(e); } - finally { - ourLatestVersion = null; // clear cache - } } - @Nullable - private static String loadText(InputStream stream) { + @NotNull + private static Pair loadContent(InputStream stream) { try { if (stream != null) { final Reader reader = new InputStreamReader(stream, "utf-8"); try { - return new String(FileUtil.adaptiveLoadText(reader)); + final String text = new String(FileUtil.adaptiveLoadText(reader)); + return Pair.create(parseVersion(text), text); } finally { reader.close(); @@ -163,13 +134,13 @@ public final class PrivacyPolicy { catch (IOException e) { LOG.info(e); } - return null; + return Pair.create(Version.UNKNOWN, ""); } @NotNull - private static Version loadVersion(final InputStream is) { + private static Version parseVersion(String text) { try { - final BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8")); + final BufferedReader reader = new BufferedReader(new StringReader(text)); try { final String line = reader.readLine(); if (line != null) { @@ -220,6 +191,14 @@ public final class PrivacyPolicy { return myMajor < 0 || myMinor < 0; } + public int getMajor() { + return myMajor; + } + + public int getMinor() { + return myMinor; + } + @Override public int compareTo(Version other) { if (isUnknown()) { diff --git a/platform/platform-impl/src/com/intellij/idea/StartupUtil.java b/platform/platform-impl/src/com/intellij/idea/StartupUtil.java index 197edec791ae..9449fa14431b 100644 --- a/platform/platform-impl/src/com/intellij/idea/StartupUtil.java +++ b/platform/platform-impl/src/com/intellij/idea/StartupUtil.java @@ -32,6 +32,7 @@ import com.intellij.openapi.application.impl.ApplicationImpl; import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.ShutDownTracker; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.SystemInfoRt; @@ -153,21 +154,18 @@ public class StartupUtil { if (!Main.isHeadless()) { AppUIUtil.updateWindowIcon(JOptionPane.getRootFrame()); AppUIUtil.registerBundledFonts(); - if (!PrivacyPolicy.isLatestVersionAccepted()) { - final PrivacyPolicy.Version latestVersion = PrivacyPolicy.getLatestVersion(); - final String text = PrivacyPolicy.getText(latestVersion); - if (!text.isEmpty()) { - try { - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - showPrivacyPolicyAgreement(text); - } - }); - PrivacyPolicy.setVersionAccepted(latestVersion); - } - catch (Exception ignored) { - } + final Pair policy = PrivacyPolicy.getContent(); + if (!PrivacyPolicy.isVersionAccepted(policy.getFirst())) { + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + showPrivacyPolicyAgreement(policy.getSecond()); + } + }); + PrivacyPolicy.setVersionAccepted(policy.getFirst()); + } + catch (Exception ignored) { } } } diff --git a/platform/platform-resources/src/PrivacyPolicy-1.0.html b/platform/platform-resources/src/PrivacyPolicy.html similarity index 100% rename from platform/platform-resources/src/PrivacyPolicy-1.0.html rename to platform/platform-resources/src/PrivacyPolicy.html