package com.cellasoft.univrapp.utils;
import android.content.Context;
import android.text.TextUtils;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
import com.cellasoft.univrapp.BuildConfig;
import com.cellasoft.univrapp.Settings;
import com.cellasoft.univrapp.gcm.ServerUtilities;
import com.google.android.gcm.GCMRegistrar;
import static com.cellasoft.univrapp.Config.GCM_SENDER_ID;
import static com.cellasoft.univrapp.utils.LogUtils.*;
public class GCMUtils {
private static final String TAG = makeLogTag(GCMUtils.class);
private static AsyncTask<Void, Void, Void> gcmRegisterTask,
gcmUnregisterTask;
public static void doRegister(final Context activity) {
GCMRegistrar.checkDevice(activity);
if (BuildConfig.DEBUG) {
GCMRegistrar.checkManifest(activity);
}
final String regId = GCMRegistrar.getRegistrationId(activity);
if (TextUtils.isEmpty(regId)) {
// Automatically registers application on startup.
GCMRegistrar.register(activity, GCM_SENDER_ID);
} else {
// Device is already registered on GCM, check server.
if (GCMRegistrar.isRegisteredOnServer(activity)) {
// Skips registration
LOGI(TAG, "Already registered on the GCM server");
} else {
// Try to register again, but not on the UI thread.
// It's also necessary to cancel the task in onDestroy().
gcmRegisterTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
boolean registered = ServerUtilities.register(
activity.getApplicationContext(),
String.valueOf(Settings.getUniversity().dest),
regId);
if (!registered) {
GCMRegistrar.unregister(activity
.getApplicationContext());
}
Settings.setNotificationUnivrApp(registered);
return null;
}
@Override
protected void onPostExecute(Void result) {
if (activity instanceof SherlockPreferenceActivity) {
SherlockPreferenceActivity prefAct = (SherlockPreferenceActivity) activity;
prefAct.findPreference("univrapp_regid")
.setSummary(Settings.getRegistrationId());
}
gcmRegisterTask = null;
}
};
gcmRegisterTask.execute(null, null, null);
}
}
}
public static void doUnregister(final Context activity) {
gcmUnregisterTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
ServerUtilities.unregister(activity,
Settings.getRegistrationId());
Settings.setNotificationUnivrApp(false);
return null;
}
@Override
protected void onPostExecute(Void result) {
if (activity instanceof SherlockPreferenceActivity) {
SherlockPreferenceActivity prefAct = (SherlockPreferenceActivity) activity;
prefAct.findPreference("univrapp_regid").setSummary(
"Not Registered");
}
gcmUnregisterTask = null;
}
};
gcmUnregisterTask.execute(null, null, null);
}
public static void onDistroyGCMClient(Context activity) {
if (gcmRegisterTask != null) {
gcmRegisterTask.cancel(true);
}
if (gcmUnregisterTask != null) {
gcmUnregisterTask.cancel(true);
}
try {
GCMRegistrar.onDestroy(activity.getApplicationContext());
} catch (Exception e) {
LOGE("UnRegister Receiver Error", "> " + e.getMessage());
}
}
public static boolean isRegistered(Context activity) {
return GCMRegistrar.isRegistered(activity);
}
}