Added option to support the development by donating.

This commit is contained in:
Karim Abou Zeid 2015-08-26 18:05:12 +02:00
commit d869a87d98
8 changed files with 104 additions and 7 deletions

View file

@ -101,6 +101,8 @@ dependencies {
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.anjlab.android.iab.v3:library:1.0.26'
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
}

View file

@ -9,6 +9,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="com.android.vending.BILLING" />
<application
android:name=".App"

View file

@ -28,6 +28,7 @@
<h3>Version 0.9.44 beta2</h3>
<ol>
<li><b>NEW:</b> Added option to support the development by donating.</li>
<li><b>FIX:</b> Fixed status bar coloring for Lollipop and Marshmallow.</li>
</ol>

View file

@ -19,6 +19,8 @@ import io.fabric.sdk.android.Fabric;
public class App extends Application {
public static final String TAG = App.class.getSimpleName();
public static final String GOOGLE_PLAY_LICENSE_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjMeADN5Ffnt/ml5SYxNPCn8kGcOYGpHEfNSCts99vVxqmCn6C01E94c17j7rUK2aeHur5uxphZylzopPlQ8P8l1fqty0GPUNRSo18FCJzfGH8HZAwZYOcnRFPaXdaq3InyFJhBiODh2oeAcVK/idH6QraQ4r9HIlzigAg6lgwzxl2wJKDh7X/GMdDntCyzDh8xDQ0wIawFgvgojHwqh2Ci8Gnq6EYRwPA9yHiIIksT8Q30QyM5ewl5QcnWepsls7enNqeHarhpmSibRUDgCsxHoOpny7SyuvZvUI3wuLckDR0ds9hrt614scHHqDOBp/qWCZiAgOPVAEQcURbV09qQIDAQAB";
private RefWatcher refWatcher;
public static RefWatcher getRefWatcher(Context context) {

View file

@ -33,9 +33,15 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.afollestad.materialcab.MaterialCab;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.ThemeSingleton;
import com.anjlab.android.iab.v3.BillingProcessor;
import com.anjlab.android.iab.v3.BillingProcessor.IBillingHandler;
import com.anjlab.android.iab.v3.TransactionDetails;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.PagerAdapter;
import com.kabouzeid.gramophone.dialogs.AboutDialog;
@ -72,7 +78,7 @@ import butterknife.Bind;
import butterknife.ButterKnife;
public class MainActivity extends AbsSlidingMusicPanelActivity
implements KabViewsDisableAble, CabHolder {
implements KabViewsDisableAble, CabHolder, IBillingHandler {
public static final String TAG = MainActivity.class.getSimpleName();
@ -89,10 +95,12 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
@Bind(R.id.drawer_layout)
DrawerLayout drawerLayout;
private PagerAdapter pagerAdapter;
private MaterialCab cab;
@Nullable
private View navigationDrawerHeader;
private PagerAdapter pagerAdapter;
private MaterialCab cab;
private BillingProcessor billingProcessor;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -114,6 +122,8 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
setNavigationBarThemeColor();
setStatusBarThemeColor();
billingProcessor = new BillingProcessor(this, App.GOOGLE_PLAY_LICENSE_KEY, this);
checkChangelog();
}
@ -232,6 +242,14 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
menuItem.setChecked(true);
pager.setCurrentItem(PagerAdapter.MusicFragments.PLAYLIST.ordinal(), true);
break;
case R.id.support_development:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
showDonationDialog();
}
}, 200);
break;
case R.id.nav_settings:
new Handler().postDelayed(new Runnable() {
@Override
@ -588,4 +606,54 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
e.printStackTrace();
}
}
private void showDonationDialog() {
new MaterialDialog.Builder(this)
.title(R.string.support_development)
.items(R.array.donation_names)
.itemsCallback(new MaterialDialog.ListCallback() {
@Override
public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence charSequence) {
final String[] ids = getResources().getStringArray(R.array.donation_ids);
billingProcessor.purchase(MainActivity.this, ids[i]);
}
}).show();
}
@Override
public void onProductPurchased(String productId, TransactionDetails details) {
billingProcessor.consumePurchase(productId);
Toast.makeText(this, R.string.thank_you, Toast.LENGTH_SHORT).show();
}
@Override
public void onPurchaseHistoryRestored() {
// ignore
}
@Override
public void onBillingError(int errorCode, Throwable error) {
Toast.makeText(this, "Billing error: code = " + errorCode + ", error: " +
(error != null ? error.getMessage() : "?"), Toast.LENGTH_LONG).show();
}
@Override
public void onBillingInitialized() {
// ignore
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!billingProcessor.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
protected void onDestroy() {
if (billingProcessor != null) {
billingProcessor.release();
}
super.onDestroy();
}
}

View file

@ -25,6 +25,10 @@
<group
android:id="@+id/navigation_drawer_menu_category_other"
android:checkableBehavior="none">
<item
android:id="@+id/support_development"
android:icon="@drawable/ic_favorite_white_24dp"
android:title="@string/support_development" />
<item
android:id="@+id/nav_settings"
android:icon="@drawable/ic_settings_white_24dp"

View file

@ -1,7 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Phonograph</string>
<string name="credits_4">\u0020<a href="http://cookicons.co/">Cookicons</a></string>
<string name="credits_2">\u0020<b>Karim Abou Zeid</b>.\n<a href="https://plus.google.com/+KarimAbouZeid23697">Google+</a>&#160;&#160;&#160;<a href="https://twitter.com/karim23697">Twitter</a>\n\n</string>
<string name="special_thanks_names">\u0020<a href="https://google.com/+AidanFollestad">Aidan Follestad</a>\n\n</string>
<string name="app_name" translatable="false">Phonograph</string>
<string name="credits_4" translatable="false">\u0020<a href="http://cookicons.co/">Cookicons</a></string>
<string name="credits_2" translatable="false">\u0020<b>Karim Abou Zeid</b>.\n<a href="https://plus.google.com/+KarimAbouZeid23697">Google+</a>&#160;&#160;&#160;<a href="https://twitter.com/karim23697">Twitter</a>\n\n</string>
<string name="special_thanks_names" translatable="false">\u0020<a href="https://google.com/+AidanFollestad">Aidan Follestad</a>\n\n</string>
<string-array name="donation_names" translatable="false">
<item>$1.00</item>
<item>$3.00</item>
<item>$5.00</item>
<item>$10.00</item>
<item>$15.00</item>
<item>$20.00</item>
</string-array>
<string-array name="donation_ids" translatable="false">
<item>donation_1</item>
<item>donation_3</item>
<item>donation_5</item>
<item>donation_10</item>
<item>donation_15</item>
<item>donation_20</item>
</string-array>
</resources>

View file

@ -175,4 +175,6 @@
<string name="changelog">Changelog</string>
<string name="permission_to_access_external_storage_denied">Permission to access external storage denied.</string>
<string name="back">back</string>
<string name="support_development">Support development</string>
<string name="thank_you">Thank you!</string>
</resources>