/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import com.galaxy.meetup.client.android.analytics.AnalyticsInfo;
import com.galaxy.meetup.client.android.analytics.EsAnalytics;
import com.galaxy.meetup.client.android.analytics.OzActions;
import com.galaxy.meetup.client.android.analytics.OzViews;
import com.galaxy.meetup.client.android.content.EsAccount;
/**
*
* @author sihai
*
*/
public abstract class BaseActivity extends FragmentActivity {
private boolean mExited;
private boolean mRecorded;
private boolean mStartingActivity;
public abstract OzViews getViewForLogging();
//===========================================================================
// Constructor
//===========================================================================
public BaseActivity() {
}
//===========================================================================
// Abstract functions
//===========================================================================
protected abstract EsAccount getAccount();
//===========================================================================
// Public functions
//===========================================================================
public static boolean isFromThirdPartyApp(Intent intent) {
boolean flag = false;
if(intent != null)
flag = intent.getBooleanExtra("com.google.plus.analytics.intent.extra.FROM_THIRD_PARTY_APP", false);
return flag;
}
public final AnalyticsInfo getAnalyticsInfo()
{
return new AnalyticsInfo(getStartView(getIntent()), getViewForLogging(), getStartTime(getIntent()));
}
public final void startExternalActivity(Intent intent)
{
intent.addFlags(0x80000);
startActivity(intent);
}
public static void recordViewNavigation(Activity activity, EsAccount esaccount, OzViews ozviews)
{
Intent intent = activity.getIntent();
OzViews ozviews1 = getStartView(intent);
Bundle bundle = intent.getBundleExtra("com.google.plus.analytics.intent.extra.EXTRA_START_VIEW_EXTRAS");
long l = getStartTime(intent);
Bundle bundle1;
if(intent != null && intent.getBooleanExtra("com.google.plus.analytics.intent.extra.FROM_THIRD_PARTY_APP", false))
{
bundle1 = new Bundle();
bundle1.putBoolean("extra_platform_event", true);
} else
{
bundle1 = null;
}
EsAnalytics.recordNavigationEvent(activity, esaccount, ozviews1, ozviews, Long.valueOf(l), null, bundle, null, bundle1);
}
public static void recordReverseViewNavigation(Activity activity, EsAccount esaccount, OzViews ozviews, Bundle bundle)
{
Intent intent = activity.getIntent();
OzViews ozviews1 = getStartView(intent);
if(ozviews1 != null)
{
Bundle bundle1 = intent.getBundleExtra("com.google.plus.analytics.intent.extra.EXTRA_START_VIEW_EXTRAS");
Bundle bundle2;
if(intent != null && intent.getBooleanExtra("com.google.plus.analytics.intent.extra.FROM_THIRD_PARTY_APP", false))
{
bundle2 = new Bundle();
bundle2.putBoolean("extra_platform_event", true);
} else
{
bundle2 = null;
}
EsAnalytics.recordNavigationEvent(activity, esaccount, ozviews, ozviews1, null, null, bundle, bundle1, bundle2);
}
}
public final void onAsyncData()
{
recordViewNavigation();
}
//===========================================================================
// Protected functions
//===========================================================================
protected void replaceFragment(Fragment fragment)
{
int i = getDefaultFragmentContainerViewId();
fragment.setArguments(getIntent().getExtras());
FragmentManager fragmentmanager = getSupportFragmentManager();
FragmentTransaction fragmenttransaction = fragmentmanager.beginTransaction();
fragmenttransaction.replace(i, fragment, "default");
fragmenttransaction.setTransition(0);
fragmenttransaction.commitAllowingStateLoss();
fragmentmanager.executePendingTransactions();
}
protected final void recordUserAction(AnalyticsInfo analyticsinfo, OzActions ozactions)
{
recordUserAction(analyticsinfo, ozactions, null);
}
protected final void recordUserAction(AnalyticsInfo analyticsinfo, OzActions ozactions, Bundle bundle)
{
EsAccount esaccount = getAccount();
if(esaccount != null)
EsAnalytics.recordEvent(this, esaccount, analyticsinfo, ozactions, bundle);
}
protected final void recordUserAction(OzActions ozactions)
{
EsAccount esaccount = getAccount();
if(esaccount != null)
EsAnalytics.recordActionEvent(this, esaccount, ozactions, getViewForLogging());
}
protected int getDefaultFragmentContainerViewId()
{
return 0x1020002;
}
//===========================================================================
// Private functions
//===========================================================================
private static long getStartTime(Intent intent) {
return intent.getLongExtra("com.galaxy.meetup.client.analytics.intent.extra.START_TIME", System.currentTimeMillis());
}
private static OzViews getStartView(Intent intent) {
return OzViews.valueOf(intent.getIntExtra("com.galaxy.meetup.client.analytics.intent.extra.START_VIEW", -1));
}
private Intent instrument(Intent intent) {
OzViews ozviews = getViewForLogging();
if(ozviews == null) {
return intent;
}
Intent intent2 = new Intent(intent);
intent2.putExtra("com.galaxy.meetup.client.analytics.intent.extra.START_VIEW", ozviews.ordinal());
intent2.putExtra("com.galaxy.meetup.client.analytics.intent.extra.START_TIME", System.currentTimeMillis());
if(ozviews.equals(OzViews.PLATFORM_THIRD_PARTY_APP) || getIntent().getBooleanExtra("com.galaxy.meetup.client.analytics.intent.extra.FROM_THIRD_PARTY_APP", false))
intent2.putExtra("com.galaxy.meetup.client.analytics.intent.extra.FROM_THIRD_PARTY_APP", true);
Bundle bundle = getExtrasForLogging();
if(bundle != null && !bundle.isEmpty())
intent2.putExtras(bundle);
intent = intent2;
return intent;
}
private void recordViewNavigation() {
if(!mRecorded) {
OzViews ozviews = getViewForLogging();
EsAccount esaccount = getAccount();
if(esaccount != null && ozviews != null)
{
recordViewNavigation(((Activity) (this)), esaccount, ozviews);
mRecorded = true;
}
}
}
protected Bundle getExtrasForLogging() {
return null;
}
}