com.measurence.sdk.android.demo.MainActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.measurence.sdk.android.demo.MainActivity.java

Source

/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2014 Measurence Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

package com.measurence.sdk.android.demo;

import android.app.AlertDialog;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.measurence.sdk.android.PresenceSessionUpdate;
import com.measurence.sdk.android.UserIdentity;
import com.measurence.sdk.android.api_subscription.MeasurenceApiSubscriptionService;
import com.measurence.sdk.android.api_subscription.gcm.AndroidApiSubscriptionService;
import com.measurence.sdk.android.api_subscription.gcm.GCMRegistrationIdUtil;
import com.measurence.sdk.android.api_subscription.httppost.HttpPostApiSubscriptionService;
import com.measurence.sdk.android.gcm_push_notifications.PresenceSessionUpdatesNotificationService;

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;

public class MainActivity extends ActionBarActivity {

    private final String LOG_TAG = "Measurence " + MainActivity.class.getSimpleName();

    static final class PresenceNotification {
        PresenceSessionUpdate presenceSessionUpdate;
        Date received;
    }

    /**
     * The Adapter which will be used to populate the ListView/GridView with
     * Views.
     */
    static ArrayAdapter<PresenceNotification> presenceNotificationsListAdapter;

    private BroadcastReceiver subscriptionResultBroadcastReceiver;

    private void displaySubscriptionResultMessage(String message) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(message).setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().add(R.id.container, new NotificationsFragment())
                    .commit();
        }
        checkRegistration();
        subscriptionResultBroadcastReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                String subscriptionResultMessage = intent
                        .getStringExtra(MeasurenceApiSubscriptionService.SUBSCRIPTION_RESULT_INTENT_MESSAGE);
                displaySubscriptionResultMessage(subscriptionResultMessage);
            }
        };

        if (presenceNotificationsListAdapter == null) {
            presenceNotificationsListAdapter = new ArrayAdapter<PresenceNotification>(this,
                    R.layout.list_item_notification, R.id.list_item_notification_view,
                    new ArrayList<PresenceNotification>()) {

                DateFormat dateFormat = DateFormat.getDateTimeInstance();

                private void setText(View root, int id, String text) {
                    TextView textView = (TextView) root.findViewById(id);
                    textView.setText(text);
                }

                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    LayoutInflater inflater = (LayoutInflater) getContext()
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    View itemView = inflater.inflate(R.layout.list_item_notification, null);
                    PresenceNotification notification = getItem(position);
                    PresenceSessionUpdate item = notification.presenceSessionUpdate;
                    String now = dateFormat.format(notification.received);
                    setText(itemView, R.id.list_item_notification_date, now);
                    StringBuilder sb = new StringBuilder();
                    for (UserIdentity userid : item.getUserIdentities()) {
                        sb.append(userid.getId()).append(" ");
                    }
                    setText(itemView, R.id.list_item_notification_userid, sb.toString());
                    setText(itemView, R.id.list_item_notification_storeid, item.getStoreKey());
                    setText(itemView, R.id.list_item_notification_new_user,
                            getString(item.getIsNewVisitorInStore().booleanValue() ? R.string.yes : R.string.no));
                    setText(itemView, R.id.list_item_notification_status, item.getStatus());
                    setText(itemView, R.id.list_item_notification_session_start,
                            dateFormat.format(item.getInterval().getStart()));
                    setText(itemView, R.id.list_item_notification_session_end,
                            dateFormat.format(item.getInterval().getEnd()));
                    setText(itemView, R.id.list_item_notification_session_UUID, item.getUpdateUUID());
                    return itemView;
                }
            };
            BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

                private void displaySessionUpdate(PresenceSessionUpdate presenceSessionUpdate) {
                    PresenceNotification notification = new PresenceNotification();
                    notification.presenceSessionUpdate = presenceSessionUpdate;
                    notification.received = new Date();
                    presenceNotificationsListAdapter.insert(notification, 0);
                    Log.i(LOG_TAG, "displaying session update|" + presenceSessionUpdate);
                }

                @Override
                public void onReceive(Context context, Intent intent) {
                    String presenceSessionUpdateJson = intent.getStringExtra(
                            PresenceSessionUpdatesNotificationService.SESSION_UPDATE_JSON_PARAMETER);

                    displaySessionUpdate(PresenceSessionUpdate.fromJson(presenceSessionUpdateJson));

                }
            };
            LocalBroadcastManager.getInstance(this).registerReceiver((broadcastReceiver),
                    new IntentFilter(PresenceSessionUpdatesNotificationService.SESSION_UPDATE_INTENT_ID));
        }

    }

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

        LocalBroadcastManager.getInstance(this).registerReceiver((subscriptionResultBroadcastReceiver),
                new IntentFilter(MeasurenceApiSubscriptionService.SUBSCRIPTION_RESULT_INTENT_ID));
    }

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

    private boolean checkPlayServices() {
        int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.SUCCESS) {
            if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
                GooglePlayServicesUtil.getErrorDialog(resultCode, this, R.string.PLAY_SERVICES_RESOLUTION_REQUEST)
                        .show();
            } else {
                Log.i(LOG_TAG, "This device is not supported.");
                finish();
            }
            return false;
        }
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.demo, menu);
        return true;
    }

    private String getIdentityOfAppUser() {
        // Put here the logic which return the identity of the user of your APP (e.g. an email)
        return getString(R.string.user_identity);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        if (id == R.id.force_subscription_to_android_apis) {
            Log.v(LOG_TAG, "force_subscription_to_android_apis");
            Intent registrationIntent = new Intent(this, AndroidApiSubscriptionService.class);
            registrationIntent.putExtra(MeasurenceApiSubscriptionService.REGISTRATION_INTENT_USER_IDENTITY,
                    getIdentityOfAppUser());
            startService(registrationIntent);
        }

        if (id == R.id.force_subscription_to_http_apis) {
            Log.v(LOG_TAG, "force_subscription_to_http_apis");
            Intent registrationIntent = new Intent(this, HttpPostApiSubscriptionService.class);
            registrationIntent.putExtra(MeasurenceApiSubscriptionService.REGISTRATION_INTENT_USER_IDENTITY,
                    getIdentityOfAppUser());
            startService(registrationIntent);
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onResume() {
        super.onResume();
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(
                Context.NOTIFICATION_SERVICE);
        mNotificationManager.cancel(PresenceSessionUpdatesNotificationService.NOTIFICATION_ID);
    }

    private void checkRegistration() {
        boolean playAvailable = checkPlayServices();
        if (!playAvailable) {
            return;
        }
        boolean isRegistered = GCMRegistrationIdUtil.checkRegistration(this);
        if (!isRegistered) {

            Intent registrationIntent = new Intent(this, MeasurenceApiSubscriptionService.class);
            // TODO
            registrationIntent.putExtra("user_id", "random_value");
            startService(registrationIntent);
        }
    }

}