From 0d6656f52cbdb418091949a7cf05bca233ab7948 Mon Sep 17 00:00:00 2001 From: Sergey Solovyev Date: Thu, 5 Jan 2012 19:09:33 +0400 Subject: [PATCH] ads + billing + fix for MiOne devices' tabs --- res/values-ru/text_about.xml | 2 +- .../org/solovyev/android/AndroidUtils.java | 58 +++++++++++------ .../calculator/CalculatorActivity.java | 14 ++++ .../calculator/CalculatorApplication.java | 18 +++--- .../calculator/CalculatorBillingObserver.java | 40 ++++++++++++ .../CalculatorPreferencesActivity.java | 61 +++++++++++++++++- src/misc/lib/AndroidBillingLibrary.jar | Bin 52684 -> 53074 bytes src/misc/res/logoFULL_banner.png | Bin 0 -> 15788 bytes 8 files changed, 163 insertions(+), 30 deletions(-) create mode 100644 src/main/java/org/solovyev/android/calculator/CalculatorBillingObserver.java create mode 100644 src/misc/res/logoFULL_banner.png diff --git a/res/values-ru/text_about.xml b/res/values-ru/text_about.xml index da8b1886..4ffb1f8a 100644 --- a/res/values-ru/text_about.xml +++ b/res/values-ru/text_about.xml @@ -144,7 +144,7 @@ так как приложение стало довольно большим и сложным.\n Если вы хотите поддержать проект и избавиться от рекламы, вы можете купить специальную опцию в настройках приложения,\n если вы не хотите или не можете этого сделать - вы всё равно можете отблагодарить автора программы по почте: se.solovyev@gmail.com, высоко оценить приложение на андроид.маркете\n - или помочь в переводе приложения на свой роной язык. + или помочь в переводе приложения на свой родной язык. \ No newline at end of file diff --git a/src/main/java/org/solovyev/android/AndroidUtils.java b/src/main/java/org/solovyev/android/AndroidUtils.java index 8dca9fea..2822c921 100644 --- a/src/main/java/org/solovyev/android/AndroidUtils.java +++ b/src/main/java/org/solovyev/android/AndroidUtils.java @@ -10,6 +10,8 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.os.Build; +import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -35,33 +37,51 @@ public final class AndroidUtils { } public static void centerAndWrapTabsFor(@NotNull TabHost tabHost) { - int tabCount = tabHost.getTabWidget().getTabCount(); - for (int i = 0; i < tabCount; i++) { - final View view = tabHost.getTabWidget().getChildTabViewAt(i); - if (view != null) { - if (view.getLayoutParams().height > 0) { - // reduce height of the tab - view.getLayoutParams().height *= 0.8; - } + if (allowCenterAndWrappingTabs()) { + int tabCount = tabHost.getTabWidget().getTabCount(); + for (int i = 0; i < tabCount; i++) { + final View view = tabHost.getTabWidget().getChildTabViewAt(i); + if (view != null) { + if (view.getLayoutParams().height > 0) { + // reduce height of the tab + view.getLayoutParams().height *= 0.8; + } - // get title text view - final View textView = view.findViewById(android.R.id.title); - if (textView instanceof TextView) { - // just in case check the type + // get title text view + final View textView = view.findViewById(android.R.id.title); + if (textView instanceof TextView) { + // just in case check the type - // center text - ((TextView) textView).setGravity(Gravity.CENTER); - // wrap text - ((TextView) textView).setSingleLine(false); + // center text + ((TextView) textView).setGravity(Gravity.CENTER); + // wrap text + ((TextView) textView).setSingleLine(false); - // explicitly set layout parameters - textView.getLayoutParams().height = ViewGroup.LayoutParams.FILL_PARENT; - textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; + // explicitly set layout parameters + textView.getLayoutParams().height = ViewGroup.LayoutParams.FILL_PARENT; + textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; + } } } } } + private static boolean allowCenterAndWrappingTabs() { + boolean result = true; + + String deviceModel = Build.MODEL; + if (deviceModel != null) { + deviceModel = deviceModel.toUpperCase(); + if (deviceModel.contains("M1") || deviceModel.contains("MIONE") || deviceModel.contains("MI-ONE")) { + // Xiaomi Phone MiOne => do not allow to center and wrap tabs + result = false; + Log.i(AndroidUtils.class.getName(), "Device model doesn't support center and wrap of tabs: " + Build.MODEL); + } + } + + return result; + } + public static void addTab(@NotNull Context context, @NotNull TabHost tabHost, @NotNull String tabId, diff --git a/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java b/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java index 22902526..b36b92b1 100644 --- a/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java +++ b/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java @@ -26,6 +26,8 @@ import android.widget.TextView; import com.google.ads.AdView; import jscl.AngleUnit; import jscl.NumeralBase; +import net.robotmedia.billing.BillingController; +import net.robotmedia.billing.IBillingObserver; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.solovyev.android.AndroidUtils; @@ -53,6 +55,9 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh private static final int HVGA_WIDTH_PIXELS = 320; + @Nullable + private IBillingObserver billingObserver; + public static class Preferences { @NotNull private static final String APP_VERSION_P_KEY = "application.version"; @@ -377,6 +382,10 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh private synchronized void firstTimeInit(@NotNull SharedPreferences preferences) { if (!initialized) { + billingObserver = new CalculatorBillingObserver(this); + BillingController.registerObserver(billingObserver); + BillingController.checkBillingSupported(this); + final int savedVersion = Preferences.appVersion.getPreference(preferences); final int appVersion = AndroidUtils.getAppVersionCode(this, CalculatorActivity.class.getPackage().getName()); @@ -627,6 +636,11 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh if ( adView != null ) { adView.destroy(); } + + if (billingObserver != null) { + BillingController.unregisterObserver(billingObserver); + } + super.onDestroy(); } diff --git a/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java b/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java index 8496ab2a..87813353 100644 --- a/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java +++ b/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java @@ -36,20 +36,24 @@ public class CalculatorApplication extends android.app.Application { return instance; } - public static boolean isAdFreeApprox(@NotNull Context context) { + private static boolean isAdFreePurchased(@NotNull Context context) { return BillingController.isPurchased(context.getApplicationContext(), AD_FREE_PRODUCT_ID); } + private static boolean transactionsRestored = false; + public static boolean isAdFree(@NotNull Context context) { // check if user already bought this product - boolean purchased = isAdFreeApprox(context); - if (!purchased) { + boolean purchased = isAdFreePurchased(context); + if (!purchased && !transactionsRestored) { // we must to restore all transactions done by user to guarantee that product was purchased or not BillingController.restoreTransactions(context); + transactionsRestored = true; + // todo serso: may be call net.robotmedia.billing.BillingController.restoreTransactions() always before first check and get rid of second check // check the billing one more time - purchased = isAdFreeApprox(context); + purchased = isAdFreePurchased(context); } return purchased; } @@ -62,9 +66,8 @@ public class CalculatorApplication extends android.app.Application { @Nullable public static AdView inflateAd(@NotNull Activity activity, int parentViewId) { AdView result = null; - if ( !isAdFreeApprox(activity) ) { + if ( !isAdFree(activity) ) { Log.d(activity.getClass().getName(), "Application is not ad free - inflating ad!"); - //final List keywords = Arrays.asList("math", "mathematics", "finance", "physics", "dynamics"); final List keywords = Collections.emptyList(); result = AndroidUtils.createAndInflateAdView(activity, ADMOB_USER_ID, parentViewId, keywords); } else { @@ -78,6 +81,7 @@ public class CalculatorApplication extends android.app.Application { public void onCreate() { super.onCreate(); + //BillingController.setDebug(true); BillingController.setConfiguration(new BillingController.IConfiguration() { @Override @@ -90,7 +94,5 @@ public class CalculatorApplication extends android.app.Application { return CalculatorSecurity.getPK(); } }); - - BillingController.checkBillingSupported(this); } } diff --git a/src/main/java/org/solovyev/android/calculator/CalculatorBillingObserver.java b/src/main/java/org/solovyev/android/calculator/CalculatorBillingObserver.java new file mode 100644 index 00000000..28433a13 --- /dev/null +++ b/src/main/java/org/solovyev/android/calculator/CalculatorBillingObserver.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2009-2012. Created by serso aka se.solovyev. + * For more information, please, contact se.solovyev@gmail.com + * or visit http://se.solovyev.org + */ + +package org.solovyev.android.calculator; + +import android.app.Activity; +import net.robotmedia.billing.BillingRequest; +import net.robotmedia.billing.helper.AbstractBillingObserver; +import net.robotmedia.billing.model.Transaction; +import org.jetbrains.annotations.NotNull; + +/** + * User: serso + * Date: 1/5/12 + * Time: 4:51 PM + */ +public class CalculatorBillingObserver extends AbstractBillingObserver { + + public CalculatorBillingObserver(@NotNull Activity activity) { + super(activity); + } + + @Override + public void onBillingChecked(boolean supported) { + // do nothing + } + + @Override + public void onPurchaseStateChanged(String itemId, Transaction.PurchaseState state) { + // do nothing + } + + @Override + public void onRequestPurchaseResponse(String itemId, BillingRequest.ResponseCode response) { + // do nothing + } +} diff --git a/src/main/java/org/solovyev/android/calculator/CalculatorPreferencesActivity.java b/src/main/java/org/solovyev/android/calculator/CalculatorPreferencesActivity.java index 90349308..434f52ad 100644 --- a/src/main/java/org/solovyev/android/calculator/CalculatorPreferencesActivity.java +++ b/src/main/java/org/solovyev/android/calculator/CalculatorPreferencesActivity.java @@ -6,11 +6,16 @@ package org.solovyev.android.calculator; import android.app.AlertDialog; +import android.app.PendingIntent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; +import android.util.Log; import net.robotmedia.billing.BillingController; +import net.robotmedia.billing.BillingRequest; +import net.robotmedia.billing.IBillingObserver; +import net.robotmedia.billing.model.Transaction; import org.solovyev.android.calculator.model.CalculatorEngine; import org.solovyev.android.view.widgets.VibratorContainer; @@ -19,7 +24,7 @@ import org.solovyev.android.view.widgets.VibratorContainer; * Date: 7/16/11 * Time: 6:37 PM */ -public class CalculatorPreferencesActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { +public class CalculatorPreferencesActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener, IBillingObserver { @Override protected void onCreate(Bundle savedInstanceState) { @@ -35,10 +40,13 @@ public class CalculatorPreferencesActivity extends PreferenceActivity implements // check billing availability if (BillingController.checkBillingSupported(CalculatorPreferencesActivity.this) != BillingController.BillingStatus.SUPPORTED) { + Log.d(CalculatorPreferencesActivity.class.getName(), "Billing is not supported - warn user!"); // warn about not supported billing new AlertDialog.Builder(CalculatorPreferencesActivity.this).setTitle(R.string.c_error).setMessage(R.string.c_billing_error).create().show(); } else { + Log.d(CalculatorPreferencesActivity.class.getName(), "Billing is supported - continue!"); if (!CalculatorApplication.isAdFree(CalculatorPreferencesActivity.this)) { + Log.d(CalculatorPreferencesActivity.class.getName(), "Item not purchased - try to purchase!"); // not purchased => show purchase window for user BillingController.requestPurchase(CalculatorPreferencesActivity.this, CalculatorApplication.AD_FREE_PRODUCT_ID, true); } @@ -51,18 +59,67 @@ public class CalculatorPreferencesActivity extends PreferenceActivity implements addFreePreference.setEnabled(false); } + BillingController.registerObserver(this); + final SharedPreferences preferences = getPreferenceManager().getSharedPreferences(); preferences.registerOnSharedPreferenceChangeListener(this); onSharedPreferenceChanged(preferences, CalculatorEngine.Preferences.roundResult.getKey()); onSharedPreferenceChanged(preferences, VibratorContainer.HAPTIC_FEEDBACK_P_KEY); } + @Override + protected void onDestroy() { + BillingController.unregisterObserver(this); + super.onDestroy(); + } + @Override public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { if (CalculatorEngine.Preferences.roundResult.getKey().equals(key)) { - findPreference(CalculatorEngine.Preferences.roundResult.getKey()).setEnabled(preferences.getBoolean(key, CalculatorEngine.Preferences.roundResult.getDefaultValue())); + findPreference(CalculatorEngine.Preferences.precision.getKey()).setEnabled(preferences.getBoolean(key, CalculatorEngine.Preferences.roundResult.getDefaultValue())); } else if (VibratorContainer.HAPTIC_FEEDBACK_P_KEY.equals(key)) { findPreference(VibratorContainer.HAPTIC_FEEDBACK_DURATION_P_KEY).setEnabled(preferences.getBoolean(key, VibratorContainer.HAPTIC_FEEDBACK_DEFAULT)); } } + + @Override + public void onBillingChecked(boolean supported) { + // do nothing + } + + @Override + public void onPurchaseIntent(String itemId, PendingIntent purchaseIntent) { + // do nothing + } + + @Override + public void onPurchaseStateChanged(String itemId, Transaction.PurchaseState state) { + if (CalculatorApplication.AD_FREE_PRODUCT_ID.equals(itemId)) { + final Preference addFreePreference = findPreference(CalculatorApplication.AD_FREE_P_KEY); + if (addFreePreference != null) { + switch (state) { + case PURCHASED: + addFreePreference.setEnabled(false); + break; + case CANCELLED: + addFreePreference.setEnabled(true); + break; + case REFUNDED: + addFreePreference.setEnabled(true); + break; + } + } else { + } + } + } + + @Override + public void onRequestPurchaseResponse(String itemId, BillingRequest.ResponseCode response) { + // do nothing + } + + @Override + public void onTransactionsRestored() { + // do nothing + } } diff --git a/src/misc/lib/AndroidBillingLibrary.jar b/src/misc/lib/AndroidBillingLibrary.jar index ac2ebcd4b241e7266daad7f785818e9279ec2579..b2ebc0ea36332cddc2077a693403183c9f4c68ce 100644 GIT binary patch delta 10199 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 delta 9982 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

