Added new items to free version banner

This commit is contained in:
Alexey Kulish 2016-08-18 22:42:22 +03:00
parent 41d9e92f7c
commit 3c5e9f07c2
6 changed files with 376 additions and 97 deletions

View file

@ -11,6 +11,8 @@
--> -->
<!-- Not translatable --> <!-- Not translatable -->
<string name="full_version_price">€5</string>
<string name="osm_live_price">€1.5</string>
<string name="osm_live">OSM Live (Beta)</string> <string name="osm_live">OSM Live (Beta)</string>
<string name="ga_api_key">UA-28342846-2</string> <string name="ga_api_key">UA-28342846-2</string>
<string name="ga_dispatchPeriod">10</string> <string name="ga_dispatchPeriod">10</string>

View file

@ -9,12 +9,26 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/osmo_header_dark" android:background="@color/osmo_header_dark"
android:orientation="vertical" android:orientation="vertical"
android:theme="@style/FreeVersionBanner">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/list_header_padding" android:paddingBottom="@dimen/list_header_padding"
android:paddingTop="@dimen/list_header_padding">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/bannerTopLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="@dimen/list_content_padding" android:paddingLeft="@dimen/list_content_padding"
android:paddingRight="@dimen/list_content_padding" android:paddingRight="@dimen/list_content_padding">
android:paddingTop="@dimen/list_header_padding"
android:theme="@style/FreeVersionBanner"
tools:showIn="@layout/local_index_fragment_header">
<LinearLayout <LinearLayout
android:id="@+id/freeVersionBannerTitle" android:id="@+id/freeVersionBannerTitle"
@ -64,36 +78,179 @@
android:orientation="horizontal"/> android:orientation="horizontal"/>
</FrameLayout> </FrameLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/priceInfoLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/list_content_padding"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/dashboard_divider_dark"/>
<LinearLayout
android:id="@+id/fullVersionLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/list_content_padding"
android:orientation="horizontal">
<android.support.v7.widget.AppCompatImageView
android:layout_width="54dp"
android:layout_height="32dp"
android:scaleType="center"
android:src="@drawable/ic_action_osmand_logo"
android:tint="@color/osmand_orange"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/list_content_padding"
android:orientation="vertical">
<TextView
android:id="@+id/fullVersionTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="OsmAnd+"
android:textSize="@dimen/default_list_text_size_large"
android:textStyle="bold"/>
<TextView
android:id="@+id/fullVersionDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/osmand_plus_banner_desc"/>
<ProgressBar
android:id="@+id/fullVersionProgress"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginTop="16dp"
android:indeterminate="true"
android:visibility="gone"/>
<android.support.v7.widget.AppCompatButton
android:id="@+id/fullVersionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:background="@drawable/blue_button_drawable"
android:paddingBottom="10dp"
android:paddingLeft="14dp"
android:paddingRight="14dp"
android:paddingTop="10dp"
android:textColor="@color/color_white"
android:visibility="visible"
tools:text="GET FOR E5"/>
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="54dp"
android:layout_marginTop="@dimen/list_content_padding"
android:background="@color/dashboard_divider_dark"/>
<LinearLayout
android:id="@+id/osmLiveLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/list_content_padding"
android:orientation="horizontal">
<android.support.v7.widget.AppCompatImageView
android:layout_width="54dp"
android:layout_height="32dp"
android:scaleType="center"
android:src="@drawable/ic_action_osm_live"
android:tint="@color/osmand_orange"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/list_content_padding"
android:orientation="vertical">
<TextView
android:id="@+id/osmLiveTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/osm_live_subscription"
android:textSize="@dimen/default_list_text_size_large"
android:textStyle="bold"/>
<TextView
android:id="@+id/osmLiveDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/osm_live_banner_desc"/>
<ProgressBar
android:id="@+id/osmLiveProgress"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginTop="16dp"
android:indeterminate="true"
android:visibility="gone"/>
<android.support.v7.widget.AppCompatButton
android:id="@+id/osmLiveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:background="@drawable/blue_button_drawable"
android:paddingBottom="10dp"
android:paddingLeft="14dp"
android:paddingRight="14dp"
android:paddingTop="10dp"
android:textColor="@color/color_white"
tools:text="GET FOR 1,5E PER MONTH"/>
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="54dp"
android:layout_marginTop="@dimen/list_content_padding"
android:background="@color/dashboard_divider_dark"/>
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/buttonsLinearLayout" android:id="@+id/buttonsLinearLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/list_content_padding"> android:layout_marginTop="8dp">
<net.osmand.plus.widgets.ButtonEx <android.support.v7.widget.AppCompatButton
android:id="@+id/getFullVersionButton"
android:layout_width="0dp"
android:layout_height="@dimen/list_header_height"
android:layout_weight="1"
android:background="@drawable/blue_button_drawable"
android:text="@string/get_full_version"
android:textSize="@dimen/default_desc_text_size"
android:textStyle="bold"
osmand:textAllCapsCompat="true"/>
<net.osmand.plus.widgets.ButtonEx
android:id="@+id/laterButton" android:id="@+id/laterButton"
android:layout_width="0dp" style="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog"
android:layout_width="wrap_content"
android:layout_height="@dimen/list_header_height" android:layout_height="@dimen/list_header_height"
android:layout_marginLeft="@dimen/list_content_padding" android:layout_marginLeft="40dp"
android:layout_weight="1"
android:background="@drawable/later_button_drawable"
android:text="@string/later" android:text="@string/later"
android:textSize="@dimen/default_desc_text_size" android:textColor="@color/color_white"
android:textStyle="bold" android:textSize="@dimen/default_desc_text_size"/>
osmand:textAllCapsCompat="true"/>
</LinearLayout> </LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout> </LinearLayout>

