diff --git a/android-app/src/main/AndroidManifest.xml b/android-app/src/main/AndroidManifest.xml index 6935051a..e5581a6d 100644 --- a/android-app/src/main/AndroidManifest.xml +++ b/android-app/src/main/AndroidManifest.xml @@ -71,7 +71,7 @@ - + diff --git a/android-app/src/main/java/org/solovyev/android/calculator/ActivityUi.java b/android-app/src/main/java/org/solovyev/android/calculator/ActivityUi.java index e27e2f45..788666d8 100644 --- a/android-app/src/main/java/org/solovyev/android/calculator/ActivityUi.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/ActivityUi.java @@ -328,10 +328,18 @@ public class ActivityUi extends BaseUi { } public void onStop(@Nonnull Activity activity) { + reportActivityStop(activity); + } + + public static void reportActivityStop(@Nonnull Activity activity) { App.getGa().getAnalytics().reportActivityStop(activity); } public void onStart(@Nonnull Activity activity) { + reportActivityStart(activity); + } + + public static void reportActivityStart(@Nonnull Activity activity) { App.getGa().getAnalytics().reportActivityStart(activity); } } diff --git a/android-app/src/main/java/org/solovyev/android/calculator/App.java b/android-app/src/main/java/org/solovyev/android/calculator/App.java index 5b51d7a7..6083570b 100644 --- a/android-app/src/main/java/org/solovyev/android/calculator/App.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/App.java @@ -27,6 +27,7 @@ import android.content.SharedPreferences; import android.preference.PreferenceManager; import org.solovyev.android.UiThreadExecutor; import org.solovyev.android.calculator.ga.Ga; +import org.solovyev.android.checkout.*; import org.solovyev.common.listeners.JEvent; import org.solovyev.common.listeners.JEventListener; import org.solovyev.common.listeners.JEventListeners; @@ -35,6 +36,8 @@ import org.solovyev.common.threads.DelayedExecutor; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.Arrays; +import java.util.concurrent.Executor; /** * User: serso @@ -81,6 +84,12 @@ public final class App { @Nonnull private static volatile Ga ga; + @Nonnull + private static volatile Billing billing; + + @Nonnull + private static final Products products = Products.create().add(ProductTypes.IN_APP, Arrays.asList("ad_free")); + private App() { throw new AssertionError(); } @@ -111,6 +120,23 @@ public final class App { App.uiThreadExecutor = uiThreadExecutor; App.eventBus = eventBus; App.ga = new Ga(application, preferences, eventBus); + App.billing = new Billing(application, new Billing.DefaultConfiguration() { + @Nonnull + @Override + public String getPublicKey() { + return CalculatorSecurity.getPK(); + } + + @Nullable + @Override + public Inventory getFallbackInventory(@Nonnull Checkout checkout, @Nonnull Executor onLoadExecutor) { + if (RobotmediaDatabase.exists(billing.getContext())) { + return new RobotmediaInventory(checkout, onLoadExecutor); + } else { + return null; + } + } + }); if (serviceLocator != null) { App.locator = serviceLocator; } else { @@ -178,4 +204,14 @@ public final class App { public static Ga getGa() { return ga; } + + @Nonnull + public static Billing getBilling() { + return billing; + } + + @Nonnull + public static Products getProducts() { + return products; + } } diff --git a/android-app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java index 55380525..89a362aa 100644 --- a/android-app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java @@ -105,25 +105,6 @@ public class CalculatorApplication extends android.app.Application implements Sh @Nonnull private Typeface typeFace; - @Nonnull - private final Billing billing = new Billing(this, new Billing.DefaultConfiguration() { - @Nonnull - @Override - public String getPublicKey() { - return CalculatorSecurity.getPK(); - } - - @Nullable - @Override - public Inventory getFallbackInventory(@Nonnull Checkout checkout, @Nonnull Executor onLoadExecutor) { - if (RobotmediaDatabase.exists(billing.getContext())) { - return new RobotmediaInventory(checkout, onLoadExecutor); - } else { - return null; - } - } - }); - /* ********************************************************************** * @@ -200,7 +181,7 @@ public class CalculatorApplication extends android.app.Application implements Sh Locator.getInstance().getCalculator().init(); - billing.connect(); + App.getBilling().connect(); new Thread(new Runnable() { @Override @@ -265,11 +246,6 @@ public class CalculatorApplication extends android.app.Application implements Sh return typeFace; } - @Nonnull - public Billing getBilling() { - return billing; - } - /* ********************************************************************** * diff --git a/android-app/src/main/java/org/solovyev/android/calculator/FragmentUi.java b/android-app/src/main/java/org/solovyev/android/calculator/FragmentUi.java index 8ad2772b..c2781e40 100644 --- a/android-app/src/main/java/org/solovyev/android/calculator/FragmentUi.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/FragmentUi.java @@ -28,15 +28,15 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import org.solovyev.android.checkout.*; +import org.solovyev.android.checkout.ActivityCheckout; +import org.solovyev.android.checkout.Checkout; +import org.solovyev.android.checkout.Inventory; +import org.solovyev.android.checkout.ProductTypes; import javax.annotation.Nonnull; import javax.annotation.Nullable; - import java.util.Locale; -import static java.util.Arrays.asList; - /** * User: serso * Date: 9/26/12 @@ -91,7 +91,7 @@ public class FragmentUi extends BaseUi { public void onCreate(@Nonnull Fragment fragment) { final FragmentActivity activity = fragment.getActivity(); super.onCreate(activity); - checkout = Checkout.forActivity(activity, CalculatorApplication.getInstance().getBilling(), Products.create().add(ProductTypes.IN_APP, asList("ad_free"))); + checkout = Checkout.forActivity(activity, App.getBilling(), App.getProducts()); if (listenersOnCreate) { if (fragment instanceof CalculatorEventListener) { diff --git a/android-app/src/main/java/org/solovyev/android/calculator/preferences/BasePreferencesActivity.java b/android-app/src/main/java/org/solovyev/android/calculator/preferences/BasePreferencesActivity.java index c1fafefa..fdad814e 100644 --- a/android-app/src/main/java/org/solovyev/android/calculator/preferences/BasePreferencesActivity.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/preferences/BasePreferencesActivity.java @@ -4,18 +4,20 @@ import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import com.actionbarsherlock.app.SherlockPreferenceActivity; +import org.solovyev.android.calculator.ActivityUi; import org.solovyev.android.calculator.AdView; -import org.solovyev.android.calculator.CalculatorApplication; +import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.R; -import org.solovyev.android.checkout.*; +import org.solovyev.android.checkout.ActivityCheckout; +import org.solovyev.android.checkout.Checkout; +import org.solovyev.android.checkout.Inventory; +import org.solovyev.android.checkout.ProductTypes; import javax.annotation.Nonnull; -import static java.util.Arrays.asList; - public abstract class BasePreferencesActivity extends SherlockPreferenceActivity { - private final ActivityCheckout checkout = Checkout.forActivity(this, CalculatorApplication.getInstance().getBilling(), Products.create().add(ProductTypes.IN_APP, asList("ad_free"))); + private final ActivityCheckout checkout = Checkout.forActivity(this, App.getBilling(), App.getProducts()); private Inventory inventory; private AdView adView; @@ -73,6 +75,18 @@ public abstract class BasePreferencesActivity extends SherlockPreferenceActivity inventory.whenLoaded(new InventoryListener()); } + @Override + protected void onStart() { + super.onStart(); + ActivityUi.reportActivityStart(this); + } + + @Override + protected void onStop() { + ActivityUi.reportActivityStop(this); + super.onStop(); + } + @Override protected void onPause() { if (adView != null) { diff --git a/android-app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java b/android-app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java index 6e52e7c2..4cf356f4 100644 --- a/android-app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java @@ -91,7 +91,7 @@ public class PreferencesActivity extends BasePreferencesActivity implements Shar adFreePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - startActivity(new Intent(getApplicationContext(), CalculatorPurchaseDialogActivity.class)); + startActivity(new Intent(getApplicationContext(), PurchaseDialogActivity.class)); return true; } }); diff --git a/android-app/src/main/java/org/solovyev/android/calculator/preferences/CalculatorPurchaseDialogActivity.java b/android-app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java similarity index 87% rename from android-app/src/main/java/org/solovyev/android/calculator/preferences/CalculatorPurchaseDialogActivity.java rename to android-app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java index 5a9b204f..e2f2e946 100644 --- a/android-app/src/main/java/org/solovyev/android/calculator/preferences/CalculatorPurchaseDialogActivity.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java @@ -29,10 +29,7 @@ import android.text.method.ScrollingMovementMethod; import android.view.View; import android.widget.TextView; import com.actionbarsherlock.app.SherlockFragmentActivity; -import org.solovyev.android.calculator.CalculatorApplication; -import org.solovyev.android.calculator.CalculatorFragment; -import org.solovyev.android.calculator.CalculatorFragmentType; -import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.*; import org.solovyev.android.checkout.*; import org.solovyev.android.fragments.FragmentUtils; @@ -44,10 +41,10 @@ import javax.annotation.Nullable; * Date: 1/20/13 * Time: 2:36 PM */ -public class CalculatorPurchaseDialogActivity extends SherlockFragmentActivity { +public class PurchaseDialogActivity extends SherlockFragmentActivity { @Nonnull - private final ActivityCheckout checkout = Checkout.forActivity(this, CalculatorApplication.getInstance().getBilling(), Products.create().add("ad_free")); + private final ActivityCheckout checkout = Checkout.forActivity(this, App.getBilling(), App.getProducts()); @Nonnull private final RequestListener purchaseListener = new RequestListener() { @@ -90,13 +87,25 @@ public class CalculatorPurchaseDialogActivity extends SherlockFragmentActivity { public void onClick(View v) { final Activity activity = getActivity(); if (activity != null) { - ((CalculatorPurchaseDialogActivity) activity).purchase(); + ((PurchaseDialogActivity) activity).purchase(); } } }); } } + @Override + protected void onStart() { + super.onStart(); + ActivityUi.reportActivityStart(this); + } + + @Override + protected void onStop() { + ActivityUi.reportActivityStop(this); + super.onStop(); + } + private void purchase() { checkout.whenReady(new Checkout.ListenerAdapter() { @Override diff --git a/android-app/src/main/java/org/solovyev/android/calculator/wizard/FinalWizardStep.java b/android-app/src/main/java/org/solovyev/android/calculator/wizard/FinalWizardStep.java index 700212a5..cff8bf85 100644 --- a/android-app/src/main/java/org/solovyev/android/calculator/wizard/FinalWizardStep.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/wizard/FinalWizardStep.java @@ -9,7 +9,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; import org.solovyev.android.calculator.R; -import org.solovyev.android.calculator.preferences.CalculatorPurchaseDialogActivity; +import org.solovyev.android.calculator.preferences.PurchaseDialogActivity; import static android.content.Intent.ACTION_VIEW; @@ -35,7 +35,7 @@ public class FinalWizardStep extends Fragment { donateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - startActivity(new Intent(getActivity(), CalculatorPurchaseDialogActivity.class)); + startActivity(new Intent(getActivity(), PurchaseDialogActivity.class)); } });