diff options
Diffstat (limited to 'main/src/cgeo')
37 files changed, 1298 insertions, 714 deletions
diff --git a/main/src/cgeo/geocaching/AbstractDialogFragment.java b/main/src/cgeo/geocaching/AbstractDialogFragment.java new file mode 100644 index 0000000..09a3bfc --- /dev/null +++ b/main/src/cgeo/geocaching/AbstractDialogFragment.java @@ -0,0 +1,354 @@ +package cgeo.geocaching; + +import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.ActivityMixin; +import cgeo.geocaching.enumerations.CacheSize; +import cgeo.geocaching.enumerations.LoadFlags; +import cgeo.geocaching.gcvote.GCVote; +import cgeo.geocaching.gcvote.GCVoteRating; +import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.geopoint.Units; +import cgeo.geocaching.sensors.GeoDirHandler; +import cgeo.geocaching.sensors.IGeoData; +import cgeo.geocaching.settings.Settings; +import cgeo.geocaching.ui.CacheDetailsCreator; +import cgeo.geocaching.ui.LoggingUI; +import cgeo.geocaching.utils.Log; + +import rx.Observable; +import rx.Subscription; +import rx.android.observables.AndroidObservable; +import rx.functions.Action1; +import rx.functions.Func0; +import rx.schedulers.Schedulers; +import rx.subscriptions.Subscriptions; + +import android.annotation.TargetApi; +import android.content.DialogInterface; +import android.content.res.Resources; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.app.DialogFragment; +import android.support.v7.widget.PopupMenu; +import android.view.ContextMenu; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +public abstract class AbstractDialogFragment extends DialogFragment implements CacheMenuHandler.ActivityInterface, PopupMenu.OnMenuItemClickListener, MenuItem.OnMenuItemClickListener { + protected CgeoApplication app = null; + protected Resources res = null; + protected String geocode; + protected CacheDetailsCreator details; + + private Subscription resumeSubscription = Subscriptions.empty(); + private TextView cacheDistance = null; + + + protected static final String GEOCODE_ARG= "GEOCODE"; + protected static final String WAYPOINT_ARG= "WAYPOINT"; + + protected Geocache cache; + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + res = getResources(); + app = (CgeoApplication) getActivity().getApplication(); + setHasOptionsMenu(true); + } + + protected void initCustomActionBar(View v) + { + final ImageView defaultNavigationImageView = (ImageView) v.findViewById(R.id.defaultNavigation); + defaultNavigationImageView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + startDefaultNavigation2(); + return true; + } + }); + defaultNavigationImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + navigateTo(); + } + }); + + final View overflowActionBar = v.findViewById(R.id.overflowActionBar); + overflowActionBar.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showPopup(v); + } + }); + /* Use a context menu instead popup where the popup menu is not working */ + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + registerForContextMenu(overflowActionBar); + } + + } + + final public void setTitle(final CharSequence title) { + final TextView titleview = (TextView) getView().findViewById(R.id.actionbar_title); + if (titleview != null) { + titleview.setText(title); + + } + } + + @Override + public void onStart() { + super.onStart(); + geocode = getArguments().getString(GEOCODE_ARG); + init(); + } + + + protected void showPopup(View view) + { + // For reason I totally not understand the PopupMenu from Appcompat is broken beyond + // repair. Chicken out here and show the old menu on Gingerbread. + // The "correct" way of implementing this is stil in + // showPopupCompat(view) + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + view.showContextMenu(); + } else { + showPopupHoneycomb(view); + } + } + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + private void showPopupHoneycomb(View view) { + android.widget.PopupMenu popupMenu = new android.widget.PopupMenu(getActivity(), view); + CacheMenuHandler.addMenuItems(new MenuInflater(getActivity()), popupMenu.getMenu(), cache); + popupMenu.setOnMenuItemClickListener( + new android.widget.PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + return AbstractDialogFragment.this.onMenuItemClick(item); + } + } + ); + popupMenu.show(); + } + + protected void showPopupCompat(View view) + { + PopupMenu popupMenu = new PopupMenu(getActivity(), view); + + // Directly instantiate SupportMenuInflater instead of getActivity().getMenuinflator + // getMenuinflator will throw a NPE since it tries to get the not displayed ActionBar + // menuinflator = getActivity().getMenuInflater(); + // MenuInflater menuinflator = new SupportMenuInflater(getActivity()); + CacheMenuHandler.addMenuItems(popupMenu.getMenuInflater(), popupMenu.getMenu(), cache); + popupMenu.setOnMenuItemClickListener(this); + popupMenu.show(); + } + + + protected void init() + { + cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); + + if (cache == null) { + ((AbstractActivity) getActivity()).showToast(res.getString(R.string.err_detail_cache_find)); + + getActivity().finish(); + return; + } + + geocode = cache.getGeocode(); + } + + @Override + public void onResume() { + super.onResume(); + this.resumeSubscription = geoUpdate.start(GeoDirHandler.UPDATE_GEODATA); + init(); + } + + + @Override + public void onPause() { + resumeSubscription.unsubscribe(); + super.onPause(); + } + + + private void aquireGCVote() { + if (!Settings.isRatingWanted()) { + return; + } + if (!cache.supportsGCVote()) { + return; + } + AndroidObservable.bindActivity(getActivity(), Observable.defer(new Func0<Observable<GCVoteRating>>() { + @Override + public Observable<GCVoteRating> call() { + final GCVoteRating rating = GCVote.getRating(cache.getGuid(), geocode); + return rating != null ? Observable.just(rating) : Observable.<GCVoteRating>empty(); + } + })).subscribe(new Action1<GCVoteRating>() { + @Override + public void call(final GCVoteRating rating) { + cache.setRating(rating.getRating()); + cache.setVotes(rating.getVotes()); + DataStore.saveChangedCache(cache); + details.addRating(cache); + } + }, Schedulers.io()); + } + + protected final void addCacheDetails() { + assert cache != null; + // cache type + final String cacheType = cache.getType().getL10n(); + final String cacheSize = cache.getSize() != CacheSize.UNKNOWN ? " (" + cache.getSize().getL10n() + ")" : ""; + details.add(R.string.cache_type, cacheType + cacheSize); + + details.add(R.string.cache_geocode, cache.getGeocode()); + details.addCacheState(cache); + + details.addDistance(cache, cacheDistance); + cacheDistance = details.getValueView(); + + details.addDifficulty(cache); + details.addTerrain(cache); + details.addEventDate(cache); + + // rating + if (cache.getRating() > 0) { + details.addRating(cache); + } else { + aquireGCVote(); + } + + // favorite count + details.add(R.string.cache_favorite, cache.getFavoritePoints() + "×"); + + // more details + final Button buttonMore = (Button) getView().findViewById(R.id.more_details); + + buttonMore.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View arg0) { + CacheDetailActivity.startActivity(getActivity(), geocode); + getActivity().finish(); + } + }); + + /* Only working combination as it seems */ + registerForContextMenu(buttonMore); + } + + public final void showToast(String text) { + ActivityMixin.showToast(getActivity(), text); + } + + private final GeoDirHandler geoUpdate = new GeoDirHandler() { + + @Override + public void updateGeoData(final IGeoData geo) { + try { + if (geo.getCoords() != null && cache != null && cache.getCoords() != null) { + cacheDistance.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(cache.getCoords()))); + cacheDistance.bringToFront(); + } + onUpdateGeoData(geo); + } catch (final RuntimeException e) { + Log.w("Failed to UpdateLocation location."); + } + } + }; + + public void onUpdateGeoData(final IGeoData geo) { + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + CacheMenuHandler.addMenuItems(inflater, menu, cache); + + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + CacheMenuHandler.addMenuItems(new MenuInflater(getActivity()), menu, cache); + for (int i=0;i<menu.size();i++) { + MenuItem m = menu.getItem(i); + m.setOnMenuItemClickListener(this); + } + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + return onOptionsItemSelected(item); + } + + + @Override + public boolean onMenuItemClick(MenuItem menuItem) { + return onOptionsItemSelected(menuItem); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (CacheMenuHandler.onMenuItemSelected(item, this, cache)) { + return true; + } + if (LoggingUI.onMenuItemSelected(item, getActivity(), cache)) { + return true; + } + + return super.onOptionsItemSelected(item); + } + + @Override + public void onPrepareOptionsMenu(Menu menu) { + super.onPrepareOptionsMenu(menu); + + try { + CacheMenuHandler.onPrepareOptionsMenu(menu, cache); + LoggingUI.onPrepareOptionsMenu(menu, cache); + } catch (final RuntimeException e) { + // nothing + } + } + + + protected abstract Geopoint getCoordinates(); + + protected abstract void startDefaultNavigation2(); + + + @Override + public void cachesAround() { + final Geopoint coords = getCoordinates(); + if (coords == null) { + showToast(res.getString(R.string.err_location_unknown)); + return; + } + CacheListActivity.startActivityCoordinates((AbstractActivity) getActivity(), coords); + getActivity().finish(); + } + + @Override + public void onCancel(DialogInterface dialog) { + super.onCancel(dialog); + getActivity().finish(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + } +} diff --git a/main/src/cgeo/geocaching/AbstractLoggingActivity.java b/main/src/cgeo/geocaching/AbstractLoggingActivity.java index c3ba7d2..3b0f78d 100644 --- a/main/src/cgeo/geocaching/AbstractLoggingActivity.java +++ b/main/src/cgeo/geocaching/AbstractLoggingActivity.java @@ -1,6 +1,6 @@ package cgeo.geocaching; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.gc.GCConnector; @@ -19,7 +19,7 @@ import android.view.MenuItem; import android.view.SubMenu; import android.widget.EditText; -public abstract class AbstractLoggingActivity extends AbstractActivity { +public abstract class AbstractLoggingActivity extends AbstractActionBarActivity { @Override public boolean onCreateOptionsMenu(final Menu menu) { diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java deleted file mode 100644 index 88cad01..0000000 --- a/main/src/cgeo/geocaching/AbstractPopupActivity.java +++ /dev/null @@ -1,260 +0,0 @@ -package cgeo.geocaching; - -import cgeo.geocaching.activity.AbstractActivity; -import cgeo.geocaching.activity.ActivityMixin; -import cgeo.geocaching.enumerations.CacheSize; -import cgeo.geocaching.enumerations.LoadFlags; -import cgeo.geocaching.gcvote.GCVote; -import cgeo.geocaching.gcvote.GCVoteRating; -import cgeo.geocaching.geopoint.Geopoint; -import cgeo.geocaching.geopoint.Units; -import cgeo.geocaching.sensors.GeoDirHandler; -import cgeo.geocaching.sensors.IGeoData; -import cgeo.geocaching.settings.Settings; -import cgeo.geocaching.ui.CacheDetailsCreator; -import cgeo.geocaching.ui.LoggingUI; -import cgeo.geocaching.utils.Log; - -import org.apache.commons.lang3.StringUtils; - -import rx.Observable; -import rx.android.observables.AndroidObservable; -import rx.functions.Action1; -import rx.functions.Func0; -import rx.schedulers.Schedulers; - -import android.graphics.Rect; -import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.View.OnLongClickListener; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.TextView; - -public abstract class AbstractPopupActivity extends AbstractActivity implements CacheMenuHandler.ActivityInterface { - - protected Geocache cache = null; - protected String geocode = null; - protected CacheDetailsCreator details; - - private TextView cacheDistance = null; - private final int layout; - - private final GeoDirHandler geoUpdate = new GeoDirHandler() { - - @Override - public void updateGeoData(final IGeoData geo) { - try { - if (geo.getCoords() != null && cache != null && cache.getCoords() != null) { - cacheDistance.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(cache.getCoords()))); - cacheDistance.bringToFront(); - } - onUpdateGeoData(geo); - } catch (final RuntimeException e) { - Log.w("Failed to UpdateLocation location."); - } - } - }; - - /** - * Callback to run when new location information is available. - * This may be overridden by deriving classes. The default implementation does nothing. - * - * @param geo - * the new data - */ - public void onUpdateGeoData(final IGeoData geo) { - } - - protected AbstractPopupActivity(int layout) { - this.layout = layout; - } - - private void aquireGCVote() { - if (!Settings.isRatingWanted()) { - return; - } - if (!cache.supportsGCVote()) { - return; - } - AndroidObservable.bindActivity(this, Observable.defer(new Func0<Observable<GCVoteRating>>() { - @Override - public Observable<GCVoteRating> call() { - final GCVoteRating rating = GCVote.getRating(cache.getGuid(), geocode); - return rating != null ? Observable.just(rating) : Observable.<GCVoteRating>empty(); - } - })).subscribe(new Action1<GCVoteRating>() { - @Override - public void call(final GCVoteRating rating) { - cache.setRating(rating.getRating()); - cache.setVotes(rating.getVotes()); - DataStore.saveChangedCache(cache); - details.addRating(cache); - } - }, Schedulers.io()); - } - - protected void init() { - cache = DataStore.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB); - - if (cache == null) { - showToast(res.getString(R.string.err_detail_cache_find)); - - finish(); - return; - } - - geocode = cache.getGeocode(); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - // set theme - this.setTheme(ActivityMixin.getDialogTheme()); - // set layout - setContentView(layout); - - // get parameters - final Bundle extras = getIntent().getExtras(); - if (extras != null) { - geocode = extras.getString(Intents.EXTRA_GEOCODE); - } - - if (StringUtils.isBlank(geocode)) { - showToast(res.getString(R.string.err_detail_cache_find)); - - finish(); - return; - } - - final ImageView defaultNavigationImageView = (ImageView) findViewById(R.id.defaultNavigation); - defaultNavigationImageView.setOnLongClickListener(new OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - startDefaultNavigation2(); - return true; - } - }); - - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - CacheMenuHandler.addMenuItems(this, menu, cache); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (CacheMenuHandler.onMenuItemSelected(item, this, cache)) { - return true; - } - if (LoggingUI.onMenuItemSelected(item, this, cache)) { - return true; - } - - return true; - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - super.onPrepareOptionsMenu(menu); - - try { - CacheMenuHandler.onPrepareOptionsMenu(menu, cache); - LoggingUI.onPrepareOptionsMenu(menu, cache); - } catch (final RuntimeException e) { - // nothing - } - - return true; - } - - protected abstract Geopoint getCoordinates(); - - @Override - public void onResume() { - super.onResume(geoUpdate.start(GeoDirHandler.UPDATE_GEODATA)); - init(); - } - - @Override - public boolean onTouchEvent(final MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_UP) { - final Rect r = new Rect(0, 0, 0, 0); - getWindow().getDecorView().getHitRect(r); - if (!r.contains((int) event.getX(), (int) event.getY())) { - finish(); - return true; - } - } - return super.onTouchEvent(event); - } - - protected abstract void startDefaultNavigation2(); - - protected final void addCacheDetails() { - assert cache != null; - // cache type - final String cacheType = cache.getType().getL10n(); - final String cacheSize = cache.getSize() != CacheSize.UNKNOWN ? " (" + cache.getSize().getL10n() + ")" : ""; - details.add(R.string.cache_type, cacheType + cacheSize); - - details.add(R.string.cache_geocode, cache.getGeocode()); - details.addCacheState(cache); - - details.addDistance(cache, cacheDistance); - cacheDistance = details.getValueView(); - - details.addDifficulty(cache); - details.addTerrain(cache); - details.addEventDate(cache); - - // rating - if (cache.getRating() > 0) { - details.addRating(cache); - } else { - aquireGCVote(); - } - - // favorite count - details.add(R.string.cache_favorite, cache.getFavoritePoints() + "×"); - - // more details - final Button buttonMore = (Button) findViewById(R.id.more_details); - buttonMore.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View arg0) { - CacheDetailActivity.startActivity(AbstractPopupActivity.this, geocode); - finish(); - } - }); - } - - @Override - public void cachesAround() { - final Geopoint coords = getCoordinates(); - if (coords == null) { - showToast(res.getString(R.string.err_location_unknown)); - return; - } - CacheListActivity.startActivityCoordinates(this, coords); - finish(); - } - - /** - * @param view - * unused here but needed since this method is referenced from XML layout - */ - public final void goDefaultNavigation(View view) { - navigateTo(); - finish(); - } - -} diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 7d231c9..2af9f95 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -101,6 +101,7 @@ import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.ViewParent; +import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; @@ -272,15 +273,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc // nothing, we lost the window } - final ImageView defaultNavigationImageView = (ImageView) findViewById(R.id.defaultNavigation); - defaultNavigationImageView.setOnLongClickListener(new OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - startDefaultNavigation2(); - return true; - } - }); - final int pageToOpen = savedInstanceState != null ? savedInstanceState.getInt(STATE_PAGE_INDEX, 0) : Settings.isOpenLastDetailsPage() ? Settings.getLastDetailsPage() : 1; @@ -510,7 +502,7 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } } - return true; + return super.onOptionsItemSelected(item); } private static final class CacheDetailsGeoDirHandler extends GeoDirHandler { @@ -609,11 +601,12 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc // action bar: title and icon if (StringUtils.isNotBlank(cache.getName())) { - setTitle(cache.getName() + " (" + cache.getGeocode() + ')'); + getSupportActionBar().setTitle(cache.getName() + " (" + cache.getGeocode() + ')'); } else { - setTitle(cache.getGeocode()); + getSupportActionBar().setTitle(cache.getGeocode()); } - ((TextView) findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(cache.getType().markerId), null, null, null); + + getSupportActionBar().setIcon(getResources().getDrawable(cache.getType().markerId)); // reset imagesList so Images view page will be redrawn imagesList = null; @@ -632,13 +625,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } /** - * Tries to navigate to the {@link Geocache} of this activity. - */ - private void startDefaultNavigation2() { - NavigationAppFactory.startDefaultNavigationApplication(2, this, cache); - } - - /** * Wrapper for the referenced method in the xml-layout. */ public void goDefaultNavigation(@SuppressWarnings("unused") View view) { @@ -2112,9 +2098,9 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } static void updateOfflineBox(final View view, final Geocache cache, final Resources res, - final OnClickListener refreshCacheClickListener, - final OnClickListener dropCacheClickListener, - final OnClickListener storeCacheClickListener) { + final OnClickListener refreshCacheClickListener, + final OnClickListener dropCacheClickListener, + final OnClickListener storeCacheClickListener) { // offline use final TextView offlineText = (TextView) view.findViewById(R.id.offline_text); final Button offlineRefresh = (Button) view.findViewById(R.id.offline_refresh); diff --git a/main/src/cgeo/geocaching/CacheListActivity.java b/main/src/cgeo/geocaching/CacheListActivity.java index c45d77d..fa51137 100644 --- a/main/src/cgeo/geocaching/CacheListActivity.java +++ b/main/src/cgeo/geocaching/CacheListActivity.java @@ -18,6 +18,7 @@ import cgeo.geocaching.files.GPXImporter; import cgeo.geocaching.filter.FilterUserInterface; import cgeo.geocaching.filter.IFilter; import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.list.AbstractList; import cgeo.geocaching.list.PseudoList; import cgeo.geocaching.list.StoredList; import cgeo.geocaching.loaders.AbstractSearchLoader; @@ -71,6 +72,7 @@ import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.res.Configuration; +import android.content.res.Resources; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; @@ -79,13 +81,17 @@ import android.os.Message; import android.provider.OpenableColumns; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; +import android.support.v7.app.ActionBar; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.widget.AdapterView.AdapterContextMenuInfo; +import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; @@ -254,20 +260,30 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA } } + private static String getCacheNumberString(Resources res, int count) + { + return res.getQuantityString(R.plurals.cache_counts, count, count); + } + protected void updateTitle() { - final ArrayList<Integer> numbers = new ArrayList<Integer>(); + + getSupportActionBar().setTitle(title); + + final ArrayList<String> numbers = new ArrayList<String>(); if (adapter.isFiltered()) { - numbers.add(adapter.getCount()); + numbers.add(getCacheNumberString(getResources(), adapter.getCount())); } if (search != null) { - numbers.add(search.getCount()); + numbers.add(getCacheNumberString(getResources(), search.getCount())); } if (numbers.isEmpty()) { - setTitle(title); + getSupportActionBar().setSubtitle(null); } else { - setTitle(title + " [" + StringUtils.join(numbers, '/') + ']'); + getSupportActionBar().setSubtitle(StringUtils.join(numbers, '/')); } + + refreshSpinnerAdapter(); } private final CancellableHandler loadDetailsHandler = new CancellableHandler() { @@ -378,7 +394,9 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setTheme(); + setContentView(R.layout.cacheslist_activity); // get parameters @@ -398,22 +416,16 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA } } - // Add the list selection in code. This way we can leave the XML layout of the action bar the same as for other activities. - final View titleBar = findViewById(R.id.actionbar_title); - titleBar.setClickable(true); - titleBar.setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - selectList(); - } - }); - setTitle(title); + initAdapter(); prepareFilterBar(); + if (type.canSwitch) { + initActionBarSpinner(); + } + currentLoader = (AbstractSearchLoader) getSupportLoaderManager().initLoader(type.getLoaderId(), extras, this); // init @@ -429,8 +441,102 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA if (isInvokedFromAttachment()) { importGpxAttachement(); } + + + + } + + static class CacheArrayAdapter extends ArrayAdapter<AbstractList> { + + static class ViewHolder { + TextView title; + TextView subtitle; + } + + private final Context mContext; + + public CacheArrayAdapter(Context context, int resource) { + super(context, resource); + mContext = context; + } + + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + return getCustomView(position, convertView, parent); + } + + + @Override + public View getDropDownView(int position, View convertView, ViewGroup parent) { + return getCustomView(position, convertView, parent); + } + + public View getCustomView(final int position, final View convertView, final ViewGroup parent) { + + View resultView = convertView; + LayoutInflater inflater = + (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + + ViewHolder holder; + if (resultView == null) { + resultView = inflater.inflate(R.layout.cachelist_spinneritem, parent, false); + holder = new ViewHolder(); + holder.title = (TextView) resultView.findViewById(android.R.id.text1); + holder.subtitle = (TextView) resultView.findViewById(android.R.id.text2); + + resultView.setTag(holder); + } else { + holder = (ViewHolder) resultView.getTag(); + } + + AbstractList list = getItem(position); + holder.title.setText(list.getTitle()); + if (list.getCount() >= 0) { + holder.subtitle.setVisibility(View.VISIBLE); + holder.subtitle.setText(getCacheNumberString(mContext.getResources(),list.getCount())); + } else { + holder.subtitle.setVisibility(View.GONE); + } + + return resultView; + } } + CacheArrayAdapter mCacheListSpinnerAdapter; + + private void initActionBarSpinner() { + mCacheListSpinnerAdapter = new CacheArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item); + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); + getSupportActionBar().setDisplayShowTitleEnabled(false); + getSupportActionBar().setListNavigationCallbacks(mCacheListSpinnerAdapter, new ActionBar.OnNavigationListener() { + @Override + public boolean onNavigationItemSelected(int i, long l) { + int newListId = mCacheListSpinnerAdapter.getItem(i).id; + if (newListId != listId) { + switchListById(newListId); + } + return true; + } + }); + } + + private void refreshSpinnerAdapter() { + /* If the activity does not use the Spinner this will be null */ + if (mCacheListSpinnerAdapter==null) { + return; + } + mCacheListSpinnerAdapter.clear(); + + AbstractList list = AbstractList.getListById(listId); + + for (AbstractList l: StoredList.UserInterface.getMenuLists(false, PseudoList.NEW_LIST.id)) { + mCacheListSpinnerAdapter.add(l); + } + + getSupportActionBar().setSelectedNavigationItem(mCacheListSpinnerAdapter.getPosition(list)); + } @Override public void onConfigurationChanged(Configuration newConfig) { @@ -617,7 +723,13 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA @Override public boolean onOptionsItemSelected(MenuItem item) { + if (super.onOptionsItemSelected(item)) { + return true; + } switch (item.getItemId()) { + case R.id.menu_show_on_map: + goMap(); + return true; case R.id.menu_switch_select_mode: adapter.switchSelectMode(); invalidateOptionsMenuCompatible(); @@ -645,6 +757,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA return false; case R.id.menu_create_list: new StoredList.UserInterface(this).promptForListCreation(getListSwitchingRunnable(), newListName); + refreshSpinnerAdapter(); invalidateOptionsMenuCompatible(); return false; case R.id.menu_drop_list: @@ -1366,6 +1479,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA private void removeListInternal() { if (DataStore.removeList(listId)) { showToast(res.getString(R.string.list_dialog_remove_ok)); + refreshSpinnerAdapter(); switchListById(StoredList.STANDARD_LIST_ID); } else { showToast(res.getString(R.string.list_dialog_remove_err)); @@ -1394,11 +1508,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA }); } - /** - * @param view - * unused here but needed since this method is referenced from XML layout - */ - public void goMap(View view) { + public void goMap() { if (!cacheToShow()) { return; } @@ -1414,6 +1524,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA } private void refreshCurrentList() { + refreshSpinnerAdapter(); switchListById(listId); } @@ -1576,6 +1687,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA break; case HISTORY: title = res.getString(R.string.caches_history); + listId = PseudoList.HISTORY_LIST.id; loader = new HistoryGeocacheListLoader(app, coords); break; case NEAREST: diff --git a/main/src/cgeo/geocaching/CacheMenuHandler.java b/main/src/cgeo/geocaching/CacheMenuHandler.java index cfe9eeb..5b0fdba 100644 --- a/main/src/cgeo/geocaching/CacheMenuHandler.java +++ b/main/src/cgeo/geocaching/CacheMenuHandler.java @@ -5,7 +5,11 @@ import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.ui.AbstractUIFactory; import android.app.Activity; +import android.support.v4.app.Fragment; +import android.support.v4.view.MenuItemCompat; +import android.support.v7.widget.ShareActionProvider; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; /** @@ -19,7 +23,7 @@ public class CacheMenuHandler extends AbstractUIFactory { * Methods to be implemented by the activity to react to the cache menu selections. * */ - protected interface ActivityInterface { + interface ActivityInterface { public void navigateTo(); public void showNavigationMenu(); @@ -29,8 +33,14 @@ public class CacheMenuHandler extends AbstractUIFactory { } public static boolean onMenuItemSelected(MenuItem item, CacheMenuHandler.ActivityInterface activityInterface, Geocache cache) { - assert activityInterface instanceof Activity; - final Activity activity = (Activity) activityInterface; + assert activityInterface instanceof Activity || activityInterface instanceof Fragment; + final Activity activity; + if (activityInterface instanceof Activity) { + activity = (Activity) activityInterface; + } else { + activity = ((Fragment)activityInterface).getActivity(); + } + switch (item.getItemId()) { case R.id.menu_default_navigation: activityInterface.navigateTo(); @@ -68,10 +78,22 @@ public class CacheMenuHandler extends AbstractUIFactory { menu.findItem(R.id.menu_show_in_browser).setVisible(cache.canOpenInBrowser()); menu.findItem(R.id.menu_default_navigation).setTitle(NavigationAppFactory.getDefaultNavigationApplication().getName()); + + MenuItem shareItem = menu.findItem(R.id.menu_share); + ShareActionProvider shareActionProvider = (ShareActionProvider) + MenuItemCompat.getActionProvider(shareItem); + if(shareActionProvider != null) { + shareActionProvider.setShareIntent(cache.getIntent()); + } + } - public static void addMenuItems(Activity activity, Menu menu, Geocache cache) { - activity.getMenuInflater().inflate(R.menu.cache_options, menu); + public static void addMenuItems(MenuInflater inflater, Menu menu, Geocache cache) { + inflater.inflate(R.menu.cache_options, menu); onPrepareOptionsMenu(menu, cache); } + + public static void addMenuItems(Activity activity, Menu menu, Geocache cache) { + addMenuItems(activity.getMenuInflater(), menu, cache); + } } diff --git a/main/src/cgeo/geocaching/CachePopup.java b/main/src/cgeo/geocaching/CachePopup.java index b72b67c..d886554 100644 --- a/main/src/cgeo/geocaching/CachePopup.java +++ b/main/src/cgeo/geocaching/CachePopup.java @@ -1,14 +1,7 @@ package cgeo.geocaching; -import cgeo.geocaching.activity.Progress; -import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; -import cgeo.geocaching.geopoint.Geopoint; -import cgeo.geocaching.list.StoredList; -import cgeo.geocaching.network.Network; -import cgeo.geocaching.settings.Settings; -import cgeo.geocaching.ui.CacheDetailsCreator; -import cgeo.geocaching.utils.CancellableHandler; -import cgeo.geocaching.utils.Log; +import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.ActivityMixin; import org.apache.commons.lang3.StringUtils; @@ -18,187 +11,60 @@ import rx.schedulers.Schedulers; import android.content.Context; import android.content.Intent; -import android.content.res.Configuration; -import android.os.Handler; -import android.os.Message; -import android.view.View; -import android.widget.LinearLayout; -import android.widget.TextView; - -public class CachePopup extends AbstractPopupActivity { - private final Progress progress = new Progress(); - - private class StoreCacheHandler extends CancellableHandler { - private final int progressMessage; - - public StoreCacheHandler(final int progressMessage) { - this.progressMessage = progressMessage; - } - - @Override - public void handleRegularMessage(Message msg) { - if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) { - updateStatusMsg((String) msg.obj); - } else { - init(); - } - } - - private void updateStatusMsg(final String msg) { - progress.setMessage(res.getString(progressMessage) - + "\n\n" - + msg); - } - } - - private class DropCacheHandler extends Handler { - @Override - public void handleMessage(Message msg) { - CachePopup.this.finish(); +import android.os.Bundle; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.view.Window; + +/** + * Created by arne on 23.04.2014. + */ +public class CachePopup extends AbstractActivity { + + protected String geocode = null; + + + void showDialog() { + // DialogFragment.show() will take care of adding the fragment + // in a transaction. We also want to remove any currently showing + // dialog, so make our own transaction and take care of that here. + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); + if (prev != null) { + ft.remove(prev); } - } + ft.addToBackStack(null); - public CachePopup() { - super(R.layout.popup); + // Create and show the dialog. + DialogFragment newFragment = CachePopupFragment.newInstance(geocode); + newFragment.show(ft, "dialog"); } @Override - public void showNavigationMenu() { - NavigationAppFactory.showNavigationMenu(this, cache, null, null); - } + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + supportRequestWindowFeature(Window.FEATURE_NO_TITLE); + this.setTheme(ActivityMixin.getDialogTheme()); - @Override - protected void init() { - super.init(); - try { - if (StringUtils.isNotBlank(cache.getName())) { - setTitle(cache.getName()); - } else { - setTitle(geocode); - } - - // actionbar icon - ((TextView) findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(cache.getType().markerId), null, null, null); - - details = new CacheDetailsCreator(this, (LinearLayout) findViewById(R.id.details_list)); - addCacheDetails(); - - // offline use - CacheDetailActivity.updateOfflineBox(findViewById(android.R.id.content), cache, res, new RefreshCacheClickListener(), new DropCacheClickListener(), new StoreCacheClickListener()); - - } catch (Exception e) { - Log.e("CachePopup.init", e); + final Bundle extras = getIntent().getExtras(); + if (extras != null) { + geocode = extras.getString(Intents.EXTRA_GEOCODE); } - // cache is loaded. remove progress-popup if any there - progress.dismiss(); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - - init(); - } - - private class StoreCacheClickListener implements View.OnClickListener { - @Override - public void onClick(View arg0) { - if (progress.isShowing()) { - showToast(res.getString(R.string.err_detail_still_working)); - return; - } + if (StringUtils.isBlank(geocode)) { + showToast(res.getString(R.string.err_detail_cache_find)); - if (Settings.getChooseList()) { - // let user select list to store cache in - new StoredList.UserInterface(CachePopup.this).promptForListSelection(R.string.list_title, - new Action1<Integer>() { - @Override - public void call(final Integer selectedListId) { - storeCache(selectedListId); - } - }, true, StoredList.TEMPORARY_LIST_ID); - } else { - storeCache(StoredList.TEMPORARY_LIST_ID); - } - } - - protected void storeCache(final int listId) { - final StoreCacheHandler storeCacheHandler = new StoreCacheHandler(R.string.cache_dialog_offline_save_message); - progress.show(CachePopup.this, res.getString(R.string.cache_dialog_offline_save_title), res.getString(R.string.cache_dialog_offline_save_message), true, storeCacheHandler.cancelMessage()); - Schedulers.io().createWorker().schedule(new Action0() { - @Override - public void call() { - cache.store(listId, storeCacheHandler); - invalidateOptionsMenuCompatible(); - } - }); - } - } - - private class RefreshCacheClickListener implements View.OnClickListener { - @Override - public void onClick(View arg0) { - if (progress.isShowing()) { - showToast(res.getString(R.string.err_detail_still_working)); - return; - } - - if (!Network.isNetworkConnected(getApplicationContext())) { - showToast(getString(R.string.err_server)); - return; - } - - final StoreCacheHandler refreshCacheHandler = new StoreCacheHandler(R.string.cache_dialog_offline_save_message); - progress.show(CachePopup.this, res.getString(R.string.cache_dialog_refresh_title), res.getString(R.string.cache_dialog_refresh_message), true, refreshCacheHandler.cancelMessage()); - cache.refresh(refreshCacheHandler, Schedulers.io()); - } - } - - private class DropCacheClickListener implements View.OnClickListener { - @Override - public void onClick(View arg0) { - if (progress.isShowing()) { - showToast(res.getString(R.string.err_detail_still_working)); - return; - } - - final DropCacheHandler dropCacheHandler = new DropCacheHandler(); - progress.show(CachePopup.this, res.getString(R.string.cache_dialog_offline_drop_title), res.getString(R.string.cache_dialog_offline_drop_message), true, null); - cache.drop(dropCacheHandler, Schedulers.io()); - } - } - - @Override - public void navigateTo() { - NavigationAppFactory.startDefaultNavigationApplication(1, this, cache); - } - - /** - * Tries to navigate to the {@link Geocache} of this activity. - */ - @Override - protected void startDefaultNavigation2() { - if (cache == null || cache.getCoords() == null) { - showToast(res.getString(R.string.cache_coordinates_no)); + finish(); return; } - NavigationAppFactory.startDefaultNavigationApplication(2, this, cache); - finish(); + showDialog(); } - public static void startActivity(final Context context, final String geocode) { + public static void startActivity(Context context, String geocode) { final Intent popupIntent = new Intent(context, CachePopup.class); popupIntent.putExtra(Intents.EXTRA_GEOCODE, geocode); context.startActivity(popupIntent); } - - @Override - protected Geopoint getCoordinates() { - if (cache == null) { - return null; - } - return cache.getCoords(); - } } diff --git a/main/src/cgeo/geocaching/CachePopupFragment.java b/main/src/cgeo/geocaching/CachePopupFragment.java new file mode 100644 index 0000000..010d701 --- /dev/null +++ b/main/src/cgeo/geocaching/CachePopupFragment.java @@ -0,0 +1,229 @@ +package cgeo.geocaching; + +import cgeo.geocaching.activity.Progress; +import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; +import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.list.StoredList; +import cgeo.geocaching.network.Network; +import cgeo.geocaching.settings.Settings; +import cgeo.geocaching.ui.CacheDetailsCreator; +import cgeo.geocaching.utils.CancellableHandler; +import cgeo.geocaching.utils.Log; + +import org.apache.commons.lang3.StringUtils; + +import rx.functions.Action0; +import rx.functions.Action1; +import rx.schedulers.Schedulers; + +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.v4.app.DialogFragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class CachePopupFragment extends AbstractDialogFragment { + private final Progress progress = new Progress(); + + public static DialogFragment newInstance(String geocode) { + + Bundle args = new Bundle(); + args.putString(GEOCODE_ARG,geocode); + + DialogFragment f = new CachePopupFragment(); + f.setStyle(DialogFragment.STYLE_NO_TITLE,0); + f.setArguments(args); + + return f; + } + + private class StoreCacheHandler extends CancellableHandler { + private final int progressMessage; + + public StoreCacheHandler(final int progressMessage) { + this.progressMessage = progressMessage; + } + + @Override + public void handleRegularMessage(Message msg) { + if (UPDATE_LOAD_PROGRESS_DETAIL == msg.what && msg.obj instanceof String) { + updateStatusMsg((String) msg.obj); + } else { + init(); + } + } + + private void updateStatusMsg(final String msg) { + progress.setMessage(res.getString(progressMessage) + + "\n\n" + + msg); + } + } + + private class DropCacheHandler extends Handler { + @Override + public void handleMessage(Message msg) { + getActivity().finish(); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.popup, container, false); + initCustomActionBar(v); + return v; + } + + @Override + protected void init() { + super.init(); + + try { + if (StringUtils.isNotBlank(cache.getName())) { + setTitle(cache.getName()); + } else { + setTitle(geocode); + } + + ((TextView) getView().findViewById(R.id.actionbar_title)).setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(cache.getType().markerId), null, null, null); + + details = new CacheDetailsCreator(getActivity(), (LinearLayout) getView().findViewById(R.id.details_list)); + + addCacheDetails(); + + // offline use + CacheDetailActivity.updateOfflineBox(getView(), cache, res, new RefreshCacheClickListener(), new DropCacheClickListener(), new StoreCacheClickListener()); + + } catch (Exception e) { + Log.e("CachePopupFragment.init", e); + } + + // cache is loaded. remove progress-popup if any there + progress.dismiss(); + } + + + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + + init(); + } + + private class StoreCacheClickListener implements View.OnClickListener { + @Override + public void onClick(View arg0) { + if (progress.isShowing()) { + showToast(res.getString(R.string.err_detail_still_working)); + return; + } + + if (Settings.getChooseList()) { + // let user select list to store cache in + new StoredList.UserInterface(getActivity()).promptForListSelection(R.string.list_title, + new Action1<Integer>() { + @Override + public void call(final Integer selectedListId) { + storeCache(selectedListId); + } + }, true, StoredList.TEMPORARY_LIST_ID); + } else { + storeCache(StoredList.TEMPORARY_LIST_ID); + } + } + + protected void storeCache(final int listId) { + final StoreCacheHandler storeCacheHandler = new StoreCacheHandler(R.string.cache_dialog_offline_save_message); + progress.show(getActivity(), res.getString(R.string.cache_dialog_offline_save_title), res.getString(R.string.cache_dialog_offline_save_message), true, storeCacheHandler.cancelMessage()); + Schedulers.io().createWorker().schedule(new Action0() { + @Override + public void call() { + cache.store(listId, storeCacheHandler); + getActivity().supportInvalidateOptionsMenu(); + } + }); + } + } + + private class RefreshCacheClickListener implements View.OnClickListener { + @Override + public void onClick(View arg0) { + if (progress.isShowing()) { + showToast(res.getString(R.string.err_detail_still_working)); + return; + } + + if (!Network.isNetworkConnected(getActivity())) { + showToast(getString(R.string.err_server)); + return; + } + + final StoreCacheHandler refreshCacheHandler = new StoreCacheHandler(R.string.cache_dialog_offline_save_message); + progress.show(getActivity(), res.getString(R.string.cache_dialog_refresh_title), res.getString(R.string.cache_dialog_refresh_message), true, refreshCacheHandler.cancelMessage()); + cache.refresh(refreshCacheHandler, Schedulers.io()); + } + } + + private class DropCacheClickListener implements View.OnClickListener { + @Override + public void onClick(View arg0) { + if (progress.isShowing()) { + showToast(res.getString(R.string.err_detail_still_working)); + return; + } + + final DropCacheHandler dropCacheHandler = new DropCacheHandler(); + progress.show(getActivity(), res.getString(R.string.cache_dialog_offline_drop_title), res.getString(R.string.cache_dialog_offline_drop_message), true, null); + cache.drop(dropCacheHandler, Schedulers.io()); + } + } + + + @Override + public void navigateTo() { + NavigationAppFactory.startDefaultNavigationApplication(1, getActivity(), cache); + } + + @Override + public void showNavigationMenu() { + // TODO + } + + + /** + * Tries to navigate to the {@link cgeo.geocaching.Geocache} of this activity. + */ + @Override + protected void startDefaultNavigation2() { + if (cache == null || cache.getCoords() == null) { + showToast(res.getString(R.string.cache_coordinates_no)); + return; + } + NavigationAppFactory.startDefaultNavigationApplication(2, getActivity(), cache); + getActivity().finish(); + } + + public static void startActivity(final Context context, final String geocode) { + final Intent popupIntent = new Intent(context, CachePopup.class); + popupIntent.putExtra(Intents.EXTRA_GEOCODE, geocode); + context.startActivity(popupIntent); + } + + @Override + protected Geopoint getCoordinates() { + if (cache == null) { + return null; + } + return cache.getCoords(); + } + + +} diff --git a/main/src/cgeo/geocaching/CompassActivity.java b/main/src/cgeo/geocaching/CompassActivity.java index 36dcf27..e5c38a3 100644 --- a/main/src/cgeo/geocaching/CompassActivity.java +++ b/main/src/cgeo/geocaching/CompassActivity.java @@ -3,7 +3,7 @@ package cgeo.geocaching; import butterknife.ButterKnife; import butterknife.InjectView; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Units; @@ -38,7 +38,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -public class CompassActivity extends AbstractActivity { +public class CompassActivity extends AbstractActionBarActivity { private static final int COORDINATES_OFFSET = 10; diff --git a/main/src/cgeo/geocaching/CreateShortcutActivity.java b/main/src/cgeo/geocaching/CreateShortcutActivity.java index c18b6f4..ffcf81b 100644 --- a/main/src/cgeo/geocaching/CreateShortcutActivity.java +++ b/main/src/cgeo/geocaching/CreateShortcutActivity.java @@ -1,6 +1,6 @@ package cgeo.geocaching; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.list.PseudoList; import cgeo.geocaching.list.StoredList; @@ -10,7 +10,7 @@ import android.content.Intent; import android.content.Intent.ShortcutIconResource; import android.os.Bundle; -public class CreateShortcutActivity extends AbstractActivity { +public class CreateShortcutActivity extends AbstractActionBarActivity { @Override public void onCreate(Bundle savedInstanceState) { diff --git a/main/src/cgeo/geocaching/EditWaypointActivity.java b/main/src/cgeo/geocaching/EditWaypointActivity.java index 55de0a6..9bc46b3 100644 --- a/main/src/cgeo/geocaching/EditWaypointActivity.java +++ b/main/src/cgeo/geocaching/EditWaypointActivity.java @@ -1,6 +1,6 @@ package cgeo.geocaching; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.enumerations.CacheType; @@ -48,7 +48,7 @@ import java.util.EnumSet; import java.util.List; @EActivity -public class EditWaypointActivity extends AbstractActivity { +public class EditWaypointActivity extends AbstractActionBarActivity { private static final ArrayList<WaypointType> POSSIBLE_WAYPOINT_TYPES = new ArrayList<WaypointType>(WaypointType.ALL_TYPES_EXCEPT_OWN_AND_ORIGINAL); @ViewById(R.id.buttonLatitude) protected Button buttonLat; diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java index fdfdbb5..db36740 100644 --- a/main/src/cgeo/geocaching/Geocache.java +++ b/main/src/cgeo/geocaching/Geocache.java @@ -707,6 +707,12 @@ public class Geocache implements ICache, IWaypoint { return; } + final Intent intent = getIntent(); + + fromActivity.startActivity(Intent.createChooser(intent, res.getText(R.string.action_bar_share_title))); + } + + public Intent getIntent() { final StringBuilder subject = new StringBuilder("Geocache "); subject.append(geocode); if (StringUtils.isNotBlank(name)) { @@ -718,7 +724,7 @@ public class Geocache implements ICache, IWaypoint { intent.putExtra(Intent.EXTRA_SUBJECT, subject.toString()); intent.putExtra(Intent.EXTRA_TEXT, getUrl()); - fromActivity.startActivity(Intent.createChooser(intent, res.getText(R.string.action_bar_share_title))); + return intent; } public String getUrl() { diff --git a/main/src/cgeo/geocaching/ImageSelectActivity.java b/main/src/cgeo/geocaching/ImageSelectActivity.java index b5fb38e..a64b4cf 100644 --- a/main/src/cgeo/geocaching/ImageSelectActivity.java +++ b/main/src/cgeo/geocaching/ImageSelectActivity.java @@ -3,7 +3,7 @@ package cgeo.geocaching; import butterknife.ButterKnife; import butterknife.InjectView; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.files.LocalStorage; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.ui.dialog.Dialogs; @@ -37,7 +37,7 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; -public class ImageSelectActivity extends AbstractActivity { +public class ImageSelectActivity extends AbstractActionBarActivity { @InjectView(R.id.caption) protected EditText captionView; @InjectView(R.id.description) protected EditText descriptionView; diff --git a/main/src/cgeo/geocaching/ImagesActivity.java b/main/src/cgeo/geocaching/ImagesActivity.java index 3da1ade..bc2616b 100644 --- a/main/src/cgeo/geocaching/ImagesActivity.java +++ b/main/src/cgeo/geocaching/ImagesActivity.java @@ -1,6 +1,6 @@ package cgeo.geocaching; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.settings.Settings; import cgeo.geocaching.ui.ImagesList; import cgeo.geocaching.ui.ImagesList.ImageType; @@ -19,7 +19,7 @@ import android.view.View; import java.util.ArrayList; import java.util.List; -public class ImagesActivity extends AbstractActivity { +public class ImagesActivity extends AbstractActionBarActivity { private boolean offline; private ArrayList<Image> imageNames; diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java index 42dd58d..d8958b4 100644 --- a/main/src/cgeo/geocaching/MainActivity.java +++ b/main/src/cgeo/geocaching/MainActivity.java @@ -3,7 +3,7 @@ package cgeo.geocaching; import butterknife.ButterKnife; import butterknife.InjectView; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.capability.ILogin; import cgeo.geocaching.enumerations.CacheType; @@ -25,7 +25,9 @@ import cgeo.geocaching.utils.Version; import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult; + import org.apache.commons.lang3.StringUtils; + import rx.Observable; import rx.Observable.OnSubscribe; import rx.Subscriber; @@ -37,6 +39,7 @@ import rx.subscriptions.Subscriptions; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.SearchManager; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; @@ -45,6 +48,8 @@ import android.location.Geocoder; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.support.v4.view.MenuItemCompat; +import android.support.v7.widget.SearchView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; @@ -61,7 +66,7 @@ import java.util.Comparator; import java.util.List; import java.util.Locale; -public class MainActivity extends AbstractActivity { +public class MainActivity extends AbstractActionBarActivity { @InjectView(R.id.nav_satellites) protected TextView navSatellites; @InjectView(R.id.filter_button_title)protected TextView filterTitle; @InjectView(R.id.map) protected ImageView findOnMap; @@ -189,6 +194,10 @@ public class MainActivity extends AbstractActivity { public void onCreate(final Bundle savedInstanceState) { // don't call the super implementation with the layout argument, as that would set the wrong theme super.onCreate(savedInstanceState); + + // Disable the up navigation for this activity + getSupportActionBar().setDisplayHomeAsUpEnabled(false); + setContentView(R.layout.main_activity); ButterKnife.inject(this); @@ -262,6 +271,11 @@ public class MainActivity extends AbstractActivity { @Override public boolean onCreateOptionsMenu(final Menu menu) { getMenuInflater().inflate(R.menu.main_activity_options, menu); + SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); + MenuItem searchItem = menu.findItem(R.id.menu_gosearch); + SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); + searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); + return true; } @@ -303,6 +317,9 @@ public class MainActivity extends AbstractActivity { } }); return true; + case R.id.menu_gosearch: + onSearchRequested(); + return true; default: return super.onOptionsItemSelected(item); } @@ -712,13 +729,4 @@ public class MainActivity extends AbstractActivity { public void showAbout(final View view) { startActivity(new Intent(this, AboutActivity.class)); } - - /** - * @param view - * unused here but needed since this method is referenced from XML layout - */ - public void goSearch(final View view) { - onSearchRequested(); - } - } diff --git a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java index 0a750e0..a4053dc 100644 --- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java +++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java @@ -4,7 +4,7 @@ import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.Optional; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.geopoint.DistanceParser; import cgeo.geocaching.geopoint.Geopoint; @@ -44,7 +44,7 @@ import android.widget.TextView; import java.util.List; -public class NavigateAnyPointActivity extends AbstractActivity { +public class NavigateAnyPointActivity extends AbstractActionBarActivity { @InjectView(R.id.historyList) protected ListView historyListView; @@ -363,7 +363,7 @@ public class NavigateAnyPointActivity extends AbstractActivity { NavigationAppFactory.showNavigationMenu(this, null, null, coords); return true; default: - return false; + return super.onOptionsItemSelected(item); } } diff --git a/main/src/cgeo/geocaching/SearchActivity.java b/main/src/cgeo/geocaching/SearchActivity.java index d3bb2d8..f1f09d4 100644 --- a/main/src/cgeo/geocaching/SearchActivity.java +++ b/main/src/cgeo/geocaching/SearchActivity.java @@ -3,7 +3,7 @@ package cgeo.geocaching; import butterknife.ButterKnife; import butterknife.InjectView; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.connector.capability.ISearchByGeocode; @@ -37,7 +37,7 @@ import android.widget.Button; import java.util.Locale; -public class SearchActivity extends AbstractActivity { +public class SearchActivity extends AbstractActionBarActivity { @InjectView(R.id.buttonLatitude) protected Button buttonLatitude; @InjectView(R.id.buttonLongitude) protected Button buttonLongitude; diff --git a/main/src/cgeo/geocaching/StaticMapsActivity.java b/main/src/cgeo/geocaching/StaticMapsActivity.java index 16fce37..7474785 100644 --- a/main/src/cgeo/geocaching/StaticMapsActivity.java +++ b/main/src/cgeo/geocaching/StaticMapsActivity.java @@ -1,6 +1,6 @@ package cgeo.geocaching; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.utils.Log; @@ -25,7 +25,7 @@ import java.util.List; @EActivity @OptionsMenu(R.menu.static_maps_activity_options) -public class StaticMapsActivity extends AbstractActivity { +public class StaticMapsActivity extends AbstractActionBarActivity { private static final String EXTRAS_WAYPOINT = "waypoint"; private static final String EXTRAS_DOWNLOAD = "download"; @@ -169,10 +169,12 @@ public class StaticMapsActivity extends AbstractActivity { } public static void startActivity(final Context activity, final String geocode, final boolean download, final Waypoint waypoint) { + /* FIXME StaticMapsActivity_.IntentBuilder_ builder = StaticMapsActivity_.intent(activity).geocode(geocode).download(download); if (waypoint != null) { builder.waypointId(waypoint.getId()); } builder.start(); + */ } }
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java index 81d23c9..7dfc3c1 100644 --- a/main/src/cgeo/geocaching/TrackableActivity.java +++ b/main/src/cgeo/geocaching/TrackableActivity.java @@ -36,6 +36,7 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.support.v7.app.ActionBar; import android.text.Html; import android.view.ContextMenu; import android.view.LayoutInflater; @@ -322,9 +323,9 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi } private static class TrackableIconHandler extends Handler { - final private TextView view; + final private ActionBar view; - public TrackableIconHandler(TextView viewIn) { + public TrackableIconHandler(ActionBar viewIn) { view = viewIn; } @@ -333,7 +334,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi final BitmapDrawable image = (BitmapDrawable) message.obj; if (image != null && view != null) { image.setBounds(0, 0, view.getHeight(), view.getHeight()); - view.setCompoundDrawables(image, null, null, null); + view.setIcon(image); } } } @@ -392,7 +393,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi // action bar icon if (StringUtils.isNotBlank(trackable.getIconUrl())) { - final TrackableIconHandler iconHandler = new TrackableIconHandler(((TextView) findViewById(R.id.actionbar_title))); + final TrackableIconHandler iconHandler = new TrackableIconHandler(getSupportActionBar()); final TrackableIconThread iconThread = new TrackableIconThread(trackable.getIconUrl(), iconHandler); iconThread.start(); } diff --git a/main/src/cgeo/geocaching/UsefulAppsActivity.java b/main/src/cgeo/geocaching/UsefulAppsActivity.java index 39c527d..1159453 100644 --- a/main/src/cgeo/geocaching/UsefulAppsActivity.java +++ b/main/src/cgeo/geocaching/UsefulAppsActivity.java @@ -3,7 +3,7 @@ package cgeo.geocaching; import butterknife.ButterKnife; import butterknife.InjectView; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.ui.AbstractViewHolder; import android.app.Activity; @@ -18,7 +18,7 @@ import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; -public class UsefulAppsActivity extends AbstractActivity { +public class UsefulAppsActivity extends AbstractActionBarActivity { @InjectView(R.id.apps_list) protected ListView list; diff --git a/main/src/cgeo/geocaching/WaypointPopup.java b/main/src/cgeo/geocaching/WaypointPopup.java index 916ad4c..f1ffc1d 100644 --- a/main/src/cgeo/geocaching/WaypointPopup.java +++ b/main/src/cgeo/geocaching/WaypointPopup.java @@ -1,115 +1,35 @@ package cgeo.geocaching; -import butterknife.ButterKnife; -import butterknife.InjectView; - -import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; -import cgeo.geocaching.geopoint.Geopoint; -import cgeo.geocaching.geopoint.Units; -import cgeo.geocaching.sensors.IGeoData; -import cgeo.geocaching.ui.CacheDetailsCreator; -import cgeo.geocaching.utils.Log; - -import org.apache.commons.lang3.StringUtils; - import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.TextView; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.view.Window; -public class WaypointPopup extends AbstractPopupActivity { - @InjectView(R.id.actionbar_title) protected TextView actionBarTitle; - @InjectView(R.id.waypoint_details_list) protected LinearLayout waypointDetailsLayout; - @InjectView(R.id.edit) protected Button buttonEdit; - @InjectView(R.id.details_list) protected LinearLayout cacheDetailsLayout; +import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.ActivityMixin; +public class WaypointPopup extends AbstractActivity { private int waypointId = 0; - private Waypoint waypoint = null; - private TextView waypointDistance = null; - - public WaypointPopup() { - super(R.layout.waypoint_popup); - } + private String geocode; @Override - public void onCreate(final Bundle savedInstanceState) { + public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - ButterKnife.inject(this); - // get parameters - final Bundle extras = getIntent().getExtras(); - if (extras != null) { - waypointId = extras.getInt(Intents.EXTRA_WAYPOINT_ID); - } - } - - @Override - public void onUpdateGeoData(IGeoData geo) { - if (geo.getCoords() != null && waypoint != null && waypoint.getCoords() != null) { - waypointDistance.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(waypoint.getCoords()))); - waypointDistance.bringToFront(); - } - } - - @Override - protected void init() { - super.init(); - waypoint = DataStore.loadWaypoint(waypointId); - try { - if (StringUtils.isNotBlank(waypoint.getName())) { - setTitle(waypoint.getName()); - } else { - setTitle(waypoint.getGeocode()); - } - - actionBarTitle.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(waypoint.getWaypointType().markerId), null, null, null); - - details = new CacheDetailsCreator(this, waypointDetailsLayout); + supportRequestWindowFeature(Window.FEATURE_NO_TITLE); - //Waypoint geocode - details.add(R.string.cache_geocode, waypoint.getPrefix() + waypoint.getGeocode().substring(2)); - details.addDistance(waypoint, waypointDistance); - waypointDistance = details.getValueView(); - details.add(R.string.waypoint_note, waypoint.getNote()); + this.setTheme(ActivityMixin.getDialogTheme()); - buttonEdit.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View arg0) { - EditWaypointActivity.startActivityEditWaypoint(WaypointPopup.this, cache, waypoint.getId()); - finish(); - } - }); - - details = new CacheDetailsCreator(this, cacheDetailsLayout); - details.add(R.string.cache_name, cache.getName()); - - addCacheDetails(); - - } catch (Exception e) { - Log.e("WaypointPopup.init", e); + final Bundle extras = getIntent().getExtras(); + if (extras != null) { + waypointId = extras.getInt(Intents.EXTRA_WAYPOINT_ID); + geocode = extras.getString(Intents.EXTRA_GEOCODE); } - } - - @Override - public void navigateTo() { - NavigationAppFactory.startDefaultNavigationApplication(1, this, waypoint); - } + showDialog(); - /** - * Tries to navigate to the {@link Geocache} of this activity. - */ - @Override - protected void startDefaultNavigation2() { - if (waypoint == null || waypoint.getCoords() == null) { - showToast(res.getString(R.string.cache_coordinates_no)); - return; - } - NavigationAppFactory.startDefaultNavigationApplication(2, this, waypoint); - finish(); } public static void startActivity(final Context context, final int waypointId, final String geocode) { @@ -119,16 +39,22 @@ public class WaypointPopup extends AbstractPopupActivity { context.startActivity(popupIntent); } - @Override - public void showNavigationMenu() { - NavigationAppFactory.showNavigationMenu(this, null, waypoint, null); - } - @Override - protected Geopoint getCoordinates() { - if (waypoint == null) { - return null; + void showDialog() { + // DialogFragment.show() will take care of adding the fragment + // in a transaction. We also want to remove any currently showing + // dialog, so make our own transaction and take care of that here. + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); + if (prev != null) { + ft.remove(prev); } - return waypoint.getCoords(); + ft.addToBackStack(null); + + // Create and show the dialog. + DialogFragment newFragment = WaypointPopupFragment.newInstance(geocode, waypointId); + newFragment.show(ft, "dialog"); } + + } diff --git a/main/src/cgeo/geocaching/WaypointPopupFragment.java b/main/src/cgeo/geocaching/WaypointPopupFragment.java new file mode 100644 index 0000000..14daada --- /dev/null +++ b/main/src/cgeo/geocaching/WaypointPopupFragment.java @@ -0,0 +1,147 @@ +package cgeo.geocaching; + +import butterknife.ButterKnife; +import butterknife.InjectView; + +import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; +import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.geopoint.Units; +import cgeo.geocaching.sensors.IGeoData; +import cgeo.geocaching.ui.CacheDetailsCreator; +import cgeo.geocaching.utils.Log; + +import org.apache.commons.lang3.StringUtils; + +import android.os.Bundle; +import android.support.v4.app.DialogFragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class WaypointPopupFragment extends AbstractDialogFragment { + @InjectView(R.id.actionbar_title) protected TextView actionBarTitle; + @InjectView(R.id.waypoint_details_list) protected LinearLayout waypointDetailsLayout; + @InjectView(R.id.edit) protected Button buttonEdit; + @InjectView(R.id.details_list) protected LinearLayout cacheDetailsLayout; + + private int waypointId = 0; + private Waypoint waypoint = null; + private TextView waypointDistance = null; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.waypoint_popup, container, false); + initCustomActionBar(v); + ButterKnife.inject(this,v); + + return v; + } + + @Override + public void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + waypointId = getArguments().getInt(WAYPOINT_ARG); + } + + @Override + public void onUpdateGeoData(IGeoData geo) { + if (geo.getCoords() != null && waypoint != null && waypoint.getCoords() != null) { + waypointDistance.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(waypoint.getCoords()))); + waypointDistance.bringToFront(); + } + } + + @Override + protected void init() { + super.init(); + + waypoint = DataStore.loadWaypoint(waypointId); + try { + if (StringUtils.isNotBlank(waypoint.getName())) { + setTitle(waypoint.getName()); + } else { + setTitle(waypoint.getGeocode()); + } + + + actionBarTitle.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(waypoint.getWaypointType().markerId), null, null, null); + + //getSupportActionBar().setIcon(getResources().getDrawable(waypoint.getWaypointType().markerId)); + + details = new CacheDetailsCreator(getActivity(), waypointDetailsLayout); + + //Waypoint geocode + details.add(R.string.cache_geocode, waypoint.getPrefix() + waypoint.getGeocode().substring(2)); + details.addDistance(waypoint, waypointDistance); + waypointDistance = details.getValueView(); + details.add(R.string.waypoint_note, waypoint.getNote()); + + buttonEdit.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View arg0) { + EditWaypointActivity.startActivityEditWaypoint(getActivity(), cache, waypoint.getId()); + getActivity().finish(); + } + }); + + details = new CacheDetailsCreator(getActivity(), cacheDetailsLayout); + details.add(R.string.cache_name, cache.getName()); + + addCacheDetails(); + + } catch (Exception e) { + Log.e("WaypointPopup.init", e); + } + } + + @Override + public void navigateTo() { + NavigationAppFactory.startDefaultNavigationApplication(1, getActivity(), waypoint); + } + + /** + * Tries to navigate to the {@link Geocache} of this activity. + */ + @Override + public void startDefaultNavigation2() { + if (waypoint == null || waypoint.getCoords() == null) { + showToast(res.getString(R.string.cache_coordinates_no)); + return; + } + NavigationAppFactory.startDefaultNavigationApplication(2, getActivity(), waypoint); + getActivity().finish(); + } + + + + @Override + public void showNavigationMenu() { + NavigationAppFactory.showNavigationMenu(getActivity(), null, waypoint, null); + } + + @Override + protected Geopoint getCoordinates() { + if (waypoint == null) { + return null; + } + return waypoint.getCoords(); + } + + public static DialogFragment newInstance(String geocode, int waypointId) { + + Bundle args = new Bundle(); + args.putInt(WAYPOINT_ARG, waypointId); + args.putString(GEOCODE_ARG, geocode); + + DialogFragment f = new WaypointPopupFragment(); + f.setArguments(args); + f.setStyle(DialogFragment.STYLE_NO_TITLE,0); + + return f; + } +} diff --git a/main/src/cgeo/geocaching/activity/AbstractActionBarActivity.java b/main/src/cgeo/geocaching/activity/AbstractActionBarActivity.java new file mode 100644 index 0000000..63100b8 --- /dev/null +++ b/main/src/cgeo/geocaching/activity/AbstractActionBarActivity.java @@ -0,0 +1,34 @@ +package cgeo.geocaching.activity; + +import android.os.Bundle; + +/** + * Classes actually having an ActionBar (as opposed to the Dialog activities) + */ +public class AbstractActionBarActivity extends AbstractActivity { + @Override + protected void onCreate(Bundle savedInstanceState, int resourceLayoutID) { + super.onCreate(savedInstanceState, resourceLayoutID); + initUpAction(); + showProgress(false); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initUpAction(); + showProgress(false); + } + + @Override + protected void onCreate(Bundle savedInstanceState, int resourceLayoutID, boolean useDialogTheme) { + super.onCreate(savedInstanceState, resourceLayoutID, useDialogTheme); + initUpAction(); + showProgress(false); + } + + private void initUpAction() + { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } +} diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java index 542dd05..42eb825 100644 --- a/main/src/cgeo/geocaching/activity/AbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java @@ -13,20 +13,22 @@ import cgeo.geocaching.utils.TranslationUtils; import org.apache.commons.lang3.StringUtils; +import rx.Subscription; +import rx.subscriptions.Subscriptions; + import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; -import android.support.v4.app.FragmentActivity; +import android.support.v7.app.ActionBarActivity; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; +import android.view.Window; import android.widget.EditText; -import rx.Subscription; -import rx.subscriptions.Subscriptions; import java.util.Locale; -public abstract class AbstractActivity extends FragmentActivity implements IAbstractActivity { +public abstract class AbstractActivity extends ActionBarActivity implements IAbstractActivity { protected CgeoApplication app = null; protected Resources res = null; @@ -43,11 +45,7 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst @Override final public void goHome(final View view) { - ActivityMixin.goHome(this); - } - - final protected void setTitle(final String title) { - ActivityMixin.setTitle(this, title); + ActivityMixin.navigateToMain(this); } final protected void showProgress(final boolean show) { @@ -71,7 +69,19 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + initializeCommonFields(); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId()== android.R.id.home) { + ActivityMixin.navigateToMain(this); + return true; + } + return super.onOptionsItemSelected(item); } public void onResume(final Subscription resumeSubscription) { diff --git a/main/src/cgeo/geocaching/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java index a5d5c14..eaa8a96 100644 --- a/main/src/cgeo/geocaching/activity/AbstractListActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractListActivity.java @@ -4,10 +4,11 @@ import cgeo.geocaching.CgeoApplication; import android.content.res.Resources; import android.os.Bundle; -import android.support.v4.app.FragmentListActivity; +import android.view.MenuItem; import android.view.View; +import android.view.Window; -public abstract class AbstractListActivity extends FragmentListActivity implements +public abstract class AbstractListActivity extends ActionBarListActivity implements IAbstractActivity { private boolean keepScreenOn = false; @@ -25,7 +26,7 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen @Override final public void goHome(View view) { - ActivityMixin.goHome(this); + ActivityMixin.navigateToMain(this); } final public void showProgress(final boolean show) { @@ -40,7 +41,7 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen public final void showToast(String text) { ActivityMixin.showToast(this, text); } - + @Override public final void showShortToast(String text) { ActivityMixin.showShortToast(this, text); @@ -49,7 +50,24 @@ public abstract class AbstractListActivity extends FragmentListActivity implemen @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + initializeCommonFields(); + initUpAction(); + } + + protected void initUpAction() + { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId()== android.R.id.home) { + ActivityMixin.navigateToMain(this); + return true; + } + return super.onOptionsItemSelected(item); } private void initializeCommonFields() { diff --git a/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java b/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java index 6e2900d..e98c935 100644 --- a/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java @@ -30,7 +30,7 @@ import java.util.Map; * Enum listing all available pages of this activity. The pages available at a certain point of time are * defined by overriding {@link #getOrderedPages()}. */ -public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends AbstractActivity { +public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends AbstractActionBarActivity { /** * A {@link List} of all available pages. diff --git a/main/src/cgeo/geocaching/activity/ActionBarListActivity.java b/main/src/cgeo/geocaching/activity/ActionBarListActivity.java new file mode 100644 index 0000000..07c7ec3 --- /dev/null +++ b/main/src/cgeo/geocaching/activity/ActionBarListActivity.java @@ -0,0 +1,34 @@ +package cgeo.geocaching.activity; + +import android.support.v7.app.ActionBarActivity; +import android.widget.HeaderViewListAdapter; +import android.widget.ListAdapter; +import android.widget.ListView; + +/** + * Compatbility Class until cgeo switches from ListActivities to ListFragments + */ +public class ActionBarListActivity extends ActionBarActivity { + + private ListView mListView; + protected ListView getListView() { + if (mListView == null) { + mListView = (ListView) findViewById(android.R.id.list); + } + return mListView; + } + + protected void setListAdapter(ListAdapter adapter) { + getListView().setAdapter(adapter); + } + + protected ListAdapter getListAdapter() { + ListAdapter adapter = getListView().getAdapter(); + if (adapter instanceof HeaderViewListAdapter) { + return ((HeaderViewListAdapter)adapter).getWrappedAdapter(); + } + return adapter; + } +} + + diff --git a/main/src/cgeo/geocaching/activity/ActivityMixin.java b/main/src/cgeo/geocaching/activity/ActivityMixin.java index bfd45da..c43e1bd 100644 --- a/main/src/cgeo/geocaching/activity/ActivityMixin.java +++ b/main/src/cgeo/geocaching/activity/ActivityMixin.java @@ -9,47 +9,33 @@ import org.apache.commons.lang3.StringUtils; import android.app.Activity; import android.content.Intent; -import android.os.Build; +import android.support.v4.app.NavUtils; +import android.support.v7.app.ActionBarActivity; 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; public final class ActivityMixin { - public final static void goHome(final Activity fromActivity) { - final Intent intent = new Intent(fromActivity, MainActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - - fromActivity.startActivity(intent); - fromActivity.finish(); - } - public static void setTitle(final Activity activity, final CharSequence text) { if (StringUtils.isBlank(text)) { return; } - final TextView title = (TextView) activity.findViewById(R.id.actionbar_title); - if (title != null) { - title.setText(text); + if (((ActionBarActivity) activity).getSupportActionBar() != null) { + ((ActionBarActivity) activity).getSupportActionBar().setTitle(text); } } - public static void showProgress(final Activity activity, final boolean show) { + + public static void showProgress(final ActionBarActivity activity, final boolean show) { if (activity == null) { return; } - final ProgressBar progress = (ProgressBar) activity.findViewById(R.id.actionbar_progress); - if (show) { - progress.setVisibility(View.VISIBLE); - } else { - progress.setVisibility(View.GONE); - } + activity.setSupportProgressBarIndeterminateVisibility(show); + } public static void setTheme(final Activity activity) { @@ -62,10 +48,10 @@ public final class ActivityMixin { public static int getDialogTheme() { // Light theme dialogs don't work on Android Api < 11 - if (Settings.isLightSkin() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + // The compat theme should fix this + if (Settings.isLightSkin()) { return R.style.popup_light; } - return R.style.popup_dark; } @@ -127,4 +113,9 @@ public final class ActivityMixin { int newCursor = moveCursor ? start + completeText.length() : start; editText.setSelection(newCursor); } + + public static void navigateToMain(Activity activity) { + final Intent main = new Intent(activity, MainActivity.class); + NavUtils.navigateUpTo(activity, main); + } } diff --git a/main/src/cgeo/geocaching/list/AbstractList.java b/main/src/cgeo/geocaching/list/AbstractList.java index ec783eb..ec70deb 100644 --- a/main/src/cgeo/geocaching/list/AbstractList.java +++ b/main/src/cgeo/geocaching/list/AbstractList.java @@ -20,6 +20,10 @@ public abstract class AbstractList { public abstract boolean isConcrete(); + public abstract String getTitle(); + + public abstract int getCount(); + @Nullable public static AbstractList getListById(int listId) { return LISTS.get(listId); diff --git a/main/src/cgeo/geocaching/list/PseudoList.java b/main/src/cgeo/geocaching/list/PseudoList.java index f2cc7ed..71f9123 100644 --- a/main/src/cgeo/geocaching/list/PseudoList.java +++ b/main/src/cgeo/geocaching/list/PseudoList.java @@ -36,6 +36,16 @@ public class PseudoList extends AbstractList { } @Override + public String getTitle() { + return title; + } + + @Override + public int getCount() { + return -1; + } + + @Override public boolean isConcrete() { return false; } diff --git a/main/src/cgeo/geocaching/list/StoredList.java b/main/src/cgeo/geocaching/list/StoredList.java index 84e1163..e6cad56 100644 --- a/main/src/cgeo/geocaching/list/StoredList.java +++ b/main/src/cgeo/geocaching/list/StoredList.java @@ -78,25 +78,7 @@ public final class StoredList extends AbstractList { } public void promptForListSelection(final int titleId, @NonNull final Action1<Integer> runAfterwards, final boolean onlyConcreteLists, final int exceptListId, final String newListName) { - final List<AbstractList> lists = new ArrayList<AbstractList>(); - lists.addAll(getSortedLists()); - - if (exceptListId > StoredList.TEMPORARY_LIST_ID) { - StoredList exceptList = DataStore.getList(exceptListId); - if (exceptList != null) { - lists.remove(exceptList); - } - } - - if (!onlyConcreteLists) { - if (exceptListId != PseudoList.ALL_LIST.id) { - lists.add(PseudoList.ALL_LIST); - } - if (exceptListId != PseudoList.HISTORY_LIST.id) { - lists.add(PseudoList.HISTORY_LIST); - } - } - lists.add(PseudoList.NEW_LIST); + final List<AbstractList> lists = getMenuLists(onlyConcreteLists, exceptListId); final List<CharSequence> listsTitle = new ArrayList<CharSequence>(); for (AbstractList list : lists) { @@ -124,6 +106,31 @@ public final class StoredList extends AbstractList { builder.create().show(); } + public static List<AbstractList> getMenuLists(boolean onlyConcreteLists, int exceptListId) { + final List<AbstractList> lists = new ArrayList<AbstractList>(); + lists.addAll(getSortedLists()); + + if (exceptListId > StoredList.TEMPORARY_LIST_ID) { + StoredList exceptList = DataStore.getList(exceptListId); + if (exceptList != null) { + lists.remove(exceptList); + } + } + + if (!onlyConcreteLists) { + if (exceptListId != PseudoList.ALL_LIST.id) { + lists.add(PseudoList.ALL_LIST); + } + if (exceptListId != PseudoList.HISTORY_LIST.id) { + lists.add(PseudoList.HISTORY_LIST); + } + } + if (exceptListId != PseudoList.NEW_LIST.id) { + lists.add(PseudoList.NEW_LIST); + } + return lists; + } + @NonNull private static List<StoredList> getSortedLists() { final Collator collator = Collator.getInstance(); @@ -203,14 +210,18 @@ public final class StoredList extends AbstractList { } /** - * Get the list title. This method is not public by intention to make clients use the {@link UserInterface} class. - * - * @return + * Get the list title. */ - protected String getTitle() { + @Override + public String getTitle() { return title; } + @Override + public int getCount() { + return count; + } + /** * Return the given list, if it is a concrete list. Return the default list otherwise. */ diff --git a/main/src/cgeo/geocaching/maps/AbstractMap.java b/main/src/cgeo/geocaching/maps/AbstractMap.java index d341823..aff9c75 100644 --- a/main/src/cgeo/geocaching/maps/AbstractMap.java +++ b/main/src/cgeo/geocaching/maps/AbstractMap.java @@ -5,10 +5,12 @@ import cgeo.geocaching.maps.interfaces.MapActivityImpl; import android.app.Activity; import android.content.res.Resources; +import android.os.Build; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.Window; /** * Base class for the map activity. Delegates base class calls to the @@ -31,7 +33,11 @@ public abstract class AbstractMap { } public void onCreate(Bundle savedInstanceState) { + mapActivity.superOnCreate(savedInstanceState); + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) { + mapActivity.getActivity().requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + } } public void onResume() { diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index b5d0b0e..004081f 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -50,6 +50,7 @@ import rx.schedulers.Schedulers; import rx.subscriptions.CompositeSubscription; import rx.subscriptions.Subscriptions; +import android.annotation.TargetApi; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; @@ -60,6 +61,7 @@ import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.location.Location; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -69,9 +71,11 @@ import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.view.ViewGroup.LayoutParams; +import android.widget.CheckBox; import android.widget.ImageSwitcher; import android.widget.ImageView; import android.widget.ImageView.ScaleType; +import android.widget.ProgressBar; import android.widget.TextView; import android.widget.ViewSwitcher.ViewFactory; @@ -183,7 +187,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto private int detailProgress = 0; private long detailProgressTime = 0L; // views - private ImageSwitcher myLocSwitch = null; + private CheckBox myLocSwitch = null; /** Controls the map behaviour */ private MapMode mapMode = null; @@ -239,7 +243,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto title.append('[').append(lastSearchResult.getUrl()).append(']'); } - ActivityMixin.setTitle(activity, title.toString()); + setTitle(title.toString()); break; case INVALIDATE_MAP: mapView.repaintRequired(null); @@ -250,6 +254,24 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } } }; + + private void setTitle(String title) { + /* Compatibily for the old Action Bar, only used by the maps activity at the moment */ + final TextView titleview = (TextView) activity.findViewById(R.id.actionbar_title); + if (titleview != null) { + titleview.setText(title); + + } + if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)) { + setTitleHoneyComb(title); + } + } + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + private void setTitleHoneyComb(String title) { + activity.getActionBar().setTitle(title); + } + /** Updates the progress. */ final private Handler showProgressHandler = new Handler() { @@ -261,15 +283,32 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto if (what == HIDE_PROGRESS) { if (--counter == 0) { - ActivityMixin.showProgress(activity, false); + showProgress(false); } } else if (what == SHOW_PROGRESS) { - ActivityMixin.showProgress(activity, true); + showProgress(true); counter++; } } + + private void showProgress(boolean show) { + final ProgressBar progress = (ProgressBar) activity.findViewById(R.id.actionbar_progress); + if (progress != null) { + if (show) { + progress.setVisibility(View.VISIBLE); + } else { + progress.setVisibility(View.GONE); + + } + } + if (Build.VERSION.SDK_INT >= 11) { + activity.setProgressBarIndeterminateVisibility(show); + } + } }; + + final private class LoadDetailsHandler extends CancellableHandler { @Override @@ -360,6 +399,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } } + @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -417,10 +457,16 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto ActivityMixin.keepScreenOn(activity, true); + // set layout - ActivityMixin.setTheme(activity); + //ActivityMixin.setTheme(activity); + // TODO: set a proper theme + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) { + activity.setTheme(android.R.style.Theme_Holo); + activity.getActionBar().setDisplayHomeAsUpEnabled(true); + } activity.setContentView(mapProvider.getMapLayoutId()); - ActivityMixin.setTitle(activity, res.getString(R.string.map_map)); + setTitle(res.getString(R.string.map_map)); // initialize map mapView = (MapViewImpl) activity.findViewById(mapProvider.getMapViewId()); @@ -461,14 +507,11 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto centerMap(geocodeIntent, searchIntent, coordsIntent, mapStateIntent); } - // prepare my location button - myLocSwitch = (ImageSwitcher) activity.findViewById(R.id.my_position); - myLocSwitch.setFactory(this); - myLocSwitch.setInAnimation(activity, android.R.anim.fade_in); - myLocSwitch.setOutAnimation(activity, android.R.anim.fade_out); - myLocSwitch.setOnClickListener(new MyLocationListener()); - switchMyLocationButton(); + CheckBox locSwitch = (CheckBox) activity.findViewById(R.id.my_position); + if (locSwitch!=null) { + initMyLocationSwitchButton(locSwitch); + } prepareFilterBar(); if (!app.isLiveMapHintShownInThisSession() && !Settings.getHideLiveMapHint() && Settings.getLiveMapHintShowCount() <= 3) { @@ -476,6 +519,16 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } } + private void initMyLocationSwitchButton(CheckBox locSwitch) { + myLocSwitch = locSwitch; + /* TODO: Switch back to ImageSwitcher for animations? + myLocSwitch.setFactory(this); + myLocSwitch.setInAnimation(activity, android.R.anim.fade_in); + myLocSwitch.setOutAnimation(activity, android.R.anim.fade_out); */ + myLocSwitch.setOnClickListener(new MyLocationListener()); + switchMyLocationButton(); + } + /** * Set the zoom of the map. The zoom is restricted to a certain minimum in case of live map. * @@ -531,6 +584,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto super.onPause(); } + @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public boolean onCreateOptionsMenu(Menu menu) { // menu inflation happens in Google/Mapsforge specific classes @@ -540,6 +594,19 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto final SubMenu subMenuStrategy = menu.findItem(R.id.submenu_strategy).getSubMenu(); subMenuStrategy.setHeaderTitle(res.getString(R.string.map_strategy_title)); + + + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) { + /* if we have an Actionbar find the my position toggle */ + MenuItem item = menu.findItem(R.id.menu_toggle_mypos); + myLocSwitch = new CheckBox(activity); + myLocSwitch.setButtonDrawable(R.drawable.ic_menu_myposition); + item.setActionView(myLocSwitch); + initMyLocationSwitchButton(myLocSwitch); + } else { + // Already on the fake Actionbar + menu.removeItem(R.id.menu_toggle_mypos); + } return true; } @@ -616,6 +683,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto public boolean onOptionsItemSelected(MenuItem item) { final int id = item.getItemId(); switch (id) { + case android.R.id.home: + ActivityMixin.navigateToMain(activity); + return true; case R.id.menu_trail_mode: Settings.setMapTrail(!Settings.isMapTrail()); mapView.repaintRequired(overlayPositionAndScale); @@ -1460,11 +1530,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto // switch My Location button image private void switchMyLocationButton() { + myLocSwitch.setChecked(followMyLocation); if (followMyLocation) { - myLocSwitch.setImageResource(R.drawable.actionbar_mylocation_on); myLocationInMiddle(app.currentGeo()); - } else { - myLocSwitch.setImageResource(R.drawable.actionbar_mylocation_off); } } @@ -1493,7 +1561,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto // close activity and open homescreen @Override public void goHome(View view) { - ActivityMixin.goHome(activity); + ActivityMixin.navigateToMain(activity); } @Override diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java b/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java index a98241f..8a1bad6 100644 --- a/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java +++ b/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java @@ -1,5 +1,6 @@ package cgeo.geocaching.maps.google; +import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.maps.AbstractMap; import cgeo.geocaching.maps.CGeoMap; @@ -97,6 +98,11 @@ public class GoogleMapActivity extends MapActivity implements MapActivityImpl, F } @Override + public void goHome(View view) { + ActivityMixin.navigateToMain(this); + } + + @Override public void superOnResume() { super.onResume(); } @@ -116,12 +122,6 @@ public class GoogleMapActivity extends MapActivity implements MapActivityImpl, F return super.onPrepareOptionsMenu(menu); } - // close activity and open homescreen - @Override - public void goHome(View view) { - mapBase.goHome(view); - } - @Override public void showFilterMenu(View view) { // do nothing, the filter bar only shows the global filter diff --git a/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java b/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java index e7deebd..08309f4 100644 --- a/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java +++ b/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java @@ -34,5 +34,4 @@ public interface MapActivityImpl { boolean superOnOptionsItemSelected(MenuItem item); public abstract void goHome(View view); - } diff --git a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java index e74751b..527f024 100644 --- a/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java +++ b/main/src/cgeo/geocaching/network/OAuthAuthorizationActivity.java @@ -4,7 +4,7 @@ import butterknife.InjectView; import cgeo.geocaching.Intents; import cgeo.geocaching.R; -import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.activity.AbstractActionBarActivity; import cgeo.geocaching.utils.BundleUtils; import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.MatcherWrapper; @@ -32,7 +32,7 @@ import android.widget.TextView; import java.io.IOException; import java.util.regex.Pattern; -public abstract class OAuthAuthorizationActivity extends AbstractActivity { +public abstract class OAuthAuthorizationActivity extends AbstractActionBarActivity { public static final int NOT_AUTHENTICATED = 0; public static final int AUTHENTICATED = 1; diff --git a/main/src/cgeo/geocaching/utils/TranslationUtils.java b/main/src/cgeo/geocaching/utils/TranslationUtils.java index 619db08..ea3c395 100644 --- a/main/src/cgeo/geocaching/utils/TranslationUtils.java +++ b/main/src/cgeo/geocaching/utils/TranslationUtils.java @@ -1,10 +1,10 @@ package cgeo.geocaching.utils; -import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.network.Network; import org.apache.commons.lang3.StringUtils; +import android.app.Activity; import android.content.Intent; import android.net.Uri; @@ -51,7 +51,7 @@ public final class TranslationUtils { * @param text * The text to be translated */ - public static void startActivityTranslate(final AbstractActivity context, final String toLang, final String text) { + public static void startActivityTranslate(final Activity context, final String toLang, final String text) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(buildTranslationURI(toLang, text)))); } } |
