package org.wikipedia.util; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.support.annotation.NonNull; import org.wikipedia.BuildConfig; import org.wikipedia.settings.Prefs; public final class ReleaseUtil { private static final int RELEASE_PROD = 0; private static final int RELEASE_BETA = 1; private static final int RELEASE_ALPHA = 2; private static final int RELEASE_DEV = 3; public static boolean isProdRelease() { return calculateReleaseType() == RELEASE_PROD; } public static boolean isPreProdRelease() { return calculateReleaseType() != RELEASE_PROD; } public static boolean isAlphaRelease() { return calculateReleaseType() == RELEASE_ALPHA; } public static boolean isPreBetaRelease() { switch (calculateReleaseType()) { case RELEASE_PROD: case RELEASE_BETA: return false; default: return true; } } public static boolean isDevRelease() { return calculateReleaseType() == RELEASE_DEV; } /** * Gets the distribution channel for the app from SharedPreferences */ @NonNull public static String getChannel(@NonNull Context ctx) { String channel = Prefs.getAppChannel(); if (channel == null) { channel = getChannelFromManifest(ctx); Prefs.setAppChannel(channel); } return channel; } public static int calculateReleaseType() { if (BuildConfig.APPLICATION_ID.contains("beta")) { return RELEASE_BETA; } if (BuildConfig.APPLICATION_ID.contains("alpha")) { return RELEASE_ALPHA; } if (BuildConfig.APPLICATION_ID.contains("dev")) { return RELEASE_DEV; } return RELEASE_PROD; } /** * Returns the distribution channel for the app from AndroidManifest.xml * @return The channel (the empty string if not defined) */ @NonNull private static String getChannelFromManifest(@NonNull Context ctx) { try { ApplicationInfo info = ctx.getPackageManager() .getApplicationInfo(BuildConfig.APPLICATION_ID, PackageManager.GET_META_DATA); String channel = info.metaData.getString(Prefs.getAppChannelKey()); return channel != null ? channel : ""; } catch (Throwable t) { return ""; } } private ReleaseUtil() { } }