From 2bf9634fd678dacac3b7da3e554c008eb3354ca3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 9 Feb 2016 20:48:24 +0100 Subject: Add donation fragment --- .../keychain/ui/HelpActivity.java | 57 +++++++++++++++++++--- .../keychain/ui/adapter/PagerTabStripAdapter.java | 20 ++++++++ 2 files changed, 70 insertions(+), 7 deletions(-) (limited to 'OpenKeychain/src/main/java') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java index 7987f73b9..c67e97440 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java @@ -20,11 +20,15 @@ package org.sufficientlysecure.keychain.ui; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.view.View; import com.astuetz.PagerSlidingTabStrip; +import org.sufficientlysecure.donations.DonationsFragment; +import org.sufficientlysecure.keychain.BuildConfig; +import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.adapter.PagerTabStripAdapter; import org.sufficientlysecure.keychain.ui.base.BaseActivity; @@ -36,10 +40,15 @@ public class HelpActivity extends BaseActivity { public static final int TAB_START = 0; public static final int TAB_CONFIRM = 1; public static final int TAB_FAQ = 2; - public static final int TAB_CHANGELOG = 3; - public static final int TAB_ABOUT = 4; + public static final int TAB_DONATE = 3; + public static final int TAB_CHANGELOG = 4; + public static final int TAB_ABOUT = 5; + + // Google Play + private static final String[] GOOGLE_PLAY_CATALOG = new String[]{"keychain.donation.1", + "keychain.donation.2", "keychain.donation.3", "keychain.donation.5", "keychain.donation.10", + "keychain.donation.50", "keychain.donation.100"}; - ViewPager mViewPager; private PagerTabStripAdapter mTabsAdapter; @Override @@ -53,12 +62,12 @@ public class HelpActivity extends BaseActivity { } }); - mViewPager = (ViewPager) findViewById(R.id.pager); + ViewPager viewPager = (ViewPager) findViewById(R.id.pager); PagerSlidingTabStrip slidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.sliding_tab_layout); mTabsAdapter = new PagerTabStripAdapter(this); - mViewPager.setAdapter(mTabsAdapter); + viewPager.setAdapter(mTabsAdapter); int selectedTab = TAB_START; Intent intent = getIntent(); @@ -81,6 +90,26 @@ public class HelpActivity extends BaseActivity { mTabsAdapter.addTab(HelpMarkdownFragment.class, faqBundle, getString(R.string.help_tab_faq)); + Bundle donationsBundle = new Bundle(); + donationsBundle.putBoolean(DonationsFragment.ARG_DEBUG, Constants.DEBUG); + if (BuildConfig.DONATIONS_GOOGLE) { + donationsBundle.putBoolean(DonationsFragment.ARG_GOOGLE_ENABLED, true); + donationsBundle.putString(DonationsFragment.ARG_GOOGLE_PUBKEY, BuildConfig.GOOGLE_PLAY_PUBKEY); + donationsBundle.putStringArray(DonationsFragment.ARG_GOOGLE_CATALOG, GOOGLE_PLAY_CATALOG); + donationsBundle.putStringArray(DonationsFragment.ARG_GOOGLE_CATALOG_VALUES, + getResources().getStringArray(R.array.help_donation_google_catalog_values)); + } else { + donationsBundle.putBoolean(DonationsFragment.ARG_PAYPAL_ENABLED, true); + donationsBundle.putString(DonationsFragment.ARG_PAYPAL_CURRENCY_CODE, BuildConfig.PAYPAL_CURRENCY_CODE); + donationsBundle.putString(DonationsFragment.ARG_PAYPAL_USER, BuildConfig.PAYPAL_USER); + donationsBundle.putString(DonationsFragment.ARG_PAYPAL_ITEM_NAME, + getString(R.string.help_donation_paypal_item)); + donationsBundle.putBoolean(DonationsFragment.ARG_BITCOIN_ENABLED, true); + donationsBundle.putString(DonationsFragment.ARG_BITCOIN_ADDRESS, BuildConfig.BITCOIN_ADDRESS); + } + mTabsAdapter.addTab(DonationsFragment.class, donationsBundle, + getString(R.string.help_tab_donations)); + Bundle changelogBundle = new Bundle(); changelogBundle.putInt(HelpMarkdownFragment.ARG_MARKDOWN_RES, R.raw.help_changelog); mTabsAdapter.addTab(HelpMarkdownFragment.class, changelogBundle, @@ -90,10 +119,10 @@ public class HelpActivity extends BaseActivity { getString(R.string.help_tab_about)); // NOTE: must be after adding the tabs! - slidingTabLayout.setViewPager(mViewPager); + slidingTabLayout.setViewPager(viewPager); // switch to tab selected by extra - mViewPager.setCurrentItem(selectedTab); + viewPager.setCurrentItem(selectedTab); } @Override @@ -107,4 +136,18 @@ public class HelpActivity extends BaseActivity { context.startActivity(intent); } + /** + * Needed for Google Play In-app Billing. It uses startIntentSenderForResult(). The result is not propagated to + * the Fragment like in startActivityForResult(). Thus we need to propagate manually to our Fragment. + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + Fragment fragment = mTabsAdapter.getRegisteredFragment(TAB_DONATE); + if (fragment != null) { + fragment.onActivityResult(requestCode, resultCode, data); + } + } + } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/PagerTabStripAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/PagerTabStripAdapter.java index 7b911da96..5c5c87a2a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/PagerTabStripAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/PagerTabStripAdapter.java @@ -22,12 +22,15 @@ import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v7.app.AppCompatActivity; +import android.util.SparseArray; +import android.view.ViewGroup; import java.util.ArrayList; public class PagerTabStripAdapter extends FragmentPagerAdapter { protected final Activity mActivity; protected final ArrayList mTabs = new ArrayList<>(); + SparseArray registeredFragments = new SparseArray(); static final class TabInfo { public final Class clss; @@ -72,4 +75,21 @@ public class PagerTabStripAdapter extends FragmentPagerAdapter { public CharSequence getPageTitle(int position) { return mTabs.get(position).title; } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + Fragment fragment = (Fragment) super.instantiateItem(container, position); + registeredFragments.put(position, fragment); + return fragment; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + registeredFragments.remove(position); + super.destroyItem(container, position, object); + } + + public Fragment getRegisteredFragment(int position) { + return registeredFragments.get(position); + } } -- cgit v1.2.3