/**
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
* copy, modify, and distribute this software in source code or binary form for use
* in connection with the web services and APIs provided by Facebook.
*
* As with any software that integrates with the Facebook platform, your use of
* this software is subject to the Facebook Developer Principles and Policies
* [http://developers.facebook.com/policy/]. This copyright 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.facebook.internal;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import com.facebook.appevents.AppEventsLogger;
/**
* com.facebook.internal is solely for the use of other packages within the Facebook SDK for
* Android. Use of any of the classes in this package is unsupported, and they may be modified or
* removed without warning at any time.
*/
public class BoltsMeasurementEventListener extends BroadcastReceiver {
private static BoltsMeasurementEventListener _instance;
private final static String MEASUREMENT_EVENT_NOTIFICATION_NAME =
"com.parse.bolts.measurement_event";
private final static String MEASUREMENT_EVENT_NAME_KEY = "event_name";
private final static String MEASUREMENT_EVENT_ARGS_KEY = "event_args";
private final static String BOLTS_MEASUREMENT_EVENT_PREFIX = "bf_";
private Context applicationContext;
private BoltsMeasurementEventListener(Context context) {
applicationContext = context.getApplicationContext();
}
private void open() {
LocalBroadcastManager broadcastManager =
LocalBroadcastManager.getInstance(applicationContext);
broadcastManager.registerReceiver(
this, new IntentFilter(MEASUREMENT_EVENT_NOTIFICATION_NAME));
}
private void close() {
LocalBroadcastManager broadcastManager =
LocalBroadcastManager.getInstance(applicationContext);
broadcastManager.unregisterReceiver(this);
}
public static BoltsMeasurementEventListener getInstance(Context context) {
if (_instance != null) {
return _instance;
}
_instance = new BoltsMeasurementEventListener(context);
_instance.open();
return _instance;
}
protected void finalize() throws Throwable {
try {
close();
} finally {
super.finalize();
}
}
@Override
public void onReceive(Context context, Intent intent) {
AppEventsLogger appEventsLogger = AppEventsLogger.newLogger(context);
String eventName = BOLTS_MEASUREMENT_EVENT_PREFIX +
intent.getStringExtra(MEASUREMENT_EVENT_NAME_KEY);
Bundle eventArgs = intent.getBundleExtra(MEASUREMENT_EVENT_ARGS_KEY);
Bundle logData = new Bundle();
for(String key : eventArgs.keySet()) {
String safeKey = key.replaceAll(
"[^0-9a-zA-Z _-]", "-").replaceAll("^[ -]*", "").replaceAll("[ -]*$", "");
logData.putString(safeKey, (String)eventArgs.get(key));
}
appEventsLogger.logEvent(eventName, logData);
}
}