package com.antfortune.freeline.router.schema;
import android.util.Log;
import com.antfortune.freeline.FreelineCore;
import com.antfortune.freeline.router.ISchemaAction;
import com.antfortune.freeline.server.EmbedHttpServer;
import com.antfortune.freeline.server.LongLinkServer;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
/**
* Created by huangyong on 16/7/28.
*/
public class CloseLonglinkSchema implements ISchemaAction {
private static final String TAG = "Freeline.CloseLongLink";
@Override
public String getDescription() {
return "closeLongLink";
}
@Override
public void handle(String method, String path, HashMap<String, String> headers, Map<String, String> queries, InputStream input, EmbedHttpServer.ResponseOutputStream response) throws Exception {
String lastSync = queries.get("lastSync");
FreelineCore.saveLastDynamicSyncId(Long.parseLong(lastSync));
Log.i(TAG, "save last sync value: " + lastSync);
boolean forceRestart = queries.containsKey("restart");
if (forceRestart) {
Log.i(TAG, "find restart marker, appliacation will restart.");
}
if (LongLinkServer.isDexChanged()
|| LongLinkServer.isResourcesChanged()
|| LongLinkServer.isNativeChanged()) {
if (LongLinkServer.isDexChanged()
|| LongLinkServer.isNativeChanged()
|| forceRestart) {
if (LongLinkServer.isDexChanged()) {
Log.i(TAG, "with dex changes, need to restart the process (activity stack will be reserved)");
} else if (LongLinkServer.isNativeChanged()) {
Log.i(TAG, "with .so files changed, need to restart the process (activity stack will be reserved)");
}
FreelineCore.restartApplication(LongLinkServer.getBundleName(), LongLinkServer.getDstPath(), LongLinkServer.getDynamicDexPath(), LongLinkServer.getOptDirPath());
LongLinkServer.resetDexChangedFlag();
LongLinkServer.resetResourcesChangedFlag();
LongLinkServer.resetNativeChangedFlag();
} else if (LongLinkServer.isResourcesChanged()) {
FreelineCore.clearResourcesCache();
FreelineCore.updateActivity(LongLinkServer.getBundleName(), LongLinkServer.getDstPath());
LongLinkServer.resetResourcesChangedFlag();
Log.i(TAG, "with only res changes, just recreate the running activity.");
}
response.setStatusCode(200);
}
}
}