package com.artemzin.qualitymatters.ui.presenters;
import android.support.annotation.NonNull;
import com.artemzin.qualitymatters.developer_settings.DeveloperSettingsModelImpl;
import com.artemzin.qualitymatters.models.AnalyticsModel;
import com.artemzin.qualitymatters.ui.views.DeveloperSettingsView;
import okhttp3.logging.HttpLoggingInterceptor;
public class DeveloperSettingsPresenter extends Presenter<DeveloperSettingsView> {
@NonNull
private final DeveloperSettingsModelImpl developerSettingsModel;
@NonNull
private final AnalyticsModel analyticsModel;
public DeveloperSettingsPresenter(@NonNull DeveloperSettingsModelImpl developerSettingsModel, @NonNull AnalyticsModel analyticsModel) {
this.developerSettingsModel = developerSettingsModel;
this.analyticsModel = analyticsModel;
}
@Override
public void bindView(@NonNull DeveloperSettingsView view) {
super.bindView(view);
view.changeGitSha(developerSettingsModel.getGitSha());
view.changeBuildDate(developerSettingsModel.getBuildDate());
view.changeBuildVersionCode(developerSettingsModel.getBuildVersionCode());
view.changeBuildVersionName(developerSettingsModel.getBuildVersionName());
view.changeStethoState(developerSettingsModel.isStethoEnabled());
view.changeLeakCanaryState(developerSettingsModel.isLeakCanaryEnabled());
view.changeTinyDancerState(developerSettingsModel.isTinyDancerEnabled());
view.changeHttpLoggingLevel(developerSettingsModel.getHttpLoggingLevel());
}
public void changeStethoState(boolean enabled) {
if (developerSettingsModel.isStethoEnabled() == enabled) {
return; // no-op
}
analyticsModel.sendEvent("developer_settings_stetho_" + booleanToEnabledDisabled(enabled));
boolean stethoWasEnabled = developerSettingsModel.isStethoEnabled();
developerSettingsModel.changeStethoState(enabled);
final DeveloperSettingsView view = view();
if (view != null) {
view.showMessage("Stetho was " + booleanToEnabledDisabled(enabled));
if (stethoWasEnabled) {
view.showAppNeedsToBeRestarted();
}
}
}
public void changeLeakCanaryState(boolean enabled) {
if (developerSettingsModel.isLeakCanaryEnabled() == enabled) {
return; // no-op
}
analyticsModel.sendEvent("developer_settings_leak_canary_" + booleanToEnabledDisabled(enabled));
developerSettingsModel.changeLeakCanaryState(enabled);
final DeveloperSettingsView view = view();
if (view != null) {
view.showMessage("LeakCanary was " + booleanToEnabledDisabled(enabled));
view.showAppNeedsToBeRestarted(); // LeakCanary can not be enabled on demand (or it's possible?)
}
}
public void changeTinyDancerState(boolean enabled) {
if (developerSettingsModel.isTinyDancerEnabled() == enabled) {
return; // no-op
}
analyticsModel.sendEvent("developer_settings_tiny_dancer_" + booleanToEnabledDisabled(enabled));
developerSettingsModel.changeTinyDancerState(enabled);
final DeveloperSettingsView view = view();
if (view != null) {
view.showMessage("TinyDancer was " + booleanToEnabledDisabled(enabled));
}
}
public void changeHttpLoggingLevel(@NonNull HttpLoggingInterceptor.Level loggingLevel) {
if (developerSettingsModel.getHttpLoggingLevel() == loggingLevel) {
return; // no-op
}
analyticsModel.sendEvent("developer_settings_http_logging_level_" + loggingLevel);
developerSettingsModel.changeHttpLoggingLevel(loggingLevel);
final DeveloperSettingsView view = view();
if (view != null) {
view.showMessage("Http logging level was changed to " + loggingLevel.toString());
}
}
@NonNull
private static String booleanToEnabledDisabled(boolean enabled) {
return enabled ? "enabled" : "disabled";
}
}