-IE}y28(R)58}EeU|Ec%hLIs zlz(koP;$i72$LxWxw*hR!{AJw>?j-YNt4sohXQPzlF-2AH50D^!L&Z|6-$?LC5H4>fLYrZWg|?BAqa3Bz%`09?I$ zaz67>sGaCfly~i$lnMgg8SBk(u7(I_0e)PBz-ubPCX*HKjUOt-UUBG_B@vu(2Knnh zZ9^C@Mc_b-snXA{(*g0B$O0DSsGSq#g?pb^d_NQGZ#wBVCY_@M7I*hG!v5JLhd*w_x9F_ndqs#7Zrm#x&@wbQ zXxnhgdRg%fIY(gX#D%J%F{p)a(FLizp=~_*;w|PFzjK6*cTlu%!nvy;yNwKn*OS!c z@aqdT-M(y;Wu6Ok;~dl<47!x2W0ADulW@pJ6)m;lh#MT2G$mZ072dw@rVXc9=tri^ zp64{~zvVyr*|;)t3%UwKy{G=QZSynPr3s>dKnK{+ZTsK5cJ*mKBO+{`#!TD?Zw_4_37kkb5bcf=q`%-GfE^eOBK~bu zTty2Nh9qjoK7ie@TUNmSBv8F#h5h@?b86@HJFeGg%#b#1vmkI=~pBxg`3Wgrw*l2zY{=d(9kN%zouyza%qFzn|C89&B z`|)7pQ2j;( z5J>V5eGghFkp<$EK!&ZR2nSC9`e(o)Sp($oKk1-iX2{k6Gt4yZAUXUfBMj1@!>}tro#Qh~!)_s}w_2u#QBB$l+!9U{Jsi zEv%E43v@AIXbfD4Adti#y7rHuM5+JyAKpd|PbdNv(Liw8P$8%7_%J(;Xp{q=p>|xL zx#a%C&b-)PWEvPzul&SL8wUjPVFZExjOtDjMs#k&Wkv`6Q-6OrMfHc}G7ZS7Cn>Zj zQU2p)T01%X?%(3SYnA}!KuLOj%q=uqqR=jc|FCzf^_RV03S=;HOry@dE|jbZP3@m# zbN#=_^pM7WOjvrIJILYbjbU&!GZCb@0~0n^2cht)2@Hl7IQ#!KAtdC^#$3&iK_Eit zI>-KpKjfx=D?wKU?El2*+(`~UZS^n8uZ4pa=E)pXgkTF3VRv!CB5ArmB0Gi-jy@&` z^k-#AIQ(S;7ZTcq2h-2&B8Lxi{Rc)B!-Bc}{~H#XKiuB-f+<25r2n|A_L&@>!TWD9 zbiHDOb=Lxgv)=p#gJD|#>I(8Jf%*Or$?o55r*3liwO?PUAr2~75K|>G$WhPl5mx17HM&GRmM310=KWcaI;T(CSAhL=I8$#)ST|g@gZBk|h2e2eg*|b?H`s zK;}*k9RHgJ)ZKqwul~|7bF^@Ava$GoX+qu(6T|0LKqMN8{@1BN@h`I=(DW|_D#-2d x?~pJ@$l-A+p%4$maO8L3FQJfq6%-PL^!x=aK%tC!C?o?B8O1?nZ~kTSe*h~(wIcuk diff --git a/src/misc/res/logoFULL_banner.png b/src/misc/res/logoFULL_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc0d68024fbac3baeaa3825f978ea1b2400ec31 GIT binary patch literal 15788 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 a#9G{4oLKUy2k7A!fV8;0SdEBb@c#q;w9x_p literal 0 HcmV?d00001