diff --git a/OsmAnd/res/layout/two_line_with_images_list_item.xml b/OsmAnd/res/layout/two_line_with_images_list_item.xml index d67b8d3b2e..98d5f32702 100644 --- a/OsmAnd/res/layout/two_line_with_images_list_item.xml +++ b/OsmAnd/res/layout/two_line_with_images_list_item.xml @@ -85,6 +85,7 @@ android:paddingRight="18dp" android:background="@drawable/buy_btn_background_light" android:layout_gravity="center_vertical" + android:layout_marginLeft="@dimen/dashFavIconMargin" android:layout_marginRight="8dp" android:textColor="@color/buy_button_color" android:text="@string/buy" diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index ae306a6231..178d36c09e 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,12 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Thank you for purchasing sea depth contours! + Depth contours + Depth points southern hemisphere + Depth points northern hemisphere + Depth contours + Nautical maps Analyze on map Visible Restore purchases diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index 53b52518c4..432820c3d9 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -919,6 +919,7 @@ public class OsmandSettings { public final OsmandPreference BILLING_PURCHASE_TOKEN_SENT = new BooleanPreference("billing_purchase_token_sent", false).makeGlobal(); public final OsmandPreference LIVE_UPDATES_PURCHASED = new BooleanPreference("billing_live_updates_purchased", false).makeGlobal(); public final OsmandPreference FULL_VERSION_PURCHASED = new BooleanPreference("billing_full_version_purchased", false).makeGlobal(); + public final OsmandPreference DEPTH_CONTOURS_PURCHASED = new BooleanPreference("billing_sea_depth_purchased", false).makeGlobal(); public final OsmandPreference DISCOUNT_ID = new IntPreference("discount_id", 0).makeGlobal(); public final OsmandPreference DISCOUNT_SHOW_NUMBER_OF_STARTS = new IntPreference("number_of_starts_on_discount_show", 0).makeGlobal(); diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java b/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java index aa3e10957d..6852cb3c32 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java @@ -229,6 +229,18 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo } } + public void purchaseFullVersion() { + if (inAppHelper != null) { + inAppHelper.purchaseFullVersion(this); + } + } + + public void purchaseDepthContours() { + if (inAppHelper != null) { + inAppHelper.purchaseDepthContours(this); + } + } + public DownloadIndexesThread getDownloadThread() { return downloadThread; } diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadActivityType.java b/OsmAnd/src/net/osmand/plus/download/DownloadActivityType.java index 695beb7093..57262294ee 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadActivityType.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadActivityType.java @@ -39,6 +39,8 @@ public class DownloadActivityType { new DownloadActivityType(R.string.download_roads_only_maps, "road_map", 30); public static final DownloadActivityType SRTM_COUNTRY_FILE = new DownloadActivityType(R.string.download_srtm_maps, R.drawable.ic_plugin_srtm, "srtm_map", 40); + public static final DownloadActivityType DEPTH_CONTOUR_FILE = + new DownloadActivityType(R.string.download_regular_maps, "depth", 45); public static final DownloadActivityType HILLSHADE_FILE = new DownloadActivityType(R.string.download_hillshade_maps, R.drawable.ic_action_hillshade_dark, "hillshade", 50); public static final DownloadActivityType WIKIPEDIA_FILE = @@ -124,13 +126,15 @@ public class DownloadActivityType { IndexConstants.BINARY_MAP_VERSION)); } else if (HILLSHADE_FILE == this) { return fileName.endsWith(IndexConstants.SQLITE_EXT); + } else if (DEPTH_CONTOUR_FILE == this) { + return fileName.endsWith(addVersionToExt(IndexConstants.BINARY_MAP_INDEX_EXT_ZIP, IndexConstants.BINARY_MAP_VERSION)); } return false; } public File getDownloadFolder(OsmandApplication ctx, IndexItem indexItem) { if (NORMAL_FILE == this) { - if(indexItem.fileName.endsWith(IndexConstants.SQLITE_EXT)) { + if (indexItem.fileName.endsWith(IndexConstants.SQLITE_EXT)) { return ctx.getAppPath(IndexConstants.TILES_INDEX_DIR); } return ctx.getAppPath(IndexConstants.MAPS_PATH); @@ -148,6 +152,8 @@ public class DownloadActivityType { return ctx.getAppPath(IndexConstants.LIVE_INDEX_DIR); } else if (HILLSHADE_FILE == this) { return ctx.getAppPath(IndexConstants.TILES_INDEX_DIR); + } else if (DEPTH_CONTOUR_FILE == this) { + return ctx.getAppPath(IndexConstants.MAPS_PATH); } throw new UnsupportedOperationException(); } @@ -191,33 +197,34 @@ public class DownloadActivityType { return BINARY_MAP_INDEX_EXT; } else if (HILLSHADE_FILE == this) { return IndexConstants.SQLITE_EXT; + } else if (DEPTH_CONTOUR_FILE == this) { + return BINARY_MAP_INDEX_EXT; } throw new UnsupportedOperationException(); } public String getUrlSuffix(OsmandApplication ctx) { - if (this== DownloadActivityType.ROADS_FILE) { + if (this== ROADS_FILE) { return "&road=yes"; - } else if (this == DownloadActivityType.LIVE_UPDATES_FILE) { + } else if (this == LIVE_UPDATES_FILE) { return "&aosmc=yes"; - } else if (this == DownloadActivityType.SRTM_COUNTRY_FILE) { + } else if (this == SRTM_COUNTRY_FILE) { return "&srtmcountry=yes"; - } else if (this == DownloadActivityType.WIKIPEDIA_FILE) { + } else if (this == WIKIPEDIA_FILE) { return "&wiki=yes"; - }else if (this == DownloadActivityType.HILLSHADE_FILE) { + } else if (this == HILLSHADE_FILE) { return "&hillshade=yes"; + } else if (this == FONT_FILE) { + return "&fonts=yes"; + } else if (this == DEPTH_CONTOUR_FILE) { + return "&inapp=depth"; } return ""; } public String getBaseUrl(OsmandApplication ctx, String fileName) { - if (this == FONT_FILE) { - return "http://" + IndexConstants.INDEX_DOWNLOAD_DOMAIN + "/download?event=2&fonts=yes&" - + Version.getVersionAsURLParam(ctx) + "&file=" + encode(fileName); - } else { - return "http://" + IndexConstants.INDEX_DOWNLOAD_DOMAIN + "/download?event=2&" - + Version.getVersionAsURLParam(ctx) + "&file=" + encode(fileName); - } + return "http://" + IndexConstants.INDEX_DOWNLOAD_DOMAIN + "/download?event=2&" + + Version.getVersionAsURLParam(ctx) + "&file=" + encode(fileName); } @@ -258,12 +265,16 @@ public class DownloadActivityType { } public String getVisibleDescription(IndexItem indexItem, Context ctx) { - if (this == DownloadActivityType.SRTM_COUNTRY_FILE) { + if (this == SRTM_COUNTRY_FILE) { return ctx.getString(R.string.download_srtm_maps); - } else if (this == DownloadActivityType.WIKIPEDIA_FILE) { + } else if (this == WIKIPEDIA_FILE) { return ctx.getString(R.string.shared_string_wikipedia); - } else if (this == DownloadActivityType.ROADS_FILE) { + } else if (this == ROADS_FILE) { return ctx.getString(R.string.download_roads_only_item); + } else if (this == DEPTH_CONTOUR_FILE) { + return ctx.getString(R.string.download_depth_countours); + } else if (this == FONT_FILE) { + return ctx.getString(R.string.fonts_header); } return ""; } @@ -334,13 +345,13 @@ public class DownloadActivityType { l = fileName.length(); } String baseNameWithoutVersion = fileName.substring(0, l); - if (this == DownloadActivityType.SRTM_COUNTRY_FILE) { + if (this == SRTM_COUNTRY_FILE) { return baseNameWithoutVersion + IndexConstants.BINARY_SRTM_MAP_INDEX_EXT; } - if (this == DownloadActivityType.WIKIPEDIA_FILE) { + if (this == WIKIPEDIA_FILE) { return baseNameWithoutVersion + IndexConstants.BINARY_WIKI_MAP_INDEX_EXT; } - if (this == DownloadActivityType.ROADS_FILE) { + if (this == ROADS_FILE) { return baseNameWithoutVersion + IndexConstants.BINARY_ROAD_MAP_INDEX_EXT; } baseNameWithoutVersion += IndexConstants.BINARY_MAP_INDEX_EXT; diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadResourceGroup.java b/OsmAnd/src/net/osmand/plus/download/DownloadResourceGroup.java index 403610ba38..f47a829397 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadResourceGroup.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadResourceGroup.java @@ -34,6 +34,7 @@ public class DownloadResourceGroup { SRTM_HEADER(R.string.download_srtm_maps), HILLSHADE_HEADER(R.string.download_hillshade_maps), OTHER_MAPS_HEADER(R.string.download_select_map_types), + NAUTICAL_MAPS_HEADER(R.string.nautical_maps), // headers with voice items VOICE_HEADER_TTS(R.string.index_name_tts_voice), VOICE_HEADER_REC(R.string.index_name_voice), @@ -79,7 +80,7 @@ public class DownloadResourceGroup { || this == WORLD_MAPS || this == REGION_MAPS || this == OTHER_GROUP || this == HILLSHADE_HEADER || this == SRTM_HEADER || this == OTHER_MAPS_HEADER || this == OTHER_MAPS_GROUP - || this == FONTS_HEADER; + || this == FONTS_HEADER || this == NAUTICAL_MAPS_HEADER; } public static String getVoiceTTSId() { diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadResources.java b/OsmAnd/src/net/osmand/plus/download/DownloadResources.java index 17d8a4b0e6..27e9f79ff5 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadResources.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadResources.java @@ -255,6 +255,8 @@ public class DownloadResources extends DownloadResourceGroup { DownloadResourceGroup fonts = new DownloadResourceGroup(otherGroup, DownloadResourceGroupType.FONTS_HEADER); DownloadResourceGroup worldMaps = new DownloadResourceGroup(this, DownloadResourceGroupType.WORLD_MAPS); + DownloadResourceGroup nauticalMaps = new DownloadResourceGroup(this, DownloadResourceGroupType.NAUTICAL_MAPS_HEADER); + Map > groupByRegion = new LinkedHashMap>(); OsmandRegions regs = app.getRegions(); for (IndexItem ii : resources) { @@ -270,6 +272,12 @@ public class DownloadResources extends DownloadResourceGroup { fonts.addItem(ii); continue; } + if (ii.getType() == DownloadActivityType.DEPTH_CONTOUR_FILE) { + if (app.getSettings().DEPTH_CONTOURS_PURCHASED.get() || nauticalMaps.size() == 0) { + nauticalMaps.addItem(ii); + } + continue; + } String basename = ii.getBasename().toLowerCase(); WorldRegion wg = regs.getRegionDataByDownloadName(basename); if (wg != null) { @@ -279,7 +287,11 @@ public class DownloadResources extends DownloadResourceGroup { groupByRegion.get(wg).add(ii); } else { if (ii.getFileName().startsWith("World_")) { - worldMaps.addItem(ii); + if (ii.getFileName().toLowerCase().startsWith(WORLD_SEAMARKS_KEY)) { + nauticalMaps.addItem(ii); + } else { + worldMaps.addItem(ii); + } } else { otherMaps.addItem(ii); } @@ -324,6 +336,7 @@ public class DownloadResources extends DownloadResourceGroup { // 2. if there is no subregions and there only 1 index item it could be merged to the level up - objection there is no such maps // 3. if hillshade/srtm is disabled, all maps from inner level could be combined into 1 addGroup(worldMaps); + addGroup(nauticalMaps); if (otherMaps.size() > 0) { addGroup(otherMapsGroup); } diff --git a/OsmAnd/src/net/osmand/plus/download/ui/DownloadResourceGroupFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/DownloadResourceGroupFragment.java index 7a52cec6a2..854422c5c1 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/DownloadResourceGroupFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/DownloadResourceGroupFragment.java @@ -190,6 +190,8 @@ public class DownloadResourceGroupFragment extends DialogFragment implements Dow @Override public void onItemPurchased(String sku) { + getMyApplication().getDownloadThread().runReloadIndexFilesSilent(); + //reloadData(); } @Override diff --git a/OsmAnd/src/net/osmand/plus/download/ui/ItemViewHolder.java b/OsmAnd/src/net/osmand/plus/download/ui/ItemViewHolder.java index 5bd9a3ab5b..10131a2c77 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/ItemViewHolder.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/ItemViewHolder.java @@ -1,7 +1,6 @@ package net.osmand.plus.download.ui; import android.annotation.SuppressLint; -import android.content.ActivityNotFoundException; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; @@ -23,7 +22,6 @@ import android.widget.Toast; import net.osmand.map.WorldRegion; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; -import net.osmand.plus.Version; import net.osmand.plus.activities.LocalIndexHelper.LocalIndexType; import net.osmand.plus.activities.LocalIndexInfo; import net.osmand.plus.download.CityItem; @@ -53,7 +51,8 @@ public class ItemViewHolder { private boolean srtmNeedsInstallation; private boolean nauticalPluginDisabled; private boolean freeVersion; - + private boolean depthContoursPurchased; + protected final DownloadActivity context; private int textColorPrimary; @@ -74,7 +73,8 @@ public class ItemViewHolder { ASK_FOR_SEAMARKS_PLUGIN, ASK_FOR_SRTM_PLUGIN_PURCHASE, ASK_FOR_SRTM_PLUGIN_ENABLE, - ASK_FOR_FULL_VERSION_PURCHASE + ASK_FOR_FULL_VERSION_PURCHASE, + ASK_FOR_DEPTH_CONTOURS_PURCHASE } @@ -130,6 +130,7 @@ public class ItemViewHolder { nauticalPluginDisabled = context.isNauticalPluginDisabled(); freeVersion = context.isFreeVersion(); srtmNeedsInstallation = context.isSrtmNeedsInstallation(); + depthContoursPurchased = context.getMyApplication().getSettings().DEPTH_CONTOURS_PURCHASED.get(); } public void bindIndexItem(final IndexItem indexItem) { @@ -177,7 +178,9 @@ public class ItemViewHolder { if (!isDownloading) { progressBar.setVisibility(View.GONE); descrTextView.setVisibility(View.VISIBLE); - if ((indexItem.getType() == DownloadActivityType.SRTM_COUNTRY_FILE || + if (indexItem.getType() == DownloadActivityType.DEPTH_CONTOUR_FILE && !depthContoursPurchased) { + descrTextView.setVisibility(View.GONE); + } else if ((indexItem.getType() == DownloadActivityType.SRTM_COUNTRY_FILE || indexItem.getType() == DownloadActivityType.HILLSHADE_FILE) && srtmDisabled) { if(showTypeInName) { descrTextView.setText(""); @@ -311,8 +314,12 @@ public class ItemViewHolder { clickAction = RightButtonAction.ASK_FOR_SRTM_PLUGIN_ENABLE; } - } else if (indexItem.getType() == DownloadActivityType.WIKIPEDIA_FILE && freeVersion) { + } else if (indexItem.getType() == DownloadActivityType.WIKIPEDIA_FILE && freeVersion + && !context.getMyApplication().getSettings().FULL_VERSION_PURCHASED.get()) { clickAction = RightButtonAction.ASK_FOR_FULL_VERSION_PURCHASE; + } else if (indexItem.getType() == DownloadActivityType.DEPTH_CONTOUR_FILE + && !context.getMyApplication().getSettings().DEPTH_CONTOURS_PURCHASED.get()) { + clickAction = RightButtonAction.ASK_FOR_DEPTH_CONTOURS_PURCHASE; } return clickAction; } @@ -323,39 +330,37 @@ public class ItemViewHolder { @Override public void onClick(View v) { switch (clickAction) { - case ASK_FOR_FULL_VERSION_PURCHASE: - context.getMyApplication().logEvent(context, "click_buy_plus"); - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(Version.marketPrefix(context - .getMyApplication()) + "net.osmand.plus")); - try { - context.startActivity(intent); - } catch (ActivityNotFoundException e) { - //ignore - } - break; - case ASK_FOR_SEAMARKS_PLUGIN: - context.startActivity(new Intent(context, context.getMyApplication().getAppCustomization() - .getPluginsActivity())); - Toast.makeText(context.getApplicationContext(), - context.getString(R.string.activate_seamarks_plugin), Toast.LENGTH_SHORT).show(); - break; - case ASK_FOR_SRTM_PLUGIN_PURCHASE: - OsmandPlugin plugin = OsmandPlugin.getPlugin(SRTMPlugin.class); - if(plugin == null || plugin.getInstallURL() == null) { + case ASK_FOR_FULL_VERSION_PURCHASE: + context.getMyApplication().logEvent(context, "click_buy_plus_inapp"); + context.purchaseFullVersion(); + break; + case ASK_FOR_DEPTH_CONTOURS_PURCHASE: + context.getMyApplication().logEvent(context, "click_buy_depth_contours_inapp"); + context.purchaseDepthContours(); + break; + case ASK_FOR_SEAMARKS_PLUGIN: + context.startActivity(new Intent(context, context.getMyApplication().getAppCustomization() + .getPluginsActivity())); Toast.makeText(context.getApplicationContext(), - context.getString(R.string.activate_srtm_plugin), Toast.LENGTH_LONG).show(); - } else { - context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(plugin.getInstallURL()))); - } - break; - case ASK_FOR_SRTM_PLUGIN_ENABLE: - context.startActivity(new Intent(context, context.getMyApplication().getAppCustomization() - .getPluginsActivity())); - Toast.makeText(context, context.getString(R.string.activate_srtm_plugin), - Toast.LENGTH_SHORT).show(); - break; - case DOWNLOAD: - break; + context.getString(R.string.activate_seamarks_plugin), Toast.LENGTH_SHORT).show(); + break; + case ASK_FOR_SRTM_PLUGIN_PURCHASE: + OsmandPlugin plugin = OsmandPlugin.getPlugin(SRTMPlugin.class); + if(plugin == null || plugin.getInstallURL() == null) { + Toast.makeText(context.getApplicationContext(), + context.getString(R.string.activate_srtm_plugin), Toast.LENGTH_LONG).show(); + } else { + context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(plugin.getInstallURL()))); + } + break; + case ASK_FOR_SRTM_PLUGIN_ENABLE: + context.startActivity(new Intent(context, context.getMyApplication().getAppCustomization() + .getPluginsActivity())); + Toast.makeText(context, context.getString(R.string.activate_srtm_plugin), + Toast.LENGTH_SHORT).show(); + break; + case DOWNLOAD: + break; } } }; diff --git a/OsmAnd/src/net/osmand/plus/helpers/FileNameTranslationHelper.java b/OsmAnd/src/net/osmand/plus/helpers/FileNameTranslationHelper.java index 4dd39b3f2b..d85aeb0740 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/FileNameTranslationHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/FileNameTranslationHelper.java @@ -218,6 +218,12 @@ public class FileNameTranslationHelper { return ctx.getString(R.string.index_item_world_bitcoin_payments); } else if (basename.equals("world_seamarks_basemap")) { return ctx.getString(R.string.index_item_world_seamarks); + } else if (basename.equals("depth_contours_osmand_ext")) { + return ctx.getString(R.string.index_item_depth_contours_osmand_ext); + } else if (basename.equals("depth_points_southern_hemisphere_osmand_ext")) { + return ctx.getString(R.string.index_item_depth_points_southern_hemisphere); + } else if (basename.equals("depth_points_northern_hemisphere_osmand_ext")) { + return ctx.getString(R.string.index_item_depth_points_northern_hemisphere); } return null; } diff --git a/OsmAnd/src/net/osmand/plus/inapp/InAppHelper.java b/OsmAnd/src/net/osmand/plus/inapp/InAppHelper.java index b8eda60325..f2e5445d17 100644 --- a/OsmAnd/src/net/osmand/plus/inapp/InAppHelper.java +++ b/OsmAnd/src/net/osmand/plus/inapp/InAppHelper.java @@ -38,14 +38,19 @@ public class InAppHelper { private static boolean mSubscribedToLiveUpdates = false; private static boolean mFullVersionPurchased = false; + private static boolean mDepthContoursPurchased = false; private static String mLiveUpdatesPrice; private static long lastValidationCheckTime; private static String mFullVersionPrice; + private static String mDepthContoursPrice; public static final String SKU_FULL_VERSION_PRICE = "osmand_full_version_price"; private static final String SKU_LIVE_UPDATES_FULL = "osm_live_subscription_2"; private static final String SKU_LIVE_UPDATES_FREE = "osm_free_live_subscription_2"; + private static final String SKU_DEPTH_CONTOURS_FULL = "net.osmand.seadepth_plus"; + private static final String SKU_DEPTH_CONTOURS_FREE = "net.osmand.seadepth"; public static String SKU_LIVE_UPDATES; + public static String SKU_DEPTH_CONTOURS; private static final long PURCHASE_VALIDATION_PERIOD_MSEC = 1000 * 60 * 60 * 24; // daily // (arbitrary) request code for the purchase flow @@ -107,10 +112,18 @@ public class InAppHelper { return mFullVersionPurchased; } + public static boolean isDepthContoursPurchased() { + return mDepthContoursPurchased; + } + public static String getLiveUpdatesPrice() { return mLiveUpdatesPrice; } + public static String getDepthContoursPrice() { + return mDepthContoursPrice; + } + public static String getFullVersionPrice() { return mFullVersionPrice; } @@ -132,6 +145,13 @@ public class InAppHelper { SKU_LIVE_UPDATES = SKU_LIVE_UPDATES_FULL; } } + if (SKU_DEPTH_CONTOURS == null) { + if (Version.isFreeVersion(ctx)) { + SKU_DEPTH_CONTOURS = SKU_DEPTH_CONTOURS_FREE; + } else { + SKU_DEPTH_CONTOURS = SKU_DEPTH_CONTOURS_FULL; + } + } } public InAppHelper(OsmandApplication ctx, boolean forceRequestInventory) { @@ -142,8 +162,10 @@ public class InAppHelper { if (isDeveloperVersion) { mSubscribedToLiveUpdates = true; mFullVersionPurchased = true; + mDepthContoursPurchased = true; ctx.getSettings().LIVE_UPDATES_PURCHASED.set(true); ctx.getSettings().FULL_VERSION_PURCHASED.set(true); + ctx.getSettings().DEPTH_CONTOURS_PURCHASED.set(true); } } @@ -225,9 +247,8 @@ public class InAppHelper { logDebug("Setup successful. Querying inventory."); List skus = new ArrayList<>(); skus.add(SKU_LIVE_UPDATES); - if (forceRequestInventory) { - skus.add(SKU_FULL_VERSION_PRICE); - } + skus.add(SKU_DEPTH_CONTOURS); + skus.add(SKU_FULL_VERSION_PRICE); mHelper.queryInventoryAsync(true, skus, mGotInventoryListener); } else { notifyDismissProgress(); @@ -278,6 +299,12 @@ public class InAppHelper { ctx.getSettings().FULL_VERSION_PURCHASED.set(true); } + Purchase depthContoursPurchase = inventory.getPurchase(SKU_DEPTH_CONTOURS); + mDepthContoursPurchased = isDeveloperVersion || (depthContoursPurchase != null && depthContoursPurchase.getPurchaseState() == 0); + if (mDepthContoursPurchased) { + ctx.getSettings().DEPTH_CONTOURS_PURCHASED.set(true); + } + lastValidationCheckTime = System.currentTimeMillis(); logDebug("User " + (mSubscribedToLiveUpdates ? "HAS" : "DOES NOT HAVE") + " live updates purchased."); @@ -287,6 +314,11 @@ public class InAppHelper { mLiveUpdatesPrice = liveUpdatesDetails.getPrice(); } + if (inventory.hasDetails(SKU_DEPTH_CONTOURS)) { + SkuDetails depthContoursDetails = inventory.getSkuDetails(SKU_DEPTH_CONTOURS); + mDepthContoursPrice = depthContoursDetails.getPrice(); + } + if (inventory.hasDetails(SKU_FULL_VERSION_PRICE)) { SkuDetails fullPriceDetails = inventory.getSkuDetails(SKU_FULL_VERSION_PRICE); mFullVersionPrice = fullPriceDetails.getPrice(); @@ -335,9 +367,9 @@ public class InAppHelper { }; public void purchaseFullVersion(final Activity activity) { - if (mHelper == null || !mHelper.subscriptionsSupported()) { - complain("Subscriptions not supported on your device yet. Sorry!"); - notifyError("Subscriptions not supported on your device yet. Sorry!"); + if (mHelper == null) { + complain("In-app hepler is not initialized!"); + notifyError("In-app hepler is not initialized!"); if (stopAfterResult) { stop(); } @@ -351,6 +383,23 @@ public class InAppHelper { } } + public void purchaseDepthContours(final Activity activity) { + if (mHelper == null) { + complain("In-app hepler is not initialized!"); + notifyError("In-app hepler is not initialized!"); + if (stopAfterResult) { + stop(); + } + return; + } + + logDebug("Launching purchase flow for sea depth contours"); + if (mHelper != null) { + mHelper.launchPurchaseFlow(activity, + SKU_DEPTH_CONTOURS, RC_REQUEST, mPurchaseFinishedListener); + } + } + public void purchaseLiveUpdates(final Activity activity, final String email, final String userName, final String countryDownloadName, final boolean hideUserName) { if (mHelper == null || !mHelper.subscriptionsSupported()) { @@ -504,20 +553,29 @@ public class InAppHelper { if (purchase.getSku().equals(SKU_FULL_VERSION_PRICE)) { // bought full version logDebug("Full version purchased."); - sendToken(purchase.getToken(), new OnRequestResultListener() { - @Override - public void onResult(String result) { - showToast(ctx.getString(R.string.full_version_thanks)); - mFullVersionPurchased = true; - ctx.getSettings().FULL_VERSION_PURCHASED.set(true); + showToast(ctx.getString(R.string.full_version_thanks)); + mFullVersionPurchased = true; + ctx.getSettings().FULL_VERSION_PURCHASED.set(true); - notifyDismissProgress(); - notifyItemPurchased(SKU_FULL_VERSION_PRICE); - if (stopAfterResult) { - stop(); - } - } - }); + notifyDismissProgress(); + notifyItemPurchased(SKU_FULL_VERSION_PRICE); + if (stopAfterResult) { + stop(); + } + } + if (purchase.getSku().equals(SKU_DEPTH_CONTOURS)) { + // bought sea depth contours + logDebug("Sea depth contours purchased."); + showToast(ctx.getString(R.string.sea_depth_thanks)); + mDepthContoursPurchased = true; + ctx.getSettings().DEPTH_CONTOURS_PURCHASED.set(true); + ctx.getSettings().getCustomRenderBooleanProperty("depthContours").set(true); + + notifyDismissProgress(); + notifyItemPurchased(SKU_DEPTH_CONTOURS); + if (stopAfterResult) { + stop(); + } } } }; diff --git a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java index ffcfdc8262..f470d918c7 100644 --- a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java +++ b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java @@ -723,10 +723,10 @@ public class ResourceManager { collectFiles(appPath, IndexConstants.BINARY_MAP_INDEX_EXT, files); renameRoadsFiles(files, roadsPath); collectFiles(roadsPath, IndexConstants.BINARY_MAP_INDEX_EXT, files); - if(!Version.isFreeVersion(context)) { + if (!Version.isFreeVersion(context) || context.getSettings().FULL_VERSION_PURCHASED.get()) { collectFiles(context.getAppPath(IndexConstants.WIKI_INDEX_DIR), IndexConstants.BINARY_MAP_INDEX_EXT, files); } - if(OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) != null) { + if (OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) != null) { collectFiles(context.getAppPath(IndexConstants.SRTM_INDEX_DIR), IndexConstants.BINARY_MAP_INDEX_EXT, files); }