aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcachapa <cachapa@gmail.com>2011-09-13 22:35:09 +0200
committercachapa <cachapa@gmail.com>2011-09-13 22:35:09 +0200
commit6bb3dbac005be25df08541ac36035e41a53843b0 (patch)
treef22c4829050d3c943eb0f67acc9b79fcb8faa4ad
parent0dab75878492f23f345cf70fba70416a14436471 (diff)
downloadcgeo-6bb3dbac005be25df08541ac36035e41a53843b0.zip
cgeo-6bb3dbac005be25df08541ac36035e41a53843b0.tar.gz
cgeo-6bb3dbac005be25df08541ac36035e41a53843b0.tar.bz2
Show a bar when a filter is set
This creates a bar on top of lists and maps when a filter is detected. This way it becomes clear for the user that the results are being filtered. It also fixes a bug where the cache type could be filtered twice.
-rw-r--r--res/drawable/filter_bar_background.xml9
-rw-r--r--res/layout/caches.xml1
-rw-r--r--res/layout/filter_bar.xml10
-rw-r--r--res/layout/googlemap.xml1
-rw-r--r--res/layout/mfmap.xml1
-rw-r--r--res/values/styles.xml26
-rw-r--r--src/cgeo/geocaching/cgCacheListAdapter.java4
-rw-r--r--src/cgeo/geocaching/cgeocaches.java36
-rw-r--r--src/cgeo/geocaching/filter/cgFilter.java10
-rw-r--r--src/cgeo/geocaching/filter/cgFilterBySize.java13
-rw-r--r--src/cgeo/geocaching/filter/cgFilterByTrackables.java6
-rw-r--r--src/cgeo/geocaching/filter/cgFilterByType.java13
-rw-r--r--src/cgeo/geocaching/mapcommon/cgeomap.java12
13 files changed, 122 insertions, 20 deletions
diff --git a/res/drawable/filter_bar_background.xml b/res/drawable/filter_bar_background.xml
new file mode 100644
index 0000000..e42cd60
--- /dev/null
+++ b/res/drawable/filter_bar_background.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <gradient android:angle="270"
+ android:startColor="#ffffff00"
+ android:centerColor="#ffcccc00"
+ android:centerY="0.8"
+ android:endColor="#ffdddd00"/>
+</shape>
diff --git a/res/layout/caches.xml b/res/layout/caches.xml
index ebd7610..924651d 100644
--- a/res/layout/caches.xml
+++ b/res/layout/caches.xml
@@ -22,6 +22,7 @@
android:src="@drawable/actionbar_manual"
android:onClick="goManual" />
</LinearLayout>
+ <include layout="@layout/filter_bar"/>
<ListView android:id="@android:id/list"
android:visibility="gone"
android:layout_above="@+id/counter"
diff --git a/res/layout/filter_bar.xml b/res/layout/filter_bar.xml
new file mode 100644
index 0000000..35ee929
--- /dev/null
+++ b/res/layout/filter_bar.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/filter_bar"
+ style="@style/filter_bar"
+ android:visibility="gone">
+ <ImageView style="@style/filter_bar_image"
+ android:src="@drawable/main_filter_default"></ImageView>
+ <TextView android:id="@+id/filter_text"
+ style="@style/filter_bar_text"/>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/googlemap.xml b/res/layout/googlemap.xml
index 963101f..4689749 100644
--- a/res/layout/googlemap.xml
+++ b/res/layout/googlemap.xml
@@ -19,6 +19,7 @@
android:src="@drawable/actionbar_manual"
android:onClick="goManual" />
</LinearLayout>
+ <include layout="@layout/filter_bar"/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
diff --git a/res/layout/mfmap.xml b/res/layout/mfmap.xml
index a3c6885..4c78a10 100644
--- a/res/layout/mfmap.xml
+++ b/res/layout/mfmap.xml
@@ -19,6 +19,7 @@
android:src="@drawable/actionbar_manual"
android:onClick="goManual" />
</LinearLayout>
+ <include layout="@layout/filter_bar"/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
diff --git a/res/values/styles.xml b/res/values/styles.xml
index f1f85e6..2ac800a 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -277,4 +277,30 @@
<item name="android:textColor">?text_color_headline</item>
<item name="android:background">?background_color</item>
</style>
+
+<!-- filter bar -->
+ <style name="filter_bar">
+ <item name="android:layout_width">fill_parent</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:orientation">horizontal</item>
+ <item name="android:background">@drawable/filter_bar_background</item>
+ <item name="android:gravity">center_vertical</item>
+ </style>
+
+ <style name="filter_bar_image">
+ <item name="android:layout_width">30dp</item>
+ <item name="android:layout_height">30dp</item>
+ <item name="android:padding">6dp</item>
+ <item name="android:scaleType">fitCenter</item>
+ </style>
+
+ <style name="filter_bar_text">
+ <item name="android:layout_width">wrap_content</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:singleLine">true</item>
+ <item name="android:scrollHorizontally">true</item>
+ <item name="android:ellipsize">marquee</item>
+ <item name="android:lines">1</item>
+ <item name="android:textColor">@android:color/black</item>
+ </style>
</resources>
diff --git a/src/cgeo/geocaching/cgCacheListAdapter.java b/src/cgeo/geocaching/cgCacheListAdapter.java
index 6dc63da..f6a8e2c 100644
--- a/src/cgeo/geocaching/cgCacheListAdapter.java
+++ b/src/cgeo/geocaching/cgCacheListAdapter.java
@@ -162,6 +162,10 @@ public class cgCacheListAdapter extends ArrayAdapter<cgCache> {
}
}
+ public String getFilterName() {
+ return currentFilter.getFilterName();
+ }
+
public void setHistoric(boolean historicIn) {
historic = historicIn;
diff --git a/src/cgeo/geocaching/cgeocaches.java b/src/cgeo/geocaching/cgeocaches.java
index 5fd1db1..926a72d 100644
--- a/src/cgeo/geocaching/cgeocaches.java
+++ b/src/cgeo/geocaching/cgeocaches.java
@@ -669,6 +669,8 @@ public class cgeocaches extends AbstractListActivity {
setTitle(title);
Log.e(cgSettings.tag, "cgeocaches.onCreate: No action or unknown action specified");
}
+
+ prepareFilterBar();
}
@Override
@@ -746,7 +748,9 @@ public class cgeocaches extends AbstractListActivity {
public boolean onCreateOptionsMenu(Menu menu) {
SubMenu subMenuFilter = menu.addSubMenu(0, SUBMENU_FILTER, 0, res.getString(R.string.caches_filter)).setIcon(android.R.drawable.ic_menu_search);
subMenuFilter.setHeaderTitle(res.getString(R.string.caches_filter_title));
- subMenuFilter.add(0, SUBMENU_FILTER_TYPE, 0, res.getString(R.string.caches_filter_type));
+ if (settings.cacheType == null) {
+ subMenuFilter.add(0, SUBMENU_FILTER_TYPE, 0, res.getString(R.string.caches_filter_type));
+ }
subMenuFilter.add(0, SUBMENU_FILTER_SIZE, 0, res.getString(R.string.caches_filter_size));
subMenuFilter.add(0, MENU_FILTER_TRACKABLES, 0, res.getString(R.string.caches_filter_track));
subMenuFilter.add(0, MENU_FILTER_CLEAR, 0, res.getString(R.string.caches_filter_clear));
@@ -1012,11 +1016,11 @@ public class cgeocaches extends AbstractListActivity {
openContextMenu(getListView());
return false;
case MENU_FILTER_TRACKABLES:
- adapter.setFilter(new cgFilterByTrackables());
+ setFilter(new cgFilterByTrackables(res.getString(R.string.caches_filter_track)));
return false;
case MENU_FILTER_CLEAR:
if (adapter != null) {
- adapter.setFilter(null);
+ setFilter(null);
}
return false;
case MENU_IMPORT_WEB:
@@ -1299,6 +1303,7 @@ public class cgeocaches extends AbstractListActivity {
private boolean setFilter(cgFilter filter) {
if (adapter != null) {
adapter.setFilter(filter);
+ prepareFilterBar();
return true;
}
return false;
@@ -2602,4 +2607,29 @@ public class cgeocaches extends AbstractListActivity {
context.startActivity(cachesIntent);
}
+
+ private void prepareFilterBar() {
+ TextView filterTextView = (TextView) findViewById(R.id.filter_text);
+ View filterBar = findViewById(R.id.filter_bar);
+ String cacheType = "", filter = "";
+
+ if (settings.cacheType != null || adapter.isFilter()) {
+ if (settings.cacheType != null) {
+ cacheType = cgBase.cacheTypesInv.get(settings.cacheType);
+ }
+ if (adapter.isFilter()) {
+ filter = adapter.getFilterName();
+ }
+
+ if (settings.cacheType != null && adapter.isFilter()) {
+ filter = ", " + filter;
+ }
+
+ filterTextView.setText(cacheType + filter);
+ filterBar.setVisibility(View.VISIBLE);
+ }
+ else {
+ filterBar.setVisibility(View.GONE);
+ }
+ }
}
diff --git a/src/cgeo/geocaching/filter/cgFilter.java b/src/cgeo/geocaching/filter/cgFilter.java
index 20f04c9..4dc0d99 100644
--- a/src/cgeo/geocaching/filter/cgFilter.java
+++ b/src/cgeo/geocaching/filter/cgFilter.java
@@ -6,6 +6,12 @@ import java.util.List;
import cgeo.geocaching.cgCache;
public abstract class cgFilter {
+ String name;
+
+ public cgFilter(String name) {
+ this.name = name;
+ }
+
abstract boolean applyFilter(cgCache cache);
public void filter(List<cgCache> list){
@@ -17,4 +23,8 @@ public abstract class cgFilter {
}
list.removeAll(itemsToRemove);
}
+
+ public String getFilterName() {
+ return name;
+ }
}
diff --git a/src/cgeo/geocaching/filter/cgFilterBySize.java b/src/cgeo/geocaching/filter/cgFilterBySize.java
index 3437620..649166b 100644
--- a/src/cgeo/geocaching/filter/cgFilterBySize.java
+++ b/src/cgeo/geocaching/filter/cgFilterBySize.java
@@ -3,15 +3,12 @@ package cgeo.geocaching.filter;
import cgeo.geocaching.cgCache;
public class cgFilterBySize extends cgFilter {
- private String size;
+ public cgFilterBySize(String size) {
+ super(size);
+ }
- public cgFilterBySize(String size){
- this.size = size;
- }
-
- @Override
+ @Override
boolean applyFilter(cgCache cache) {
- return size.equals(cache.size);
+ return name.equals(cache.name);
}
-
}
diff --git a/src/cgeo/geocaching/filter/cgFilterByTrackables.java b/src/cgeo/geocaching/filter/cgFilterByTrackables.java
index 44c85c1..0866ff5 100644
--- a/src/cgeo/geocaching/filter/cgFilterByTrackables.java
+++ b/src/cgeo/geocaching/filter/cgFilterByTrackables.java
@@ -3,10 +3,12 @@ package cgeo.geocaching.filter;
import cgeo.geocaching.cgCache;
public class cgFilterByTrackables extends cgFilter {
+ public cgFilterByTrackables(String name) {
+ super(name);
+ }
- @Override
+ @Override
boolean applyFilter(cgCache cache) {
return cache.hasTrackables();
}
-
}
diff --git a/src/cgeo/geocaching/filter/cgFilterByType.java b/src/cgeo/geocaching/filter/cgFilterByType.java
index 15948e4..2b2ace6 100644
--- a/src/cgeo/geocaching/filter/cgFilterByType.java
+++ b/src/cgeo/geocaching/filter/cgFilterByType.java
@@ -1,17 +1,20 @@
package cgeo.geocaching.filter;
+import cgeo.geocaching.cgBase;
import cgeo.geocaching.cgCache;
public class cgFilterByType extends cgFilter {
- private String type;
-
public cgFilterByType(String type){
- this.type = type;
+ super(type);
}
@Override
boolean applyFilter(cgCache cache) {
- return type.equals(cache.type);
+ return name.equals(cache.name);
+ }
+
+ @Override
+ public String getFilterName() {
+ return cgBase.cacheTypesInv.get(name);
}
-
}
diff --git a/src/cgeo/geocaching/mapcommon/cgeomap.java b/src/cgeo/geocaching/mapcommon/cgeomap.java
index 40f7a3c..f6bd400 100644
--- a/src/cgeo/geocaching/mapcommon/cgeomap.java
+++ b/src/cgeo/geocaching/mapcommon/cgeomap.java
@@ -25,10 +25,11 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
-import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
+import android.view.ViewGroup.LayoutParams;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
+import android.widget.TextView;
import android.widget.ImageView.ScaleType;
import android.widget.ViewSwitcher.ViewFactory;
import cgeo.geocaching.R;
@@ -38,13 +39,13 @@ import cgeo.geocaching.cgCoord;
import cgeo.geocaching.cgDirection;
import cgeo.geocaching.cgGeo;
import cgeo.geocaching.cgSettings;
-import cgeo.geocaching.cgSettings.mapSourceEnum;
import cgeo.geocaching.cgUpdateDir;
import cgeo.geocaching.cgUpdateLoc;
import cgeo.geocaching.cgUser;
import cgeo.geocaching.cgWaypoint;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
+import cgeo.geocaching.cgSettings.mapSourceEnum;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.mapinterfaces.ActivityImpl;
import cgeo.geocaching.mapinterfaces.CacheOverlayItemImpl;
@@ -357,6 +358,13 @@ public class cgeomap extends MapBase implements OnDragListener, ViewFactory {
switchMyLocationButton();
startTimer();
+
+ // show the filter warning bar if the filter is set
+ if (settings.cacheType != null) {
+ String cacheType = cgBase.cacheTypesInv.get(settings.cacheType);
+ ((TextView)activity.findViewById(R.id.filter_text)).setText(cacheType);
+ activity.findViewById(R.id.filter_bar).setVisibility(View.VISIBLE);
+ }
}
@Override