diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2016-02-10 17:36:02 +0100 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2016-02-10 17:36:02 +0100 |
commit | da6dfb57a0aa816919cd23752e1707ba6a2e8cae (patch) | |
tree | d6ede03785491d4c56b10cad9062b8bcac3ea78b /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui | |
parent | 01b165ea88a032f31b8c2ff07351d3f893f6413d (diff) | |
parent | 751298a4d832f316244fd6345c46ba806dcfc860 (diff) | |
download | open-keychain-da6dfb57a0aa816919cd23752e1707ba6a2e8cae.tar.gz open-keychain-da6dfb57a0aa816919cd23752e1707ba6a2e8cae.tar.bz2 open-keychain-da6dfb57a0aa816919cd23752e1707ba6a2e8cae.zip |
Merge branch 'master' into performance
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui')
12 files changed, 99 insertions, 23 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java index b92645777..b53bfc1d0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java @@ -33,7 +33,7 @@ import android.widget.Button; import android.widget.CheckBox; import android.widget.TextView; -import org.spongycastle.bcpg.sig.KeyFlags; +import org.bouncycastle.bcpg.sig.KeyFlags; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.EditKeyResult; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportResetFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportResetFragment.java index 81f782149..631848a67 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportResetFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportResetFragment.java @@ -34,7 +34,7 @@ import android.widget.CompoundButton; import android.widget.RadioButton; import android.widget.TextView; -import org.spongycastle.util.encoders.Hex; +import org.bouncycastle.util.encoders.Hex; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing; import org.sufficientlysecure.keychain.operations.results.ImportKeyResult; 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/SettingsActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java index 7666a230a..ea70cde2a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsActivity.java @@ -51,6 +51,8 @@ import android.widget.LinearLayout; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.compatibility.AppCompatPreferenceActivity; +import org.sufficientlysecure.keychain.service.ContactSyncAdapterService; +import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.ThemeChanger; import org.sufficientlysecure.keychain.util.Log; @@ -79,6 +81,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity { @Override protected void onResume() { super.onResume(); + BaseActivity.onResumeChecks(this); if (mThemeChanger.changeTheme()) { Intent intent = getIntent(); @@ -463,6 +466,8 @@ public class SettingsActivity extends AppCompatPreferenceActivity { } else { // disable syncs ContentResolver.setSyncAutomatically(account, authority, false); + // immediately delete any linked contacts + ContactSyncAdapterService.deleteIfSyncDisabled(getActivity()); // cancel any ongoing/pending syncs ContentResolver.cancelSync(account, authority); setSummary(syncCheckBox, authority, false); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeySecurityTokenFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeySecurityTokenFragment.java index 48e41c7bb..8b7734129 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeySecurityTokenFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeySecurityTokenFragment.java @@ -34,7 +34,7 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; -import org.spongycastle.util.encoders.Hex; +import org.bouncycastle.util.encoders.Hex; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.PromoteKeyResult; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; 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<TabInfo> mTabs = new ArrayList<>(); + SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>(); 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); + } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SubkeysAddedAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SubkeysAddedAdapter.java index d2359a387..8b2481c29 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SubkeysAddedAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/SubkeysAddedAdapter.java @@ -29,7 +29,7 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; -import org.spongycastle.bcpg.sig.KeyFlags; +import org.bouncycastle.bcpg.sig.KeyFlags; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java index aa4e7d840..107c63e0b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseActivity.java @@ -18,6 +18,7 @@ package org.sufficientlysecure.keychain.ui.base; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBar; @@ -30,6 +31,7 @@ import android.view.ViewGroup; import android.widget.TextView; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.service.ContactSyncAdapterService; import org.sufficientlysecure.keychain.service.KeyserverSyncAdapterService; import org.sufficientlysecure.keychain.ui.util.ThemeChanger; @@ -52,7 +54,7 @@ public abstract class BaseActivity extends AppCompatActivity { @Override protected void onResume() { super.onResume(); - KeyserverSyncAdapterService.cancelUpdates(this); + onResumeChecks(this); if (mThemeChanger.changeTheme()) { Intent intent = getIntent(); @@ -63,6 +65,12 @@ public abstract class BaseActivity extends AppCompatActivity { } } + public static void onResumeChecks(Context context) { + KeyserverSyncAdapterService.cancelUpdates(context); + // in case user has disabled sync from Android account settings + ContactSyncAdapterService.deleteIfSyncDisabled(context); + } + protected void initLayout() { } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseSecurityTokenNfcActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseSecurityTokenNfcActivity.java index 52b439a0d..ae1944ced 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseSecurityTokenNfcActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseSecurityTokenNfcActivity.java @@ -43,9 +43,9 @@ import nordpol.android.AndroidCard; import nordpol.android.OnDiscoveredTagListener; import nordpol.IsoCard; -import org.spongycastle.bcpg.HashAlgorithmTags; -import org.spongycastle.util.Arrays; -import org.spongycastle.util.encoders.Hex; +import org.bouncycastle.bcpg.HashAlgorithmTags; +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.encoders.Hex; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddSubkeyDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddSubkeyDialogFragment.java index cd5281c7c..5b75723fb 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddSubkeyDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/AddSubkeyDialogFragment.java @@ -41,7 +41,7 @@ import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; -import org.spongycastle.bcpg.sig.KeyFlags; +import org.bouncycastle.bcpg.sig.KeyFlags; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel.Algorithm; @@ -358,7 +358,7 @@ public class AddSubkeyDialogFragment extends DialogFragment { * <h3>DSA</h3> * <p>For DSA algorithm key length must be between 2048 and 3072. Also, it must me dividable by 64.</p> * - * @return correct key length, according to SpongyCastle specification. Returns <code>-1</code>, if key length is + * @return correct key length, according to BouncyCastle specification. Returns <code>-1</code>, if key length is * inappropriate. */ private int getProperKeyLength(Algorithm algorithm, int currentKeyLength) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdCreateGithubFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdCreateGithubFragment.java index ccb20a764..e59153d03 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdCreateGithubFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/linked/LinkedIdCreateGithubFragment.java @@ -64,7 +64,7 @@ import android.widget.ViewAnimator; import javax.net.ssl.HttpsURLConnection; import org.json.JSONException; import org.json.JSONObject; -import org.spongycastle.util.encoders.Hex; +import org.bouncycastle.util.encoders.Hex; import org.sufficientlysecure.keychain.BuildConfig; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/KeyFormattingUtils.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/KeyFormattingUtils.java index b9b837d71..5fcc3d58b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/KeyFormattingUtils.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/KeyFormattingUtils.java @@ -32,11 +32,11 @@ import android.widget.ViewAnimator; import org.openintents.openpgp.OpenPgpDecryptionResult; import org.openintents.openpgp.OpenPgpSignatureResult; -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.nist.NISTNamedCurves; -import org.spongycastle.asn1.teletrust.TeleTrusTNamedCurves; -import org.spongycastle.bcpg.PublicKeyAlgorithmTags; -import org.spongycastle.util.encoders.Hex; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.nist.NISTNamedCurves; +import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; +import org.bouncycastle.bcpg.PublicKeyAlgorithmTags; +import org.bouncycastle.util.encoders.Hex; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; |