Android Open Source - gasp-gcm-client Places Detail Activity






From Project

Back to project page gasp-gcm-client.

License

The source code is released under:

Apache License

If you think the Android project gasp-gcm-client listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.cloudbees.gasp.activity;
//  ww  w .  ja va 2  s  . c o  m
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.NavUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import com.cloudbees.gasp.R;
import com.cloudbees.gasp.fragment.GaspDatabaseFragment;
import com.cloudbees.gasp.fragment.GaspRestaurantFragment;
import com.cloudbees.gasp.fragment.GaspReviewFragment;
import com.cloudbees.gasp.model.PlaceDetail;
import com.cloudbees.gasp.model.PlaceEvent;
import com.cloudbees.gasp.model.Restaurant;
import com.cloudbees.gasp.model.Review;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * Copyright (c) 2013 Mark Prichard, CloudBees
 * <p/>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p/>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p/>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

public class PlacesDetailActivity extends Activity {
    private final static String TAG = PlacesDetailActivity.class.getName();

    public static final String PLACES_DETAIL_SERIALIZED = "PlacesDetail";
    public static final String PLACES_DETAIL_REFERENCE = "Reference";

    // Layout views
    private TextView mName;
    private TextView mWebsite;
    private TextView mAddress;
    private TextView mPhone;
    private TextView mId;
    private TextView mLatitude;
    private TextView mLongitude;

    // Google Places API events for this location
    private ListView mEventsView;
    private ArrayAdapter<String> mEventAdapter;
    private final ArrayList<String> mEventList = new ArrayList<String>();

    // Gasp reviews for this location
    private ListView mReviewsView;
    private ArrayAdapter<String> mReviewAdapter;
    private final ArrayList<String> mReviewList = new ArrayList<String>();

    private int mGaspRestaurantId;      // The Gasp restaurant id
    private String mPlacesReference;    // The Google Places reference

    // Google Places API details
    private PlaceDetail mPlaceDetail;

    // Is restaurant in Gasp server database?
    private boolean mGaspRestaurant = false;

    // Headless fragments for calling Gasp server API
    private GaspDatabaseFragment mGaspDatabaseFragment;
    private GaspRestaurantFragment mGaspRestaurantFragment;
    private GaspReviewFragment mGaspReviewFragment;


