diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-08-21 21:31:58 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-08-21 21:31:58 +0200 |
| commit | f44d2bf4dc74e39143d3e6b65cf1ff64c06cf77b (patch) | |
| tree | 9c8c76eb562d48b5ccaa4f402f1b8b96f5d215cf /main/src/cgeo/geocaching/AboutActivity.java | |
| parent | 318a2a55fab34275964c4e1a74ae27c92a9863eb (diff) | |
| download | cgeo-f44d2bf4dc74e39143d3e6b65cf1ff64c06cf77b.zip cgeo-f44d2bf4dc74e39143d3e6b65cf1ff64c06cf77b.tar.gz cgeo-f44d2bf4dc74e39143d3e6b65cf1ff64c06cf77b.tar.bz2 | |
new: split about page into view pager page
Diffstat (limited to 'main/src/cgeo/geocaching/AboutActivity.java')
| -rw-r--r-- | main/src/cgeo/geocaching/AboutActivity.java | 216 |
1 files changed, 165 insertions, 51 deletions
diff --git a/main/src/cgeo/geocaching/AboutActivity.java b/main/src/cgeo/geocaching/AboutActivity.java index 029249e..7a8bea6 100644 --- a/main/src/cgeo/geocaching/AboutActivity.java +++ b/main/src/cgeo/geocaching/AboutActivity.java @@ -1,94 +1,208 @@ package cgeo.geocaching; -import cgeo.geocaching.activity.AbstractActivity; +import butterknife.InjectView; +import butterknife.Views; + +import cgeo.geocaching.activity.AbstractViewPagerActivity; +import cgeo.geocaching.ui.AbstractCachingPageViewCreator; import cgeo.geocaching.ui.AnchorAwareLinkMovementMethod; import cgeo.geocaching.utils.Version; -import com.googlecode.androidannotations.annotations.AfterViews; -import com.googlecode.androidannotations.annotations.Click; -import com.googlecode.androidannotations.annotations.EActivity; -import com.googlecode.androidannotations.annotations.ViewById; - import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; +import android.widget.ScrollView; import android.widget.TextView; -@EActivity -public class AboutActivity extends AbstractActivity { +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; - @ViewById(R.id.about_version_string) protected TextView version; - @ViewById(R.id.contributors) protected TextView contributors; - @ViewById(R.id.changelog_master) protected TextView changeLogMaster; - @ViewById(R.id.changelog_release) protected TextView changeLogRelease; +public class AboutActivity extends AbstractViewPagerActivity<AboutActivity.Page> { + + class LicenseViewCreator extends AbstractCachingPageViewCreator<ScrollView> { + + @InjectView(R.id.license) protected TextView licenseLink; + @InjectView(R.id.license_text) protected TextView licenseText; + + @Override + public ScrollView getDispatchedView() { + final ScrollView view = (ScrollView) getLayoutInflater().inflate(R.layout.about_license_page, null); + Views.inject(this, view); + setClickListener(licenseLink, "http://www.apache.org/licenses/LICENSE-2.0.html"); + licenseText.setText(getRawResourceString(R.raw.license)); + return view; + } + } + + class ContributorsViewCreator extends AbstractCachingPageViewCreator<ScrollView> { + + @InjectView(R.id.contributors) protected TextView contributors; + + @Override + public ScrollView getDispatchedView() { + final ScrollView view = (ScrollView) getLayoutInflater().inflate(R.layout.about_contributors_page, null); + Views.inject(this, view); + contributors.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); + return view; + } - @Override - public void onCreate(final Bundle savedInstanceState) { - // TODO remove this after the theme has been fixed - super.onCreate(savedInstanceState, R.layout.about_activity); } - @AfterViews - final void initializeViews() { - version.setText(Version.getVersionName(this)); - contributors.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); - changeLogRelease.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); - final String changeLogMasterString = getString(R.string.changelog_master); - if (StringUtils.isBlank(changeLogMasterString)) { - changeLogMaster.setVisibility(View.GONE); - } else { - changeLogMaster.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); + class ChangeLogViewCreator extends AbstractCachingPageViewCreator<ScrollView> { + + @InjectView(R.id.changelog_master) protected TextView changeLogMaster; + @InjectView(R.id.changelog_release) protected TextView changeLogRelease; + + @Override + public ScrollView getDispatchedView() { + final ScrollView view = (ScrollView) getLayoutInflater().inflate(R.layout.about_changes_page, null); + Views.inject(this, view); + changeLogRelease.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); + final String changeLogMasterString = getString(R.string.changelog_master); + if (StringUtils.isBlank(changeLogMasterString)) { + changeLogMaster.setVisibility(View.GONE); + } else { + changeLogMaster.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); + } + return view; } + } - @Click(R.id.donate) - final void donate() { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FMLNN8GXZKJEE"))); + class HelpViewCreator extends AbstractCachingPageViewCreator<ScrollView> { + + @InjectView(R.id.support) protected TextView support; + @InjectView(R.id.website) protected TextView website; + @InjectView(R.id.facebook) protected TextView facebook; + @InjectView(R.id.twitter) protected TextView twitter; + @InjectView(R.id.nutshellmanual) protected TextView nutshellmanual; + @InjectView(R.id.market) protected TextView market; + @InjectView(R.id.faq) protected TextView faq; + + @Override + public ScrollView getDispatchedView() { + final ScrollView view = (ScrollView) getLayoutInflater().inflate(R.layout.about_help_page, null); + Views.inject(this, view); + setClickListener(support, "mailto:support@cgeo.org"); + setClickListener(website, "http://www.cgeo.org/"); + setClickListener(facebook, "http://www.facebook.com/pages/cgeo/297269860090"); + setClickListener(twitter, "http://twitter.com/android_gc"); + setClickListener(nutshellmanual, "http://manual.cgeo.org/"); + setClickListener(faq, "http://faq.cgeo.org/"); + market.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(final View v) { + market(); + } + }); + return view; + } + } - @Click(R.id.support) - final void support() { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:support@cgeo.org"))); + class VersionViewCreator extends AbstractCachingPageViewCreator<ScrollView> { + + @InjectView(R.id.about_version_string) protected TextView version; + @InjectView(R.id.donate) protected TextView donateButton; + + @Override + public ScrollView getDispatchedView() { + final ScrollView view = (ScrollView) getLayoutInflater().inflate(R.layout.about_version_page, null); + Views.inject(this, view); + version.setText(Version.getVersionName(AboutActivity.this)); + setClickListener(donateButton, "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FMLNN8GXZKJEE"); + return view; + } } - @Click(R.id.website) - final void webSite() { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.cgeo.org/"))); + enum Page { + VERSION(R.string.about_version), + HELP(R.string.about_help), + CHANGELOG(R.string.about_changes), + CONTRIBUTORS(R.string.about_contributors), + LICENSE(R.string.about_license); + + private final int resourceId; + + Page(final int resourceId) { + this.resourceId = resourceId; + } } - @Click(R.id.facebook) - final void facebook() { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.facebook.com/pages/cgeo/297269860090"))); + @Override + public final void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState, R.layout.viewpager_activity); + createViewPager(0, null); + reinitializeViewPager(); } - @Click(R.id.twitter) - final void twitter() { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://twitter.com/android_gc"))); + public final void setClickListener(final View view, final String url) { + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(final View v) { + startUrl(url); + } + }); } - @Click(R.id.nutshellmanual) - final void nutshellmanual() { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://manual.cgeo.org/"))); + private void startUrl(final String url) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); } - @Click(R.id.market) final void market() { final Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName())); marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); startActivity(marketIntent); } - @Click(R.id.license) - final void license() { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.apache.org/licenses/LICENSE-2.0.html"))); + @Override + protected final cgeo.geocaching.activity.AbstractViewPagerActivity.PageViewCreator createViewCreator(final Page page) { + switch (page) { + case VERSION: + return new VersionViewCreator(); + case HELP: + return new HelpViewCreator(); + case CHANGELOG: + return new ChangeLogViewCreator(); + case CONTRIBUTORS: + return new ContributorsViewCreator(); + case LICENSE: + return new LicenseViewCreator(); + default: + throw new IllegalArgumentException(); + } + } + + @Override + protected final String getTitle(final Page page) { + return res.getString(page.resourceId); + } + + @Override + protected final Pair<List<? extends Page>, Integer> getOrderedPages() { + final List<Page> pages = Arrays.asList(Page.values()); + return new ImmutablePair<List<? extends Page>, Integer>(pages, 0); } - @Click(R.id.faq) - final void faq() { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://faq.cgeo.org/"))); + private String getRawResourceString(final int resourceId) { + final InputStream ins = res.openRawResource(resourceId); + final String result = new Scanner(ins).useDelimiter("\\A").next(); + try { + ins.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return result; } } |
