aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/AboutActivity.java216
-rw-r--r--main/src/cgeo/geocaching/MainActivity.java2
-rw-r--r--main/src/cgeo/geocaching/TrackableActivity.java2
3 files changed, 167 insertions, 53 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;
}
}
diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java
index a3daf97..0fd6759 100644
--- a/main/src/cgeo/geocaching/MainActivity.java
+++ b/main/src/cgeo/geocaching/MainActivity.java
@@ -736,7 +736,7 @@ public class MainActivity extends AbstractActivity {
* unused here but needed since this method is referenced from XML layout
*/
public void showAbout(final View view) {
- AboutActivity_.intent(this).start();
+ startActivity(new Intent(this, AboutActivity.class));
}
/**
diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java
index 35ffdc6..20a9ccf 100644
--- a/main/src/cgeo/geocaching/TrackableActivity.java
+++ b/main/src/cgeo/geocaching/TrackableActivity.java
@@ -110,7 +110,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi
@Override
public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState, R.layout.trackable_activity);
+ super.onCreate(savedInstanceState, R.layout.viewpager_activity);
// set title in code, as the activity needs a hard coded title due to the intent filters
setTitle(res.getString(R.string.trackable));