    private void addItemClickListener() {
        mEventsView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.d(TAG, "Selected: Event #" + id);
            }
        });
    }

    private void setButtons() {
        Button reviewButton = (Button) findViewById(R.id.detail_review_button);
        Button restaurantButton = (Button) findViewById(R.id.detail_restaurant_button);

        if (mGaspRestaurant) {
            restaurantButton.setEnabled(false);
            reviewButton.setEnabled(true);
        } else {
            restaurantButton.setEnabled(true);
            reviewButton.setEnabled(false);
        }
    }

    private void addGaspReview() {
        try {
            Intent intent = new Intent();
            intent.setClass(this, ReviewActivity.class);
            intent.putExtra(ReviewActivity.REVIEW_RESTAURANT_NAME, mPlaceDetail.getName());
            intent.putExtra(ReviewActivity.REVIEW_RESTAURANT_ID, mGaspRestaurantId);
            intent.putExtra(ReviewActivity.REVIEW_REFERENCE, mPlacesReference);
            startActivityForResult(intent, 0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void addReviewButtonListener() {
        Button reviewButton = (Button) findViewById(R.id.detail_review_button);
        reviewButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addGaspReview();
                finish();
            }
        });
    }

    private void addGaspRestaurant() {
        try {
            SharedPreferences gaspSharedPreferences =
                    PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            URL gaspUrl = new URL(gaspSharedPreferences.getString(getString(R.string.gasp_server_uri_preferences), "")
                    + getString(R.string.gasp_restaurants_location));

            Restaurant restaurant = new Restaurant();
            restaurant.setName(mPlaceDetail.getName());
            restaurant.setPlacesId(mPlaceDetail.getId());
            restaurant.setWebsite(mPlaceDetail.getWebsite());

            mGaspRestaurantFragment.addRestaurant(restaurant, gaspUrl);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void addRestaurantButtonListener() {
        Button restaurantButton = (Button) findViewById(R.id.detail_restaurant_button);
        restaurantButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addGaspRestaurant();
                finish();
            }
        });
    }

    private void setViews() {
        setContentView(R.layout.gasp_place_detail_layout);
        mName = (TextView) findViewById(R.id.detail_name);
        mAddress = (TextView) findViewById(R.id.detail_address);
        mPhone = (TextView) findViewById(R.id.detail_phone);
        mWebsite = (TextView) findViewById(R.id.detail_website);
        mId = (TextView) findViewById(R.id.detail_id);
        mLatitude = (TextView) findViewById(R.id.detail_latitude);
        mLongitude = (TextView) findViewById(R.id.detail_longitude);
        mEventsView = (ListView) findViewById(R.id.detail_events);
        mReviewsView = (ListView) findViewById(R.id.detail_reviews);
    }

    private void addGaspFragments() {
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

        mGaspDatabaseFragment = new GaspDatabaseFragment();
        mGaspRestaurantFragment = new GaspRestaurantFragment() {
            @Override
            public void onSuccess(String location) {
                Log.d(TAG, "Gasp! restaurant added: " + location);
                mGaspRestaurantId = Integer.valueOf(location.substring(location.lastIndexOf("/") + 1));
                mGaspRestaurant = true;
                setButtons();
            }

            @Override
            public void onFailure() {
                Log.e(TAG, "Error adding Gasp! review");
            }
        };
        mGaspReviewFragment = new GaspReviewFragment() {
            @Override
            public void onSuccess(String location) {
                Log.d(TAG, "Gasp! review added: " + location);
            }

            @Override
            public void onFailure() {
                Log.e(TAG, "Error adding Gasp! review");
            }
        };

        ft.add(mGaspDatabaseFragment, getString(R.string.fragment_gasp_database));
        ft.add(mGaspRestaurantFragment, getString(R.string.fragment_gasp_restaurant));
        ft.add(mGaspReviewFragment, getString(R.string.fragment_gasp_review));

        ft.commit();
    }

    private void showLocationDetails(PlaceDetail place) {
        mName.setText(place.getName());
        mAddress.setText(place.getFormatted_address());
        mPhone.setText(place.getFormatted_phone_number());
        mWebsite.setText(place.getWebsite());
        mId.setText(getString(R.string.places_google_id) + place.getId());
        mLatitude.setText(getString(R.string.places_latitude)
                + place.getGeometry().getLocation().getLat().toString());
        mLongitude.setText(getString(R.string.places_longitude)
                + place.getGeometry().getLocation().getLng().toString());
    }

    private void showEventDetails(PlaceDetail place) {
        // Use a simple TextView layout for ArrayAdapter constructor
        mEventAdapter = new ArrayAdapter<String>(this, R.layout.gasp_generic_textview, mEventList);
        mEventsView.setAdapter(mEventAdapter);

        if (place.getEvents() != null) {
            for (PlaceEvent event : place.getEvents()) {
                Log.d(TAG, "Event Id: " + event.getEvent_id());
                Log.d(TAG, "Event Summary: " + event.getSummary());
                mEventAdapter.add(event.getSummary() + ": " + event.getUrl());
            }
        }
    }

    private void showReviewDetails(List<Review> reviews) {
        // Use a simple TextView layout for ArrayAdapter constructor
        mReviewAdapter = new ArrayAdapter<String>(this, R.layout.gasp_generic_textview, mReviewList);
        mReviewsView.setAdapter(mReviewAdapter);
        for (Review review : reviews) {
            mReviewAdapter.add(review.toString());
        }
    }

    private void getGaspData() {
        Restaurant restaurant = mGaspDatabaseFragment.getRestaurantByPlacesId(mPlaceDetail.getId());
        if (restaurant != null) {
            Log.d(TAG, "Gasp Restaurant Id: " + restaurant.getId());
            mGaspRestaurant = true;
            mGaspRestaurantId = restaurant.getId();
            showReviewDetails(mGaspDatabaseFragment.getLastNReviewsByRestaurant(restaurant.getId(), 10));
        } else {
            Log.d(TAG, "Restaurant not found in Gasp database");
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getActionBar().setDisplayHomeAsUpEnabled(true);

        try {
            mPlaceDetail = (PlaceDetail) getIntent().getSerializableExtra(PLACES_DETAIL_SERIALIZED);
            mPlacesReference = getIntent().getStringExtra(PLACES_DETAIL_REFERENCE);

            setViews();
            addGaspFragments();
            showLocationDetails(mPlaceDetail);
            showEventDetails(mPlaceDetail);
            addItemClickListener();
            addReviewButtonListener();
            addRestaurantButtonListener();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        getGaspData();
        setButtons();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu_short, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            // Respond to the action bar's Up/Home button
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;

            case R.id.gasp_settings:
                Intent intent = new Intent();
                intent.setClass(this, SetPreferencesActivity.class);
                startActivityForResult(intent, 0);
                return true;

            case R.id.options_exit:
                finish();
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }
}




Java Source Code List

com.cloudbees.gasp.activity.ConsoleActivityTest.java
com.cloudbees.gasp.activity.ConsoleActivity.java
com.cloudbees.gasp.activity.PlacesActivityTest.java
com.cloudbees.gasp.activity.PlacesActivity.java
com.cloudbees.gasp.activity.PlacesDetailActivityTest.java
com.cloudbees.gasp.activity.PlacesDetailActivity.java
com.cloudbees.gasp.activity.RestaurantListActivityTest.java
com.cloudbees.gasp.activity.RestaurantListActivity.java
com.cloudbees.gasp.activity.ReviewActivity.java
com.cloudbees.gasp.activity.ReviewListActivityTest.java
com.cloudbees.gasp.activity.ReviewListActivity.java
com.cloudbees.gasp.activity.SetPreferencesActivity.java
com.cloudbees.gasp.activity.TestParams.java
com.cloudbees.gasp.activity.TwitterStreamActivityTest.java
com.cloudbees.gasp.activity.TwitterStreamActivity.java
com.cloudbees.gasp.activity.UserListActivityTest.java
com.cloudbees.gasp.activity.UserListActivity.java
com.cloudbees.gasp.adapter.DataAdapterQueryTest.java
com.cloudbees.gasp.adapter.DatabaseTest.java
com.cloudbees.gasp.adapter.GaspDataAdapter.java
com.cloudbees.gasp.adapter.GaspSQLiteHelper.java
com.cloudbees.gasp.adapter.RestaurantArrayAdapter.java
com.cloudbees.gasp.adapter.RestaurantDataAdapter.java
com.cloudbees.gasp.adapter.ReviewArrayAdapter.java
com.cloudbees.gasp.adapter.ReviewDataAdapter.java
com.cloudbees.gasp.adapter.UserArrayAdapter.java
com.cloudbees.gasp.adapter.UserDataAdapter.java
com.cloudbees.gasp.fragment.AddEventFragment.java
com.cloudbees.gasp.fragment.DeleteEventFragment.java
com.cloudbees.gasp.fragment.GaspDatabaseFragment.java
com.cloudbees.gasp.fragment.GaspRestaurantFragment.java
com.cloudbees.gasp.fragment.GaspReviewFragment.java
com.cloudbees.gasp.fragment.LocationFragment.java
com.cloudbees.gasp.fragment.NearbySearchFragment.java
com.cloudbees.gasp.fragment.PlaceDetailsFragment.java
com.cloudbees.gasp.fragment.PreferencesFragment.java
com.cloudbees.gasp.fragment.RESTResponderFragment.java
com.cloudbees.gasp.fragment.TwitterAuthenticationFragment.java
com.cloudbees.gasp.fragment.TwitterResponderFragment.java
com.cloudbees.gasp.gcm.GCMBroadcastReceiver.java
com.cloudbees.gasp.gcm.GCMIntentService.java
com.cloudbees.gasp.gcm.GCMRegistration.java
com.cloudbees.gasp.location.GooglePlacesClient.java
com.cloudbees.gasp.location.NearbySearchTest.java
com.cloudbees.gasp.location.PlaceDetailsTest.java
com.cloudbees.gasp.location.PlaceEventsTest.java
com.cloudbees.gasp.model.EventRequest.java
com.cloudbees.gasp.model.EventResponse.java
com.cloudbees.gasp.model.GaspDataObject.java
com.cloudbees.gasp.model.Geometry.java
com.cloudbees.gasp.model.Location.java
com.cloudbees.gasp.model.ModelObjectTest.java
com.cloudbees.gasp.model.PlaceDetail.java
com.cloudbees.gasp.model.PlaceDetails.java
com.cloudbees.gasp.model.PlaceEvent.java
com.cloudbees.gasp.model.Place.java
com.cloudbees.gasp.model.Places.java
com.cloudbees.gasp.model.Query.java
com.cloudbees.gasp.model.Restaurant.java
com.cloudbees.gasp.model.Review.java
com.cloudbees.gasp.model.TwitterStatus.java
com.cloudbees.gasp.model.TwitterStatuses.java
com.cloudbees.gasp.model.TwitterTokenResponse.java
com.cloudbees.gasp.model.User.java
com.cloudbees.gasp.robotium.NavigationTest.java
com.cloudbees.gasp.server.GaspEntityTest.java
com.cloudbees.gasp.server.GaspRestaurantTest.java
com.cloudbees.gasp.server.GaspReviewTest.java
com.cloudbees.gasp.server.GaspServerAPI.java
com.cloudbees.gasp.service.AsyncRESTClient.java
com.cloudbees.gasp.service.AsyncRestTestAll.java
com.cloudbees.gasp.service.AsyncRestTestIndex.java
com.cloudbees.gasp.service.IRESTListener.java
com.cloudbees.gasp.service.RESTIntentService.java
com.cloudbees.gasp.service.RestaurantSyncServiceTest.java
com.cloudbees.gasp.service.RestaurantSyncService.java
com.cloudbees.gasp.service.RestaurantUpdateServiceTest.java
com.cloudbees.gasp.service.RestaurantUpdateService.java
com.cloudbees.gasp.service.ReviewSyncServiceTest.java
com.cloudbees.gasp.service.ReviewSyncService.java
com.cloudbees.gasp.service.ReviewUpdateServiceTest.java
com.cloudbees.gasp.service.ReviewUpdateService.java
com.cloudbees.gasp.service.TwitterServiceTest.java
com.cloudbees.gasp.service.UserSyncServiceTest.java
com.cloudbees.gasp.service.UserSyncService.java
com.cloudbees.gasp.service.UserUpdateServiceTest.java
com.cloudbees.gasp.service.UserUpdateService.java
com.cloudbees.gasp.twitter.TwitterAPI.java
com.cloudbees.gasp.twitter.TwitterAuthServiceTest.java
com.cloudbees.gasp.twitter.TwitterAuthentication.java