package com.antfortune.freeline;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import com.antfortune.freeline.util.ActivityManager;
import java.util.HashMap;
/**
* Created by huangyong on 16/7/31.
*/
public class FreelineReceiver extends BroadcastReceiver {
private static final String TAG = "Freeline.Receiver";
public static final String ACTION_KEY = "action";
public static final String UUID = "uuid";
public static final String SP_KEY = "sp_key";
public static final String SP_VALUE = "sp_value";
public static final String DEX_VALUE = "dex_path";
public static final String OPT_VALUE = "opt_path";
public static final int ACTION_UPDATE_ACTIVITY = 1;
public static final int ACTION_RESTART_APPLICATION = 2;
public static final int ACTION_SAVE_DYNAMIC_INFO = 3;
@Override
public void onReceive(Context context, Intent intent) {
String uuid = intent.getStringExtra(UUID);
if (FreelineCore.getUuid().equalsIgnoreCase(uuid)) {
int type = intent.getIntExtra(ACTION_KEY, -1);
Log.i(TAG, "receive action type: " + type);
if (type == ACTION_UPDATE_ACTIVITY) {
saveDynamicResInfo(intent);
FreelineCore.updateDynamicTime();
ActivityManager.restartForegroundActivity();
} else if (type == ACTION_RESTART_APPLICATION) {
saveDynamicResInfo(intent);
applyDynamicDex(intent);
FreelineCore.updateDynamicTime();
ActivityManager.restart(FreelineCore.getApplication(), true);
}
}
}
private void saveDynamicResInfo(Intent intent) {
String key = intent.getStringExtra(SP_KEY);
String value = intent.getStringExtra(SP_VALUE);
if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) {
HashMap<String, String> res = new HashMap<String, String>();
Log.d(TAG, "destPath :" + value);
res.put(key, value);
FreelineCore.saveDynamicResInfo(res);
}
}
private void applyDynamicDex(Intent intent) {
String dex = intent.getStringExtra(DEX_VALUE);
String opt = intent.getStringExtra(OPT_VALUE);
if (!TextUtils.isEmpty(dex) && !TextUtils.isEmpty(opt)) {
FreelineCore.applyDynamicDex(dex, opt);
}
}
}