package com.quickblox.q_municate.tasks;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import com.google.android.gms.gcm.GoogleCloudMessaging;
import com.quickblox.core.exception.QBResponseException;
import com.quickblox.messages.QBPushNotifications;
import com.quickblox.messages.model.QBEnvironment;
import com.quickblox.messages.model.QBNotificationChannel;
import com.quickblox.messages.model.QBSubscription;
import com.quickblox.q_municate.utils.StringObfuscator;
import com.quickblox.q_municate_core.core.concurrency.BaseErrorAsyncTask;
import com.quickblox.q_municate_core.service.QBServiceConsts;
import com.quickblox.q_municate_core.utils.Utils;
import com.quickblox.q_municate_core.utils.helpers.CoreSharedHelper;
import com.quickblox.q_municate_db.utils.ErrorUtils;
import java.io.IOException;
import java.util.ArrayList;
public class QBGCMRegistrationTask extends BaseErrorAsyncTask<GoogleCloudMessaging, Void, Bundle> {
private static final String TAG = QBGCMRegistrationTask.class.getSimpleName();
public QBGCMRegistrationTask(Activity activity) {
super(activity);
}
@Override
public void onResult(Bundle bundle) {
if (!bundle.isEmpty()) {
if (bundle.getBoolean(QBServiceConsts.EXTRA_IS_PUSH_SUBSCRIBED_ON_SERVER)) {
storeRegistration(activityRef.get(), bundle);
}
}
}
@Override
public Bundle performInBackground(GoogleCloudMessaging... params) throws Exception {
GoogleCloudMessaging gcm = params[0];
Bundle registration = new Bundle();
String registrationId = getRegistrationId(gcm);
registration.putString(QBServiceConsts.EXTRA_REGISTRATION_ID, registrationId);
boolean subscribed = subscribeToPushNotifications(registrationId);
registration.putBoolean(QBServiceConsts.EXTRA_IS_PUSH_SUBSCRIBED_ON_SERVER, subscribed);
return registration;
}
private String getRegistrationId(GoogleCloudMessaging gcm) throws IOException {
String registrationId = StringObfuscator.getPushRegistrationAppId();
registrationId = gcm.register(registrationId);
return registrationId;
}
private boolean subscribeToPushNotifications(String regId) {
String deviceId = getDeviceIdForMobile(activityRef.get());
if (deviceId == null) {
deviceId = getDeviceIdForTablet(activityRef.get());
}
QBSubscription subscription = new QBSubscription();
subscription.setDeviceUdid(deviceId);
subscription.setRegistrationID(regId);
subscription.setNotificationChannel(QBNotificationChannel.GCM);
subscription.setEnvironment(QBEnvironment.PRODUCTION);
ArrayList<QBSubscription> subscriptions = null;
try {
subscriptions = QBPushNotifications.createSubscription(subscription);
} catch (QBResponseException e) {
ErrorUtils.logError(e);
}
return subscriptions != null;
}
private String getDeviceIdForMobile(Context context) {
final TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(
Context.TELEPHONY_SERVICE);
if (telephonyManager == null) {
return null;
}
return telephonyManager.getDeviceId();
}
private String getDeviceIdForTablet(Context context) {
return Settings.Secure.getString(context.getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID); //*** use for tablets
}
private void storeRegistration(Context context, Bundle registration) {
CoreSharedHelper coreSharedHelper = CoreSharedHelper.getInstance();
coreSharedHelper.savePushRegistrationId(registration.getString(QBServiceConsts.EXTRA_REGISTRATION_ID));
coreSharedHelper.savePushAppVersion(Utils.getAppVersionCode(context));
}
}