package im.actor.push;
import android.content.Context;
import com.google.android.gms.gcm.GoogleCloudMessaging;
import java.io.IOException;
import im.actor.runtime.util.ExponentialBackoff;
import im.actor.runtime.Log;
import im.actor.sdk.ActorSDK;
import im.actor.sdk.core.ActorPushManager;
public class PushManager implements ActorPushManager {
private static final String TAG = "im.actor.push.PushManager";
private boolean isRegistered = false;
@Override
public void registerPush(final Context context) {
if (!isRegistered) {
Log.d(TAG, "Requesting push token...");
new Thread() {
@Override
public void run() {
ExponentialBackoff exponentialBackoff = new ExponentialBackoff();
while (true) {
try {
String regId = tryRegisterPush(context);
if (regId != null) {
Log.d(TAG, "Token loaded");
onPushRegistered(regId);
return;
} else {
Log.d(TAG, "Unable to load Token");
exponentialBackoff.onFailure();
}
} catch (Exception e) {
e.printStackTrace();
exponentialBackoff.onFailure();
}
long waitTime = exponentialBackoff.exponentialWait();
Log.d(TAG, "Next attempt in " + waitTime + " ms");
try {
Thread.sleep(waitTime);
} catch (InterruptedException e1) {
e1.printStackTrace();
return;
}
}
}
}.start();
} else {
Log.d(TAG, "Already registered token");
}
}
private void onPushRegistered(String token) {
isRegistered = true;
ActorSDK.sharedActor().getMessenger().getPreferences().putBool("push_registered", true);
ActorSDK.sharedActor().getMessenger().registerGooglePush(ActorSDK.sharedActor().getPushId(), token);
}
private String tryRegisterPush(Context context) {
GoogleCloudMessaging cloudMessaging = GoogleCloudMessaging.getInstance(context);
Log.d(TAG, "Requesting push token iteration...");
try {
return cloudMessaging.register("" + ActorSDK.sharedActor().getPushId());
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}