diff options
Diffstat (limited to 'main/src/cgeo/geocaching/activity')
5 files changed, 111 insertions, 104 deletions
diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java index 557665e..9aca35e 100644 --- a/main/src/cgeo/geocaching/activity/AbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java @@ -1,6 +1,8 @@ package cgeo.geocaching.activity; -import cgeo.geocaching.Settings; +import butterknife.Views; + +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.network.Cookies; @@ -14,22 +16,15 @@ import android.widget.EditText; public abstract class AbstractActivity extends FragmentActivity implements IAbstractActivity { - final private String helpTopic; - protected cgeoapplication app = null; protected Resources res = null; private boolean keepScreenOn = false; protected AbstractActivity() { - this(null); - } - - protected AbstractActivity(final String helpTopic) { - this.helpTopic = helpTopic; + this(false); } - protected AbstractActivity(final String helpTopic, final boolean keepScreenOn) { - this(helpTopic); + protected AbstractActivity(final boolean keepScreenOn) { this.keepScreenOn = keepScreenOn; } @@ -38,20 +33,15 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst ActivityMixin.goHome(this); } - @Override - public void goManual(final View view) { - ActivityMixin.goManual(this, helpTopic); - } - - final public void setTitle(final String title) { + final protected void setTitle(final String title) { ActivityMixin.setTitle(this, title); } - final public void showProgress(final boolean show) { + final protected void showProgress(final boolean show) { ActivityMixin.showProgress(this, show); } - final public void setTheme() { + final protected void setTheme() { ActivityMixin.setTheme(this); } @@ -70,22 +60,14 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst ActivityMixin.helpDialog(this, title, message); } - public final void helpDialog(final String title, final String message, final Drawable icon) { + protected final void helpDialog(final String title, final String message, final Drawable icon) { ActivityMixin.helpDialog(this, title, message, icon); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - // init - res = this.getResources(); - app = (cgeoapplication) this.getApplication(); - - // Restore cookie store if needed - Cookies.restoreCookieStore(Settings.getCookieStore()); - - ActivityMixin.keepScreenOn(this, keepScreenOn); + initializeCommonFields(); } protected static void disableSuggestions(final EditText edit) { @@ -101,31 +83,34 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst ActivityMixin.invalidateOptionsMenu(this); } - /** - * insert text into the EditText at the current cursor position - * - * @param editText - * @param insertText - * @param moveCursor - * place the cursor after the inserted text - */ - public static void insertAtPosition(final EditText editText, final String insertText, final boolean moveCursor) { - int selectionStart = editText.getSelectionStart(); - int selectionEnd = editText.getSelectionEnd(); - int start = Math.min(selectionStart, selectionEnd); - int end = Math.max(selectionStart, selectionEnd); - - final String content = editText.getText().toString(); - String completeText; - if (start > 0 && !Character.isWhitespace(content.charAt(start - 1))) { - completeText = " " + insertText; - } else { - completeText = insertText; - } - - editText.getText().replace(start, end, completeText); - int newCursor = moveCursor ? start + completeText.length() : start; - editText.setSelection(newCursor, newCursor); + protected void onCreate(final Bundle savedInstanceState, final int resourceLayoutID) { + super.onCreate(savedInstanceState); + + initializeCommonFields(); + + // non declarative part of layout + setTheme(); + setContentView(resourceLayoutID); + + // create view variables + Views.inject(this); + } + + private void initializeCommonFields() { + // initialize commonly used members + res = this.getResources(); + app = (cgeoapplication) this.getApplication(); + + // only needed in some activities, but implemented in super class nonetheless + Cookies.restoreCookieStore(Settings.getCookieStore()); + ActivityMixin.keepScreenOn(this, keepScreenOn); } + @Override + public void setContentView(int layoutResID) { + super.setContentView(layoutResID); + + // initialize the action bar title with the activity title for single source + ActivityMixin.setTitle(this, getTitle()); + } } diff --git a/main/src/cgeo/geocaching/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java index f96a769..47c747f 100644 --- a/main/src/cgeo/geocaching/activity/AbstractListActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractListActivity.java @@ -12,35 +12,24 @@ import android.view.View; public abstract class AbstractListActivity extends FragmentListActivity implements IAbstractActivity { - private String helpTopic; private boolean keepScreenOn = false; protected cgeoapplication app = null; protected Resources res = null; protected AbstractListActivity() { - this(null); + this(false); } protected AbstractListActivity(final boolean keepScreenOn) { - this(null); this.keepScreenOn = keepScreenOn; } - protected AbstractListActivity(final String helpTopic) { - this.helpTopic = helpTopic; - } - @Override final public void goHome(View view) { ActivityMixin.goHome(this); } - @Override - public void goManual(View view) { - ActivityMixin.goManual(this, helpTopic); - } - final public void showProgress(final boolean show) { ActivityMixin.showProgress(this, show); } @@ -71,7 +60,10 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + initializeCommonFields(); + } + private void initializeCommonFields() { // init res = this.getResources(); app = (cgeoapplication) this.getApplication(); @@ -79,7 +71,7 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen ActivityMixin.keepScreenOn(this, keepScreenOn); } - final public void setTitle(final String title) { + final protected void setTitle(final String title) { ActivityMixin.setTitle(this, title); } @@ -87,4 +79,20 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen public void invalidateOptionsMenuCompatible() { Compatibility.invalidateOptionsMenu(this); } + + public void onCreate(Bundle savedInstanceState, int resourceLayoutID) { + super.onCreate(savedInstanceState); + initializeCommonFields(); + + setTheme(); + setContentView(resourceLayoutID); + } + + @Override + public void setContentView(int layoutResID) { + super.setContentView(layoutResID); + + // initialize action bar title with activity title + ActivityMixin.setTitle(this, getTitle()); + } } diff --git a/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java b/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java index 366a59d..952726e 100644 --- a/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java @@ -14,6 +14,7 @@ import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; +import android.view.ViewGroup; import java.util.ArrayList; import java.util.HashMap; @@ -29,10 +30,6 @@ import java.util.Map; */ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends AbstractActivity { - protected AbstractViewPagerActivity(String helpTopic) { - super(helpTopic); - } - /** * A {@link List} of all available pages. * @@ -95,12 +92,12 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends private class ViewPagerAdapter extends PagerAdapter implements TitleProvider { @Override - public void destroyItem(View container, int position, Object object) { - ((ViewPager) container).removeView((View) object); + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView((View) object); } @Override - public void finishUpdate(View container) { + public void finishUpdate(ViewGroup container) { } @Override @@ -109,7 +106,7 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends } @Override - public Object instantiateItem(View container, int position) { + public Object instantiateItem(ViewGroup container, int position) { final Page page = pageOrder.get(position); PageViewCreator creator = viewCreators.get(page); @@ -126,7 +123,7 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends // Result from getView() is maybe cached, but it should be valid because the // creator should be informed about data-changes with notifyDataSetChanged() view = creator.getView(); - ((ViewPager) container).addView(view, 0); + container.addView(view, 0); } } catch (Exception e) { Log.e("ViewPagerAdapter.instantiateItem ", e); @@ -150,7 +147,7 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends } @Override - public void startUpdate(View arg0) { + public void startUpdate(ViewGroup arg0) { } @Override @@ -211,6 +208,7 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends pageOrder.add(null); } } + viewPagerAdapter.notifyDataSetChanged(); viewPager.setCurrentItem(startPageIndex, false); } @@ -236,15 +234,19 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends final Pair<List<? extends Page>, Integer> pagesAndIndex = getOrderedPages(); pageOrder.addAll(pagesAndIndex.getLeft()); + // Since we just added pages notifyDataSetChanged needs to be called before we possibly setCurrentItem below. + // But, calling it will reset current item and we won't be able to tell if we would have been out of bounds + final int currentItem = getCurrentItem(); + + // notify the adapter that the data has changed + viewPagerAdapter.notifyDataSetChanged(); + // switch to details page, if we're out of bounds final int defaultPage = pagesAndIndex.getRight(); - if (getCurrentItem() < 0 || getCurrentItem() >= viewPagerAdapter.getCount()) { + if (currentItem < 0 || currentItem >= viewPagerAdapter.getCount()) { viewPager.setCurrentItem(defaultPage, false); } - // notify the adapter that the data has changed - viewPagerAdapter.notifyDataSetChanged(); - // notify the indicator that the data has changed titleIndicator.notifyDataSetChanged(); } diff --git a/main/src/cgeo/geocaching/activity/ActivityMixin.java b/main/src/cgeo/geocaching/activity/ActivityMixin.java index c97cb9a..699d5ab 100644 --- a/main/src/cgeo/geocaching/activity/ActivityMixin.java +++ b/main/src/cgeo/geocaching/activity/ActivityMixin.java @@ -1,15 +1,14 @@ package cgeo.geocaching.activity; +import cgeo.geocaching.MainActivity; import cgeo.geocaching.R; -import cgeo.geocaching.Settings; -import cgeo.geocaching.cgeo; +import cgeo.geocaching.settings.Settings; import cgeo.geocaching.compatibility.Compatibility; import org.apache.commons.lang3.StringUtils; import android.app.Activity; import android.app.AlertDialog; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.drawable.Drawable; @@ -17,38 +16,22 @@ import android.os.Build; import android.view.Gravity; import android.view.View; import android.view.WindowManager; +import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; -import gnu.android.app.appmanualclient.AppManualReaderClient; - public final class ActivityMixin { public final static void goHome(final Activity fromActivity) { - final Intent intent = new Intent(fromActivity, cgeo.class); + final Intent intent = new Intent(fromActivity, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); fromActivity.startActivity(intent); fromActivity.finish(); } - public static void goManual(final Context context, final String helpTopic) { - if (StringUtils.isBlank(helpTopic)) { - return; - } - try { - AppManualReaderClient.openManual( - "c-geo", - helpTopic, - context, - "http://manual.cgeo.org/"); - } catch (Exception e) { - // nothing - } - } - - public static void setTitle(final Activity activity, final String text) { + public static void setTitle(final Activity activity, final CharSequence text) { if (StringUtils.isBlank(text)) { return; } @@ -97,6 +80,10 @@ public final class ActivityMixin { return R.style.popup_dark; } + public static void showToast(final Activity activity, final int resId) { + ActivityMixin.showToast(activity, activity.getString(resId)); + } + public static void showToast(final Activity activity, final String text) { if (StringUtils.isNotBlank(text)) { Toast toast = Toast.makeText(activity, text, Toast.LENGTH_LONG); @@ -148,4 +135,31 @@ public final class ActivityMixin { public static void invalidateOptionsMenu(Activity activity) { Compatibility.invalidateOptionsMenu(activity); } + + /** + * insert text into the EditText at the current cursor position + * + * @param editText + * @param insertText + * @param moveCursor + * place the cursor after the inserted text + */ + public static void insertAtPosition(final EditText editText, final String insertText, final boolean moveCursor) { + int selectionStart = editText.getSelectionStart(); + int selectionEnd = editText.getSelectionEnd(); + int start = Math.min(selectionStart, selectionEnd); + int end = Math.max(selectionStart, selectionEnd); + + final String content = editText.getText().toString(); + String completeText; + if (start > 0 && !Character.isWhitespace(content.charAt(start - 1))) { + completeText = " " + insertText; + } else { + completeText = insertText; + } + + editText.getText().replace(start, end, completeText); + int newCursor = moveCursor ? start + completeText.length() : start; + editText.setSelection(newCursor, newCursor); + } } diff --git a/main/src/cgeo/geocaching/activity/IAbstractActivity.java b/main/src/cgeo/geocaching/activity/IAbstractActivity.java index 04709c6..61c218b 100644 --- a/main/src/cgeo/geocaching/activity/IAbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/IAbstractActivity.java @@ -6,8 +6,6 @@ public interface IAbstractActivity { public void goHome(View view); - public void goManual(View view); - public void showToast(String text); public void showShortToast(String text); |