View file

@ -9,6 +9,10 @@
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). 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 PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
--> -->
<string name="get_for">Get for %1$s</string>
<string name="get_for_month">Get for %1$s month</string>
<string name="osm_live_banner_desc">Get unlimited map downloads and updates more than once a month: hourly, daily or weekly.</string>
<string name="osmand_plus_banner_desc">Full version of OsmAnd with unlimited map downloads and monthly map updates.</string>
<string name="skip_map_downloading">Skip downloading maps</string> <string name="skip_map_downloading">Skip downloading maps</string>
<string name="skip_map_downloading_desc">You have no offline map installed. You may choose a map from the list or download maps later via Menu - %1$s.</string> <string name="skip_map_downloading_desc">You have no offline map installed. You may choose a map from the list or download maps later via Menu - %1$s.</string>
<string name="search_another_country">Select another region</string> <string name="search_another_country">Select another region</string>

View file

@ -13,16 +13,19 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.annotation.UiThread; import android.support.annotation.UiThread;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback;
import android.support.v4.app.DialogFragment; import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.support.v4.widget.Space; import android.support.v4.widget.Space;
import android.support.v7.widget.AppCompatButton;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.ImageButton; import android.widget.ImageButton;
@ -38,12 +41,9 @@ import net.osmand.access.AccessibilityAssistant;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.PointDescription; import net.osmand.data.PointDescription;
import net.osmand.map.WorldRegion; import net.osmand.map.WorldRegion;
import net.osmand.map.WorldRegion.RegionParams;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings;
import net.osmand.plus.OsmandSettings.DrivingRegion;
import net.osmand.plus.OsmandSettings.MetricsConstants;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.Version; import net.osmand.plus.Version;
import net.osmand.plus.activities.LocalIndexInfo; import net.osmand.plus.activities.LocalIndexInfo;
@ -57,6 +57,9 @@ import net.osmand.plus.download.ui.DataStoragePlaceDialogFragment;
import net.osmand.plus.download.ui.DownloadResourceGroupFragment; import net.osmand.plus.download.ui.DownloadResourceGroupFragment;
import net.osmand.plus.download.ui.LocalIndexesFragment; import net.osmand.plus.download.ui.LocalIndexesFragment;
import net.osmand.plus.download.ui.UpdatesIndexFragment; import net.osmand.plus.download.ui.UpdatesIndexFragment;
import net.osmand.plus.inapp.InAppHelper;
import net.osmand.plus.inapp.InAppHelper.InAppListener;
import net.osmand.plus.liveupdates.OsmLiveActivity;
import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin; import net.osmand.plus.openseamapsplugin.NauticalMapsPlugin;
import net.osmand.plus.srtmplugin.SRTMPlugin; import net.osmand.plus.srtmplugin.SRTMPlugin;
import net.osmand.plus.views.controls.PagerSlidingTabStrip; import net.osmand.plus.views.controls.PagerSlidingTabStrip;
@ -76,7 +79,7 @@ import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
public class DownloadActivity extends AbstractDownloadActivity implements DownloadEvents, public class DownloadActivity extends AbstractDownloadActivity implements DownloadEvents,
ActivityCompat.OnRequestPermissionsResultCallback { OnRequestPermissionsResultCallback, InAppListener {
private static final Log LOG = PlatformUtil.getLog(DownloadActivity.class); private static final Log LOG = PlatformUtil.getLog(DownloadActivity.class);
public static final int UPDATES_TAB_NUMBER = 2; public static final int UPDATES_TAB_NUMBER = 2;
@ -110,6 +113,7 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
private DownloadIndexesThread downloadThread; private DownloadIndexesThread downloadThread;
protected WorldRegion downloadItem; protected WorldRegion downloadItem;
protected String downloadTargetFileName; protected String downloadTargetFileName;
private InAppHelper inAppHelper;
private boolean srtmDisabled; private boolean srtmDisabled;
private boolean srtmNeedsInstallation; private boolean srtmNeedsInstallation;
@ -163,6 +167,14 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
viewPager.setCurrentItem(currentTab); viewPager.setCurrentItem(currentTab);
visibleBanner = new BannerAndDownloadFreeVersion(findViewById(R.id.mainLayout), this, true); visibleBanner = new BannerAndDownloadFreeVersion(findViewById(R.id.mainLayout), this, true);
if (Version.isFreeVersion(getMyApplication()) &&
(!getMyApplication().getSettings().LIVE_UPDATES_PURCHASED.get() || Version.isDeveloperVersion(getMyApplication()))) {
inAppHelper = new InAppHelper(getMyApplication(), true);
inAppHelper.addListener(this);
visibleBanner.setUpdatingPrices(true);
inAppHelper.start(true);
}
final Intent intent = getIntent(); final Intent intent = getIntent();
if (intent != null && intent.getExtras() != null) { if (intent != null && intent.getExtras() != null) {
filter = intent.getExtras().getString(FILTER_KEY); filter = intent.getExtras().getString(FILTER_KEY);
@ -172,6 +184,14 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
showFirstTimeExternalStorage(); showFirstTimeExternalStorage();
} }
@Override
public void onDestroy() {
super.onDestroy();
if (inAppHelper != null) {
inAppHelper.removeListener(this);
}
}
public DownloadIndexesThread getDownloadThread() { public DownloadIndexesThread getDownloadThread() {
return downloadThread; return downloadThread;
} }
@ -247,6 +267,29 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
} }
} }
@Override
public void onError(String error) {
visibleBanner.setUpdatingPrices(false);
visibleBanner.updateFreeVersionBanner();
}
@Override
public void onGetItems() {
visibleBanner.setUpdatingPrices(false);
visibleBanner.updateFreeVersionBanner();
}
@Override
public void onItemPurchased(String sku) {
}
@Override
public void showProgress() {
}
@Override
public void dismissProgress() {
}
@Override @Override
@UiThread @UiThread
@ -287,18 +330,20 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
fragment.show(activity.getSupportFragmentManager(), "dialog"); fragment.show(activity.getSupportFragmentManager(), "dialog");
} }
private static class ToggleCollapseFreeVersionBanner implements View.OnClickListener { private static class ToggleCollapseFreeVersionBanner implements OnClickListener {
private final View freeVersionDescriptionTextView; private final View freeVersionDescriptionTextView;
private final View buttonsLinearLayout; private final View buttonsLinearLayout;
private final View freeVersionTitle; private final View freeVersionTitle;
private final View priceInfoLayout;
private final OsmandSettings settings; private final OsmandSettings settings;
private ToggleCollapseFreeVersionBanner(View freeVersionDescriptionTextView, private ToggleCollapseFreeVersionBanner(View freeVersionDescriptionTextView,
View buttonsLinearLayout, View freeVersionTitle, View buttonsLinearLayout, View freeVersionTitle,
OsmandSettings settings) { View priceInfoLayout, OsmandSettings settings) {
this.freeVersionDescriptionTextView = freeVersionDescriptionTextView; this.freeVersionDescriptionTextView = freeVersionDescriptionTextView;
this.buttonsLinearLayout = buttonsLinearLayout; this.buttonsLinearLayout = buttonsLinearLayout;
this.freeVersionTitle = freeVersionTitle; this.freeVersionTitle = freeVersionTitle;
this.priceInfoLayout = priceInfoLayout;
this.settings = settings; this.settings = settings;
} }
@ -309,10 +354,12 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
&& isDownlodingPermitted(settings)) { && isDownlodingPermitted(settings)) {
freeVersionDescriptionTextView.setVisibility(View.GONE); freeVersionDescriptionTextView.setVisibility(View.GONE);
buttonsLinearLayout.setVisibility(View.GONE); buttonsLinearLayout.setVisibility(View.GONE);
priceInfoLayout.setVisibility(View.GONE);
} else { } else {
freeVersionDescriptionTextView.setVisibility(View.VISIBLE); freeVersionDescriptionTextView.setVisibility(View.VISIBLE);
buttonsLinearLayout.setVisibility(View.VISIBLE); buttonsLinearLayout.setVisibility(View.VISIBLE);
freeVersionTitle.setVisibility(View.VISIBLE); freeVersionTitle.setVisibility(View.VISIBLE);
priceInfoLayout.setVisibility(View.VISIBLE);
} }
} }
} }
@ -331,15 +378,21 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
private final TextView rightTextView; private final TextView rightTextView;
private final ProgressBar downloadsLeftProgressBar; private final ProgressBar downloadsLeftProgressBar;
private final View buttonsLinearLayout; private final View buttonsLinearLayout;
private final View priceInfoLayout;
private final TextView freeVersionDescriptionTextView; private final TextView freeVersionDescriptionTextView;
private final TextView downloadsLeftTextView; private final TextView downloadsLeftTextView;
private final View laterButton; private final View laterButton;
private final View fullVersionProgress;
private final AppCompatButton fullVersionButton;
private final View osmLiveProgress;
private final AppCompatButton osmLiveButton;
private final DownloadActivity ctx; private final DownloadActivity ctx;
private final OsmandApplication application; private final OsmandApplication application;
private final boolean shouldShowFreeVersionBanner; private final boolean shouldShowFreeVersionBanner;
private final View freeVersionBannerTitle; private final View freeVersionBannerTitle;
private boolean showSpace; private boolean showSpace;
private boolean updatingPrices;
public BannerAndDownloadFreeVersion(View view, final DownloadActivity ctx, boolean showSpace) { public BannerAndDownloadFreeVersion(View view, final DownloadActivity ctx, boolean showSpace) {
this.ctx = ctx; this.ctx = ctx;
@ -353,11 +406,17 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
downloadsLeftTextView = (TextView) freeVersionBanner.findViewById(R.id.downloadsLeftTextView); downloadsLeftTextView = (TextView) freeVersionBanner.findViewById(R.id.downloadsLeftTextView);
downloadsLeftProgressBar = (ProgressBar) freeVersionBanner.findViewById(R.id.downloadsLeftProgressBar); downloadsLeftProgressBar = (ProgressBar) freeVersionBanner.findViewById(R.id.downloadsLeftProgressBar);
buttonsLinearLayout = freeVersionBanner.findViewById(R.id.buttonsLinearLayout); buttonsLinearLayout = freeVersionBanner.findViewById(R.id.buttonsLinearLayout);
priceInfoLayout = freeVersionBanner.findViewById(R.id.priceInfoLayout);
freeVersionDescriptionTextView = (TextView) freeVersionBanner freeVersionDescriptionTextView = (TextView) freeVersionBanner
.findViewById(R.id.freeVersionDescriptionTextView); .findViewById(R.id.freeVersionDescriptionTextView);
laterButton = freeVersionBanner.findViewById(R.id.laterButton); laterButton = freeVersionBanner.findViewById(R.id.laterButton);
freeVersionBannerTitle = freeVersionBanner.findViewById(R.id.freeVersionBannerTitle); freeVersionBannerTitle = freeVersionBanner.findViewById(R.id.freeVersionBannerTitle);
fullVersionProgress = freeVersionBanner.findViewById(R.id.fullVersionProgress);
fullVersionButton = (AppCompatButton) freeVersionBanner.findViewById(R.id.fullVersionButton);
osmLiveProgress = freeVersionBanner.findViewById(R.id.osmLiveProgress);
osmLiveButton = (AppCompatButton) freeVersionBanner.findViewById(R.id.osmLiveButton);
shouldShowFreeVersionBanner = shouldShowFreeVersionBanner =
(Version.isFreeVersion(application) && !application.getSettings().LIVE_UPDATES_PURCHASED.get()) (Version.isFreeVersion(application) && !application.getSettings().LIVE_UPDATES_PURCHASED.get())
|| application.getSettings().SHOULD_SHOW_FREE_VERSION_BANNER.get(); || application.getSettings().SHOULD_SHOW_FREE_VERSION_BANNER.get();
@ -366,6 +425,14 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
updateBannerInProgress(); updateBannerInProgress();
} }
public boolean isUpdatingPrices() {
return updatingPrices;
}
public void setUpdatingPrices(boolean updatingPrices) {
this.updatingPrices = updatingPrices;
}
public void updateBannerInProgress() { public void updateBannerInProgress() {
BasicProgressAsyncTask<?, ?, ?, ?> basicProgressAsyncTask = ctx.getDownloadThread().getCurrentRunningTask(); BasicProgressAsyncTask<?, ?, ?, ?> basicProgressAsyncTask = ctx.getDownloadThread().getCurrentRunningTask();
final boolean isFinished = basicProgressAsyncTask == null final boolean isFinished = basicProgressAsyncTask == null
@ -387,7 +454,7 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
updateAvailableDownloads(); updateAvailableDownloads();
downloadProgressLayout.setVisibility(View.VISIBLE); downloadProgressLayout.setVisibility(View.VISIBLE);
downloadProgressLayout.setOnClickListener(new View.OnClickListener() { downloadProgressLayout.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
new ActiveDownloadsDialogFragment().show(ctx.getSupportFragmentManager(), "dialog"); new ActiveDownloadsDialogFragment().show(ctx.getSupportFragmentManager(), "dialog");
@ -423,7 +490,7 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
downloadsLeftProgressBar.setMax(DownloadValidationManager.MAXIMUM_AVAILABLE_FREE_DOWNLOADS); downloadsLeftProgressBar.setMax(DownloadValidationManager.MAXIMUM_AVAILABLE_FREE_DOWNLOADS);
freeVersionDescriptionTextView.setText(ctx.getString(R.string.free_version_message, freeVersionDescriptionTextView.setText(ctx.getString(R.string.free_version_message,
DownloadValidationManager.MAXIMUM_AVAILABLE_FREE_DOWNLOADS)); DownloadValidationManager.MAXIMUM_AVAILABLE_FREE_DOWNLOADS));
freeVersionBanner.findViewById(R.id.getFullVersionButton).setOnClickListener(new View.OnClickListener() { fullVersionButton.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(Version.marketPrefix( Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(Version.marketPrefix(
@ -435,9 +502,17 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
} }
} }
}); });
osmLiveButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ctx, OsmLiveActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
ctx.startActivity(intent);
}
});
ToggleCollapseFreeVersionBanner clickListener = ToggleCollapseFreeVersionBanner clickListener =
new ToggleCollapseFreeVersionBanner(freeVersionDescriptionTextView, new ToggleCollapseFreeVersionBanner(freeVersionDescriptionTextView,
buttonsLinearLayout, freeVersionBannerTitle, application.getSettings()); buttonsLinearLayout, freeVersionBannerTitle, priceInfoLayout, application.getSettings());
laterButton.setOnClickListener(clickListener); laterButton.setOnClickListener(clickListener);
LinearLayout marksLinearLayout = (LinearLayout) freeVersionBanner.findViewById(R.id.marksLinearLayout); LinearLayout marksLinearLayout = (LinearLayout) freeVersionBanner.findViewById(R.id.marksLinearLayout);
@ -479,8 +554,27 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
laterButton.setVisibility(View.GONE); laterButton.setVisibility(View.GONE);
} }
downloadsLeftTextView.setText(ctx.getString(R.string.downloads_left_template, downloadsLeft)); downloadsLeftTextView.setText(ctx.getString(R.string.downloads_left_template, downloadsLeft));
freeVersionBanner.setOnClickListener(new ToggleCollapseFreeVersionBanner(freeVersionDescriptionTextView, freeVersionBanner.findViewById(R.id.bannerTopLayout).setOnClickListener(new ToggleCollapseFreeVersionBanner(freeVersionDescriptionTextView,
buttonsLinearLayout, freeVersionBannerTitle, settings)); buttonsLinearLayout, freeVersionBannerTitle, priceInfoLayout, settings));
if (InAppHelper.hasPrices() || !updatingPrices) {
if (!InAppHelper.hasPrices()) {
fullVersionButton.setText(ctx.getString(R.string.get_for, ctx.getString(R.string.full_version_price)));
osmLiveButton.setText(ctx.getString(R.string.get_for_month, ctx.getString(R.string.osm_live_price)));
} else {
fullVersionButton.setText(ctx.getString(R.string.get_for, InAppHelper.getFullVersionPrice()));
osmLiveButton.setText(ctx.getString(R.string.get_for_month, InAppHelper.getLiveUpdatesPrice()));
}
fullVersionProgress.setVisibility(View.GONE);
fullVersionButton.setVisibility(View.VISIBLE);
osmLiveProgress.setVisibility(View.GONE);
osmLiveButton.setVisibility(View.VISIBLE);
} else {
fullVersionProgress.setVisibility(View.VISIBLE);
fullVersionButton.setVisibility(View.GONE);
osmLiveProgress.setVisibility(View.VISIBLE);
osmLiveButton.setVisibility(View.GONE);
}
} }
private void updateAvailableDownloads() { private void updateAvailableDownloads() {
@ -495,10 +589,12 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
freeVersionDescriptionTextView.setVisibility(View.GONE); freeVersionDescriptionTextView.setVisibility(View.GONE);
buttonsLinearLayout.setVisibility(View.GONE); buttonsLinearLayout.setVisibility(View.GONE);
freeVersionBannerTitle.setVisibility(View.GONE); freeVersionBannerTitle.setVisibility(View.GONE);
priceInfoLayout.setVisibility(View.GONE);
} else { } else {
freeVersionDescriptionTextView.setVisibility(View.VISIBLE); freeVersionDescriptionTextView.setVisibility(View.VISIBLE);
buttonsLinearLayout.setVisibility(View.VISIBLE); buttonsLinearLayout.setVisibility(View.VISIBLE);
freeVersionBannerTitle.setVisibility(View.VISIBLE); freeVersionBannerTitle.setVisibility(View.VISIBLE);
priceInfoLayout.setVisibility(View.VISIBLE);
} }
} }
} }
@ -727,14 +823,14 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
final ImageButton closeImageButton = (ImageButton) view.findViewById(R.id.closeImageButton); final ImageButton closeImageButton = (ImageButton) view.findViewById(R.id.closeImageButton);
closeImageButton.setImageDrawable(getContentIcon(R.drawable.ic_action_remove_dark)); closeImageButton.setImageDrawable(getContentIcon(R.drawable.ic_action_remove_dark));
closeImageButton.setOnClickListener(new View.OnClickListener() { closeImageButton.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
dismiss(); dismiss();
} }
}); });
actionButtonOk.setOnClickListener(new View.OnClickListener() { actionButtonOk.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (indexItem != null) { if (indexItem != null) {
@ -745,7 +841,7 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
}); });
view.findViewById(R.id.actionButtonCancel) view.findViewById(R.id.actionButtonCancel)
.setOnClickListener(new View.OnClickListener() { .setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
dismiss(); dismiss();
@ -794,7 +890,7 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
final ImageButton closeImageButton = (ImageButton) view.findViewById(R.id.closeImageButton); final ImageButton closeImageButton = (ImageButton) view.findViewById(R.id.closeImageButton);
closeImageButton.setImageDrawable(getContentIcon(R.drawable.ic_action_remove_dark)); closeImageButton.setImageDrawable(getContentIcon(R.drawable.ic_action_remove_dark));
closeImageButton.setOnClickListener(new View.OnClickListener() { closeImageButton.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (getActivity() instanceof DownloadActivity) { if (getActivity() instanceof DownloadActivity) {
@ -805,7 +901,7 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
}); });
view.findViewById(R.id.actionButton) view.findViewById(R.id.actionButton)
.setOnClickListener(new View.OnClickListener() { .setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
OsmandApplication app = (OsmandApplication) getActivity().getApplication(); OsmandApplication app = (OsmandApplication) getActivity().getApplication();

View file

@ -38,7 +38,9 @@ public class InAppHelper {
private static boolean mSubscribedToLiveUpdates = false; private static boolean mSubscribedToLiveUpdates = false;
private static String mLiveUpdatesPrice; private static String mLiveUpdatesPrice;
private static long lastValidationCheckTime; private static long lastValidationCheckTime;
private static String mFullVersionPrice;
private 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_FULL = "osm_live_subscription_2";
private static final String SKU_LIVE_UPDATES_FREE = "osm_free_live_subscription_2"; private static final String SKU_LIVE_UPDATES_FREE = "osm_free_live_subscription_2";
private static String SKU_LIVE_UPDATES; private static String SKU_LIVE_UPDATES;
@ -51,6 +53,7 @@ public class InAppHelper {
private IabHelper mHelper; private IabHelper mHelper;
private boolean stopAfterResult = false; private boolean stopAfterResult = false;
private boolean isDeveloperVersion = false; private boolean isDeveloperVersion = false;
private boolean forceRequestInventory = false;
private String token = ""; private String token = "";
private OsmandApplication ctx; private OsmandApplication ctx;
@ -80,12 +83,21 @@ public class InAppHelper {
return mLiveUpdatesPrice; return mLiveUpdatesPrice;
} }
public static String getFullVersionPrice() {
return mFullVersionPrice;
}
public static String getSkuLiveUpdates() { public static String getSkuLiveUpdates() {
return SKU_LIVE_UPDATES; return SKU_LIVE_UPDATES;
} }
public InAppHelper(OsmandApplication ctx) { public static boolean hasPrices() {
return !Algorithms.isEmpty(mLiveUpdatesPrice) && !Algorithms.isEmpty(mFullVersionPrice);
}
public InAppHelper(OsmandApplication ctx, boolean forceRequestInventory) {
this.ctx = ctx; this.ctx = ctx;
this.forceRequestInventory = forceRequestInventory;
if (SKU_LIVE_UPDATES == null) { if (SKU_LIVE_UPDATES == null) {
if (Version.isFreeVersion(ctx)) { if (Version.isFreeVersion(ctx)) {
SKU_LIVE_UPDATES = SKU_LIVE_UPDATES_FREE; SKU_LIVE_UPDATES = SKU_LIVE_UPDATES_FREE;
@ -148,14 +160,17 @@ public class InAppHelper {
if (mHelper == null) return; if (mHelper == null) return;
// IAB is fully set up. Now, let's get an inventory of stuff we own if needed. // IAB is fully set up. Now, let's get an inventory of stuff we own if needed.
if (!isDeveloperVersion && if (forceRequestInventory || (!isDeveloperVersion &&
(!mSubscribedToLiveUpdates (!mSubscribedToLiveUpdates
|| !ctx.getSettings().BILLING_PURCHASE_TOKEN_SENT.get() || !ctx.getSettings().BILLING_PURCHASE_TOKEN_SENT.get()
|| System.currentTimeMillis() - lastValidationCheckTime > PURCHASE_VALIDATION_PERIOD_MSEC)) { || System.currentTimeMillis() - lastValidationCheckTime > PURCHASE_VALIDATION_PERIOD_MSEC))) {
logDebug("Setup successful. Querying inventory."); logDebug("Setup successful. Querying inventory.");
List<String> skus = new ArrayList<>(); List<String> skus = new ArrayList<>();
skus.add(SKU_LIVE_UPDATES); skus.add(SKU_LIVE_UPDATES);
if (forceRequestInventory) {
skus.add(SKU_FULL_VERSION_PRICE);
}
mHelper.queryInventoryAsync(true, skus, mGotInventoryListener); mHelper.queryInventoryAsync(true, skus, mGotInventoryListener);
} else { } else {
notifyDismissProgress(); notifyDismissProgress();
@ -195,7 +210,7 @@ public class InAppHelper {
// Do we have the live updates? // Do we have the live updates?
Purchase liveUpdatesPurchase = inventory.getPurchase(SKU_LIVE_UPDATES); Purchase liveUpdatesPurchase = inventory.getPurchase(SKU_LIVE_UPDATES);
mSubscribedToLiveUpdates = (liveUpdatesPurchase != null && liveUpdatesPurchase.getPurchaseState() == 0); mSubscribedToLiveUpdates = isDeveloperVersion || (liveUpdatesPurchase != null && liveUpdatesPurchase.getPurchaseState() == 0);
if (mSubscribedToLiveUpdates) { if (mSubscribedToLiveUpdates) {
ctx.getSettings().LIVE_UPDATES_PURCHASED.set(true); ctx.getSettings().LIVE_UPDATES_PURCHASED.set(true);
} }
@ -208,8 +223,13 @@ public class InAppHelper {
mLiveUpdatesPrice = liveUpdatesDetails.getPrice(); mLiveUpdatesPrice = liveUpdatesDetails.getPrice();
} }
if (inventory.hasDetails(SKU_FULL_VERSION_PRICE)) {
SkuDetails fullPriceDetails = inventory.getSkuDetails(SKU_FULL_VERSION_PRICE);
mFullVersionPrice = fullPriceDetails.getPrice();
}
boolean needSendToken = false; boolean needSendToken = false;
if (liveUpdatesPurchase != null) { if (!isDeveloperVersion && liveUpdatesPurchase != null) {
OsmandSettings settings = ctx.getSettings(); OsmandSettings settings = ctx.getSettings();
if (Algorithms.isEmpty(settings.BILLING_USER_ID.get()) if (Algorithms.isEmpty(settings.BILLING_USER_ID.get())
&& !Algorithms.isEmpty(liveUpdatesPurchase.getDeveloperPayload())) { && !Algorithms.isEmpty(liveUpdatesPurchase.getDeveloperPayload())) {

View file

@ -35,7 +35,7 @@ public class OsmLiveActivity extends AbstractDownloadActivity
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_livie_updates); setContentView(R.layout.activity_livie_updates);
inAppHelper = new InAppHelper(getMyApplication()); inAppHelper = new InAppHelper(getMyApplication(), false);
if (Version.isDeveloperVersion(getMyApplication())) { if (Version.isDeveloperVersion(getMyApplication())) {
inAppHelper = null; inAppHelper = null;
} }