/**
* Copyright 2016-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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 com.amazonaws.mobileconnectors.pinpoint.internal.core;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import com.amazonaws.mobileconnectors.pinpoint.PinpointConfiguration;
import com.amazonaws.mobileconnectors.pinpoint.analytics.AnalyticsClient;
import com.amazonaws.mobileconnectors.pinpoint.analytics.SessionClient;
import com.amazonaws.mobileconnectors.pinpoint.internal.core.configuration.AndroidPreferencesConfiguration;
import com.amazonaws.mobileconnectors.pinpoint.internal.core.http.SDKInfoHandler;
import com.amazonaws.mobileconnectors.pinpoint.internal.core.idresolver.SharedPrefsUniqueIdService;
import com.amazonaws.mobileconnectors.pinpoint.internal.core.system.AndroidSystem;
import com.amazonaws.mobileconnectors.pinpoint.internal.core.util.SDKInfo;
import com.amazonaws.mobileconnectors.pinpoint.targeting.TargetingClient;
import com.amazonaws.mobileconnectors.pinpoint.targeting.notification.NotificationClient;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.pinpoint.AmazonPinpoint;
import com.amazonaws.services.pinpoint.AmazonPinpointClient;
import com.amazonaws.services.pinpointanalytics.AmazonPinpointAnalyticsClient;
import java.io.Serializable;
public class PinpointContext implements Serializable {
private final AndroidPreferencesConfiguration configuration;
private final PinpointConfiguration pinpointConfiguration;
private String uniqueId;
private final SDKInfo sdkInfo;
private final SharedPrefsUniqueIdService uniqueIdService;
private final AndroidSystem system;
private final AmazonPinpointAnalyticsClient analyticsServiceClient;
private final AmazonPinpointClient pinpointServiceClient;
private final Context applicationContext;
private AnalyticsClient analyticsClient;
private TargetingClient targetingClient;
private SessionClient sessionClient;
private NotificationClient notificationClient;
public PinpointContext() {
this.configuration = null;
this.pinpointConfiguration = null;
this.sdkInfo = null;
this.uniqueIdService = null;
this.system = null;
this.analyticsServiceClient = null;
this.pinpointServiceClient = null;
this.applicationContext = null;
this.analyticsClient = null;
this.targetingClient = null;
this.sessionClient = null;
this.notificationClient = null;
}
public PinpointContext(final AmazonPinpointAnalyticsClient analyticsServiceClient,
final AmazonPinpointClient pinpointServiceClient,
final Context applicationContext, final String appId,
final SDKInfo sdkInfo, final PinpointConfiguration pinpointConfiguration) {
this.sdkInfo = sdkInfo;
this.pinpointConfiguration = pinpointConfiguration;
this.system = new AndroidSystem(applicationContext, appId);
this.uniqueIdService = new SharedPrefsUniqueIdService(appId, applicationContext);
this.uniqueId = uniqueIdService.getUniqueId(this);
this.analyticsServiceClient = analyticsServiceClient;
this.pinpointServiceClient = pinpointServiceClient;
this.applicationContext = applicationContext;
this.configuration = AndroidPreferencesConfiguration.newInstance(this);
analyticsServiceClient.addRequestHandler(new SDKInfoHandler(sdkInfo));
pinpointServiceClient.addRequestHandler(new SDKInfoHandler(sdkInfo));
}
public NotificationClient getNotificationClient() {
return notificationClient;
}
public void setNotificationClient(NotificationClient notificationClient) {
this.notificationClient = notificationClient;
}
public AnalyticsClient getAnalyticsClient() {
return analyticsClient;
}
public void setAnalyticsClient(AnalyticsClient analyticsClient) {
this.analyticsClient = analyticsClient;
}
public SessionClient getSessionClient() {
return sessionClient;
}
public void setSessionClient(SessionClient sessionClient) {
this.sessionClient = sessionClient;
}
public TargetingClient getTargetingClient() {
return targetingClient;
}
public void setTargetingClient(TargetingClient targetingClient) {
this.targetingClient = targetingClient;
}
public AndroidPreferencesConfiguration getConfiguration() {
return configuration;
}
public PinpointConfiguration getPinpointConfiguration() {
return pinpointConfiguration;
}
public String getUniqueId() {
return uniqueId;
}
public SDKInfo getSDKInfo() {
return sdkInfo;
}
public AndroidSystem getSystem() {
return system;
}
public AmazonPinpointAnalyticsClient getAnalyticsServiceClient() {
return analyticsServiceClient;
}
public AmazonPinpoint getPinpointServiceClient() {
return pinpointServiceClient;
}
public Context getApplicationContext() {
return applicationContext;
}
public String getNetworkType() {
try {
final ConnectivityManager connectivity = (ConnectivityManager) applicationContext
.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo networkInfo = connectivity.getActiveNetworkInfo();
if (null != networkInfo && networkInfo.isConnected() && networkInfo.isAvailable()
&& networkInfo.getTypeName() != null) {
return networkInfo.getTypeName();
} else {
return "Unknown";
}
} catch (final Exception ex) {
return "Unknown";
}
}
}