diff --git a/app/build.gradle b/app/build.gradle
index 1f17b5e..220014e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -51,7 +51,8 @@ dependencies {
// You must install or update the Support Repository through the SDK manager to use this dependency.
compile 'com.android.support:support-v4:21.0.3'
compile 'com.android.support:support-v13:21.0.0'
- // Don't want version 5.2.08, as it's not yet available on devices
+ //compile 'com.google.android.gms:play-services-ads:8.0.+'
+ //compile 'com.google.android.gms:play-services-analytics:5.0.+'
compile 'com.google.android.gms:play-services:5.0.+'
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'it.sephiroth.android.library.imagezoom:imagezoom:+'
diff --git a/app/src/androidTest/java/com/dancedeets/android/CommonActivityTest.java b/app/src/androidTest/java/com/dancedeets/android/CommonActivityTest.java
index 030c6c5..db2eb06 100644
--- a/app/src/androidTest/java/com/dancedeets/android/CommonActivityTest.java
+++ b/app/src/androidTest/java/com/dancedeets/android/CommonActivityTest.java
@@ -4,8 +4,8 @@
import android.os.Handler;
import android.os.Looper;
import android.support.test.espresso.Espresso;
-import android.support.test.internal.runner.lifecycle.ActivityLifecycleMonitorRegistry;
import android.support.test.runner.lifecycle.ActivityLifecycleCallback;
+import android.support.test.runner.lifecycle.ActivityLifecycleMonitorRegistry;
import android.support.test.runner.lifecycle.Stage;
import android.test.ActivityInstrumentationTestCase2;
import android.view.View;
diff --git a/app/src/androidTest/java/com/dancedeets/android/EventInfoActivityTest.java b/app/src/androidTest/java/com/dancedeets/android/EventInfoActivityTest.java
index 91827fb..6e378a7 100644
--- a/app/src/androidTest/java/com/dancedeets/android/EventInfoActivityTest.java
+++ b/app/src/androidTest/java/com/dancedeets/android/EventInfoActivityTest.java
@@ -3,11 +3,11 @@
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.support.test.espresso.action.ViewActions;
-import android.support.test.internal.runner.lifecycle.ActivityLifecycleMonitorRegistry;
+import android.support.test.espresso.core.deps.guava.base.Charsets;
+import android.support.test.espresso.core.deps.guava.io.Resources;
+import android.support.test.runner.lifecycle.ActivityLifecycleMonitorRegistry;
import android.util.Log;
-import com.android.support.test.deps.guava.base.Charsets;
-import com.android.support.test.deps.guava.io.Resources;
import com.dancedeets.android.models.FullEvent;
import org.json.JSONArray;
diff --git a/app/src/androidTest/java/com/dancedeets/android/SearchListActivityTest.java b/app/src/androidTest/java/com/dancedeets/android/SearchListActivityTest.java
index 6f908eb..83c470a 100644
--- a/app/src/androidTest/java/com/dancedeets/android/SearchListActivityTest.java
+++ b/app/src/androidTest/java/com/dancedeets/android/SearchListActivityTest.java
@@ -19,7 +19,7 @@
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
-import static org.hamcrest.text.StringContains.containsString;
+import static org.hamcrest.core.StringContains.containsString;
/**
* Created by lambert on 2014/10/28.
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0ba81f2..e68e562 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -150,6 +150,11 @@
+
+
+
diff --git a/app/src/main/java/com/dancedeets/android/AdManager.java b/app/src/main/java/com/dancedeets/android/AdManager.java
new file mode 100644
index 0000000..c73de97
--- /dev/null
+++ b/app/src/main/java/com/dancedeets/android/AdManager.java
@@ -0,0 +1,26 @@
+package com.dancedeets.android;
+
+import android.location.Location;
+
+import com.facebook.AccessToken;
+import com.google.android.gms.ads.AdRequest;
+import com.google.android.gms.ads.doubleclick.PublisherAdRequest;
+
+/**
+ * Created by lambert on 2015/10/08.
+ */
+public class AdManager {
+
+ public static PublisherAdRequest getAdRequest(Location location) {
+ PublisherAdRequest.Builder adRequestBuilder = new PublisherAdRequest.Builder()
+ .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
+ .addTestDevice("F92F46CF903B1E0BD86D386FC9813E7F") // Mike's Nexus 5
+ .setLocation(location);
+ AccessToken token = AccessToken.getCurrentAccessToken();
+ if (token != null) {
+ String userID = token.getUserId();
+ adRequestBuilder.setPublisherProvidedId(Hashing.md5(userID));
+ }
+ return adRequestBuilder.build();
+ }
+}
diff --git a/app/src/main/java/com/dancedeets/android/EventInfoPagerAdapter.java b/app/src/main/java/com/dancedeets/android/EventInfoPagerAdapter.java
index 0dbc76b..e8b4341 100644
--- a/app/src/main/java/com/dancedeets/android/EventInfoPagerAdapter.java
+++ b/app/src/main/java/com/dancedeets/android/EventInfoPagerAdapter.java
@@ -53,14 +53,6 @@ public Object instantiateItem(ViewGroup container, int position) {
return fragment;
}
- public EventInfoFragment getExistingItem(int i) {
- if (i < mFragments.size()) {
- return mFragments.get(i);
- } else {
- return null;
- }
- }
-
@Override
public Fragment getItem(int i) {
FullEvent event = mEventList.get(i);
diff --git a/app/src/main/java/com/dancedeets/android/EventListFragment.java b/app/src/main/java/com/dancedeets/android/EventListFragment.java
index f0b4718..5cdb730 100644
--- a/app/src/main/java/com/dancedeets/android/EventListFragment.java
+++ b/app/src/main/java/com/dancedeets/android/EventListFragment.java
@@ -142,6 +142,7 @@ protected void onEventListFilled() {
mEmptyText.setVisibility(View.GONE);
}
mRetryButton.setVisibility(View.GONE);
+ eventAdapter.rebuildList(mBundled.mEventList);
setListAdapter(eventAdapter);
}
@@ -214,9 +215,10 @@ public void onClick(View view) {
mListDescription = (TextView) rootView.findViewById(R.id.event_list_description);
- eventAdapter = new EventUIAdapter(inflater.getContext(), mBundled.mEventList, R.layout.event_row);
+ eventAdapter = new EventUIAdapter(inflater.getContext());
+ setListAdapter(null);
- if (savedInstanceState != null && !mBundled.mWaitingForSearch) {
+ if (mBundled.mEventList.size() > 0 && !mBundled.mWaitingForSearch) {
onEventListFilled();
}
@@ -355,7 +357,12 @@ public void onListItemClick(ListView listView, View view, int position,
long id) {
super.onListItemClick(listView, view, position, id);
- FullEvent event = mBundled.mEventList.get(position);
+ int translatedPosition = eventAdapter.translatePosition(position);
+ if (translatedPosition < 0) {
+ return;
+ }
+ FullEvent event = mBundled.mEventList.get(translatedPosition);
+
Log("onListItemClick: fb event id: " + event.getId());
VolleySingleton volley = VolleySingleton.getInstance();
@@ -369,7 +376,7 @@ public void onListItemClick(ListView listView, View view, int position,
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
if (mCallbacks != null) {
- mCallbacks.onEventSelected(mBundled.mEventList, position);
+ mCallbacks.onEventSelected(mBundled.mEventList, translatedPosition);
}
}
diff --git a/app/src/main/java/com/dancedeets/android/EventUIAdapter.java b/app/src/main/java/com/dancedeets/android/EventUIAdapter.java
index d032ba9..d52f1ed 100644
--- a/app/src/main/java/com/dancedeets/android/EventUIAdapter.java
+++ b/app/src/main/java/com/dancedeets/android/EventUIAdapter.java
@@ -1,6 +1,7 @@
package com.dancedeets.android;
import android.content.Context;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -12,6 +13,9 @@
import com.dancedeets.android.models.CoverData;
import com.dancedeets.android.models.FullEvent;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
import java.util.List;
/**
@@ -19,6 +23,8 @@
*/
public class EventUIAdapter extends BaseAdapter {
+ private static String LOG_TAG = "EventUIAdapter";
+
static class ViewBinder {
NetworkImageView icon;
PlaceholderNetworkImageView cover;
@@ -28,28 +34,79 @@ static class ViewBinder {
TextView categories;
}
private LayoutInflater mInflater;
- private List mEventList;
- private int mResource;
+ private List