/** * Copyright 2009 Joe LaPenna */ package com.joelapenna.foursquared; import android.app.Activity; import android.app.SearchManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.UriMatcher; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import java.net.URLDecoder; /** * @author Joe LaPenna (joe@joelapenna.com) */ public class BrowsableActivity extends Activity { private static final String TAG = "BrowsableActivity"; private static final boolean DEBUG = FoursquaredSettings.DEBUG; private static final int URI_PATH_CHECKIN = 1; private static final int URI_PATH_CHECKINS = 2; private static final int URI_PATH_SEARCH = 3; private static final int URI_PATH_SHOUT = 4; private static final int URI_PATH_USER = 5; private static final int URI_PATH_VENUE = 6; public static String PARAM_SHOUT_TEXT = "shout"; public static String PARAM_SEARCH_QUERY = "q"; public static String PARAM_SEARCH_IMMEDIATE= "immediate"; private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); static { sUriMatcher.addURI("m.foursquare.com", "checkin", URI_PATH_CHECKIN); sUriMatcher.addURI("m.foursquare.com", "checkins", URI_PATH_CHECKINS); sUriMatcher.addURI("m.foursquare.com", "search", URI_PATH_SEARCH); sUriMatcher.addURI("m.foursquare.com", "shout", URI_PATH_SHOUT); sUriMatcher.addURI("m.foursquare.com", "user", URI_PATH_USER); sUriMatcher.addURI("m.foursquare.com", "venue/#", URI_PATH_VENUE); } private BroadcastReceiver mLoggedOutReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (DEBUG) Log.d(TAG, "onReceive: " + intent); finish(); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (DEBUG) Log.d(TAG, "onCreate()"); registerReceiver(mLoggedOutReceiver, new IntentFilter(Foursquared.INTENT_ACTION_LOGGED_OUT)); Uri uri = getIntent().getData(); if (DEBUG) Log.d(TAG, "Intent Data: " + uri); Intent intent; switch (sUriMatcher.match(uri)) { case URI_PATH_CHECKIN: if (DEBUG) Log.d(TAG, "Matched: URI_PATH_CHECKIN"); intent = new Intent(this, VenueActivity.class); intent.putExtra(Foursquared.EXTRA_VENUE_ID, uri.getQueryParameter("vid")); startActivity(intent); break; case URI_PATH_CHECKINS: if (DEBUG) Log.d(TAG, "Matched: URI_PATH_CHECKINS"); intent = new Intent(this, FriendsActivity.class); startActivity(intent); break; case URI_PATH_SEARCH: if (DEBUG) Log.d(TAG, "Matched: URI_PATH_SEARCH"); intent = new Intent(this, SearchVenuesActivity.class); if (!TextUtils.isEmpty(uri.getQueryParameter(PARAM_SEARCH_QUERY))) { intent.putExtra(SearchManager.QUERY, URLDecoder.decode(uri.getQueryParameter(PARAM_SEARCH_QUERY))); if (uri.getQueryParameter(PARAM_SEARCH_IMMEDIATE) != null && uri.getQueryParameter(PARAM_SEARCH_IMMEDIATE).equals("1")) { intent.setAction(Intent.ACTION_SEARCH); // interpret action as search immediately. } else { intent.setAction(Intent.ACTION_VIEW); // interpret as prepopulate search field only. } } startActivity(intent); break; case URI_PATH_SHOUT: if (DEBUG) Log.d(TAG, "Matched: URI_PATH_SHOUT"); intent = new Intent(this, CheckinOrShoutGatherInfoActivity.class); intent.putExtra(CheckinOrShoutGatherInfoActivity.INTENT_EXTRA_IS_SHOUT, true); if (!TextUtils.isEmpty(uri.getQueryParameter(PARAM_SHOUT_TEXT))) { intent.putExtra(CheckinOrShoutGatherInfoActivity.INTENT_EXTRA_TEXT_PREPOPULATE, URLDecoder.decode(uri.getQueryParameter(PARAM_SHOUT_TEXT))); } startActivity(intent); break; case URI_PATH_USER: if (DEBUG) Log.d(TAG, "Matched: URI_PATH_USER"); intent = new Intent(this, UserDetailsActivity.class); intent.putExtra(UserDetailsActivity.EXTRA_USER_ID, uri.getQueryParameter("uid")); startActivity(intent); break; case URI_PATH_VENUE: if (DEBUG) Log.d(TAG, "Matched: URI_PATH_VENUE"); intent = new Intent(this, VenueActivity.class); intent.putExtra(Foursquared.EXTRA_VENUE_ID, uri.getLastPathSegment()); startActivity(intent); break; default: if (DEBUG) Log.d(TAG, "Matched: None"); } finish(); } }