li.barter.activities.HomeActivity.java Source code

Java tutorial

Introduction

Here is the source code for li.barter.activities.HomeActivity.java

Source

/*
 * Copyright (C) 2014 barter.li
 *
 * 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
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package li.barter.activities;

import android.location.Location;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.text.TextUtils;
import android.view.MenuItem;

import com.android.volley.Request.Method;
import com.facebook.AppEventsLogger;
import com.google.android.gms.location.LocationListener;

import org.json.JSONException;
import org.json.JSONObject;

import li.barter.R;
import li.barter.fragments.AbstractBarterLiFragment;
import li.barter.fragments.BooksAroundMeFragment;
import li.barter.http.BlRequest;
import li.barter.http.HttpConstants;
import li.barter.http.HttpConstants.ApiEndpoints;
import li.barter.http.HttpConstants.RequestId;
import li.barter.http.IBlRequestContract;
import li.barter.http.ResponseInfo;
import li.barter.utils.AppConstants.DeviceInfo;
import li.barter.utils.AppConstants.FragmentTags;
import li.barter.utils.AppConstants.UserInfo;
import li.barter.utils.GooglePlayClientWrapper;
import li.barter.utils.SharedPreferenceHelper;

/**
 * @author Vinay S Shenoy Main Activity for holding the Navigation Drawer and manages loading
 *         different fragments/options menus on Navigation items clicked
 */
@ActivityTransition(createEnterAnimation = R.anim.main_activity_launch, createExitAnimation = R.anim.launch_zoom_out, destroyEnterAnimation = R.anim.exit_zoom_in, destroyExitAnimation = R.anim.main_activity_exit)
public class HomeActivity extends AbstractDrawerActivity implements LocationListener {

    private static final String TAG = "HomeActivity";

    /**
     * Helper for connecting to Google Play Services
     */
    private GooglePlayClientWrapper mGooglePlayClientWrapper;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawer);
        initDrawer(R.id.drawer_layout, isMultipane() ? R.id.frame_side_content : R.id.frame_nav_drawer,
                isMultipane());
        mGooglePlayClientWrapper = new GooglePlayClientWrapper(this, this);

        if (isMultipane()) {
            setActionBarDisplayOptions(
                    ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_USE_LOGO | ActionBar.DISPLAY_SHOW_HOME);
        }
        if (savedInstanceState == null) {
            loadBooksAroundMeFragment();
        }

    }

    @Override
    protected void onStart() {
        super.onStart();
        mGooglePlayClientWrapper.onStart();

    }

    @Override
    protected void onResume() {
        super.onResume();

        // Call the 'activateApp' method to log an app event for use in analytics and advertising
        // reporting.  Do so in
        // the onResume methods of the primary Activities that an app may be launched into.
        AppEventsLogger.activateApp(this);
        if (DeviceInfo.INSTANCE.isNetworkConnected()) {
            informReferralToServer();
        }
    }

    /**
     * Informs the referral to server if it exists
     */
    private void informReferralToServer() {

        final String referrer = SharedPreferenceHelper.getString(R.string.pref_referrer);

        if (!TextUtils.isEmpty(referrer)) {

            final JSONObject requestObject = new JSONObject();

            try {
                requestObject.put(HttpConstants.REFERRAL_ID, referrer);
                requestObject.put(HttpConstants.DEVICE_ID, UserInfo.INSTANCE.getDeviceId());

                final BlRequest request = new BlRequest(Method.POST,
                        HttpConstants.getApiBaseUrl() + ApiEndpoints.REFERRAL, requestObject.toString(),
                        mVolleyCallbacks);
                request.setRequestId(RequestId.REFERRAL);
                addRequestToQueue(request, false, 0, true);
            } catch (JSONException e) {
            }

        }
    }

    @Override
    protected void onStop() {
        mGooglePlayClientWrapper.onStop();
        super.onStop();
    }

    @Override
    public void onLocationChanged(final Location location) {
        DeviceInfo.INSTANCE.setLatestLocation(location);
        final AbstractBarterLiFragment fragment = getCurrentMasterFragment();

        if (fragment instanceof BooksAroundMeFragment) {
            ((BooksAroundMeFragment) fragment).updateLocation(location);
        }
    }

    /**
     * Loads the {@link BooksAroundMeFragment} into the fragment container
     */
    public void loadBooksAroundMeFragment() {

        loadFragment(R.id.frame_content,
                (AbstractBarterLiFragment) Fragment.instantiate(this, BooksAroundMeFragment.class.getName(), null),
                FragmentTags.BOOKS_AROUND_ME, false, null);

    }

    @Override
    public boolean onOptionsItemSelected(final MenuItem item) {

        if (isMultipane() && item.getItemId() == android.R.id.home) {

            /* If it's a multipane layout, the drawer is already loaded
            *  and the drawer toggle is disabled. */
            return true;
        } else {
            return super.onOptionsItemSelected(item);
        }
    }

    @Override
    protected Object getTaskTag() {
        /* Here, hashCode() might show an Ambiguous method call bug. It's a bug in IntelliJ IDEA 13
        * http://youtrack.jetbrains.com/issue/IDEA-72835 */
        return hashCode();
    }

    @Override
    public void onSuccess(final int requestId, final IBlRequestContract request, final ResponseInfo response) {

        if (requestId == RequestId.REFERRAL) {
            SharedPreferenceHelper.removeKeys(this, R.string.pref_referrer);
        }

    }

    @Override
    public void onBadRequestError(final int requestId, final IBlRequestContract request, final int errorCode,
            final String errorMessage, final Bundle errorResponseBundle) {

    }

    @Override
    protected String getAnalyticsScreenName() {

        /*
         * We don't want to track this Activity since it is an empty activity
         * for controlling fragments. Instead, we will track the fragments
         * themselves
         */
        return "";
    }

    @Override
    protected boolean isDrawerActionBarToggleEnabled() {

        if (isMultipane()) {

            return false;
        }
        return true;
    }
}