package de.fau.cs.mad.fablab.android.model; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.util.Log; import de.fau.cs.mad.fablab.android.model.events.NoUpdateAvailableEvent; import de.fau.cs.mad.fablab.android.model.events.UpdateAvailableEvent; import de.fau.cs.mad.fablab.rest.core.PlatformType; import de.fau.cs.mad.fablab.rest.core.UpdateStatus; import de.fau.cs.mad.fablab.rest.myapi.VersionCheckApi; import de.greenrobot.event.EventBus; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; public class VersionCheckModel { private static final String TAG = "VersionCheckModel"; private VersionCheckApi mVersionCheckApi; private int mVersionCode; private boolean mVersionCheckRequested; private final Callback<UpdateStatus> mCheckVersionCallback = new Callback<UpdateStatus>() { @Override public void success(UpdateStatus updateStatus, Response response) { EventBus eventBus = EventBus.getDefault(); switch (updateStatus.getUpdateAvailable()) { case NotAvailable: Log.i(TAG, "no update available"); eventBus.post(new NoUpdateAvailableEvent()); break; case Optional: Log.i(TAG, "optional update to version " + updateStatus.getLatestVersion() + " available"); eventBus.post(new UpdateAvailableEvent(false, updateStatus.getUpdateMessage())); break; case Required: Log.i(TAG, "required update to version " + updateStatus.getLatestVersion() + " available"); eventBus.post(new UpdateAvailableEvent(true, updateStatus.getUpdateMessage())); break; } mVersionCheckRequested = false; } @Override public void failure(RetrofitError error) { Log.w(TAG, "version check failed: " + error.getMessage()); mVersionCheckRequested = false; } }; public VersionCheckModel(VersionCheckApi versionCheckApi, Context context) { mVersionCheckApi = versionCheckApi; try { PackageInfo pInfo = context.getPackageManager().getPackageInfo( context.getPackageName(), 0); mVersionCode = pInfo.versionCode; } catch (PackageManager.NameNotFoundException e) { throw new RuntimeException(e); } checkVersion(); } public void checkVersion() { if (mVersionCheckRequested) { return; } mVersionCheckRequested = true; mVersionCheckApi.checkVersion(PlatformType.ANDROID, mVersionCode, mCheckVersionCallback); } }