package com.frogermcs.androiddevmetrics.internal;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Created by Miroslaw Stanek on 17.03.2016.
*/
public class MethodsTracingManager {
private static final String PREFS_KEY_SCHEDULED_METHODS = "PREFS_KEY_SCHEDULED_METHODS";
private static class Holder {
static final MethodsTracingManager INSTANCE = new MethodsTracingManager();
}
public static MethodsTracingManager getInstance() {
return Holder.INSTANCE;
}
private boolean isInitialized = false;
private SharedPreferences sharedPreferences;
private Set<String> scheduledMethods;
private Set<String> tracedMethods;
public void init(Context context) {
this.isInitialized = true;
sharedPreferences = context.getSharedPreferences("ADM_PREFS", Context.MODE_PRIVATE);
scheduledMethods = sharedPreferences.getStringSet(PREFS_KEY_SCHEDULED_METHODS, new HashSet<String>());
tracedMethods = new HashSet<>();
}
public void scheduleMethodTracing(String activityName, String method) {
checkInitialized();
scheduledMethods.add(methodKey(activityName, method));
updatePrefs();
}
public void disableMethodTracing(String activityName, String method) {
checkInitialized();
scheduledMethods.remove(methodKey(activityName, method));
updatePrefs();
}
public void addTracedMethod(String methodName) {
tracedMethods.add(methodName);
}
public String[] getTracedMethods() {
if (tracedMethods.size() == 0) return null;
String[] methodsArray = new String[tracedMethods.size()];
tracedMethods.toArray(methodsArray);
tracedMethods.clear();
return methodsArray;
}
public void clearTracedMethods() {
tracedMethods.clear();
}
@NonNull
private String methodKey(String activityName, String method) {
return activityName + "|" + method;
}
private void updatePrefs() {
sharedPreferences.edit()
.clear()
.putStringSet(PREFS_KEY_SCHEDULED_METHODS, scheduledMethods)
.commit();
}
public boolean shouldTraceMethod(String activityName, String method) {
checkInitialized();
return scheduledMethods.contains(methodKey(activityName, method));
}
private void checkInitialized() {
if (!isInitialized) throw new RuntimeException("MethodsTracingManager must be initialized by init(..)");
}
}