package com.appboy.sample;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import com.appboy.Constants;
import com.appboy.support.AppboyLogger;
public class LogLevelDialogPreference extends DialogPreference {
private static final String TAG = String.format("%s.%s", Constants.APPBOY_LOG_TAG_PREFIX, LogLevelDialogPreference.class.getName());
private static final String WARN = "warn";
private static final String ERROR = "error";
private static final String VERBOSE = "verbose";
private static final String DEBUG = "debug";
private static final String INFO = "info";
private static final String SUPPRESS = "suppress";
private static final String LOG_SELECT_PREFIX = "Updated minimum log level to ";
private static final String LOG_LEVEL_TOAST = "Appboy Logging Level set to %s.";
private static final String[] OPTIONS = new String[]{VERBOSE, DEBUG, INFO, WARN, ERROR, SUPPRESS};
private View mView;
private Spinner mLogLevelSpinner;
public LogLevelDialogPreference(Context context, AttributeSet attrs) {
super(context, attrs);
setDialogLayoutResource(R.layout.log_level_dialog);
setPersistent(false);
}
@Override
protected View onCreateDialogView() {
mView = super.onCreateDialogView();
mLogLevelSpinner = (Spinner) mView.findViewById(R.id.log_level_spinner);
ArrayAdapter adapter = new ArrayAdapter(getContext(), android.R.layout.simple_spinner_dropdown_item, OPTIONS);
mLogLevelSpinner.setAdapter(adapter);
int currentLogLevel = AppboyLogger.LogLevel;
int initialSelection;
switch (currentLogLevel) {
case Log.VERBOSE:
initialSelection = 0;
break;
case Log.DEBUG:
initialSelection = 1;
break;
case Log.INFO:
initialSelection = 2;
break;
case Log.WARN:
initialSelection = 3;
break;
case Log.ERROR:
initialSelection = 4;
break;
case AppboyLogger.SUPPRESS:
initialSelection = 5;
break;
default:
initialSelection = 0;
break;
}
mLogLevelSpinner.setSelection(initialSelection);
mLogLevelSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (OPTIONS[position]) {
case VERBOSE:
if (AppboyLogger.LogLevel != Log.VERBOSE) {
showToast(LOG_LEVEL_TOAST, OPTIONS[position]);
}
AppboyLogger.LogLevel = Log.VERBOSE;
AppboyLogger.v(TAG, LOG_SELECT_PREFIX + VERBOSE);
saveLogLevel(Log.VERBOSE);
break;
case DEBUG:
if (AppboyLogger.LogLevel != Log.DEBUG) {
showToast(LOG_LEVEL_TOAST, OPTIONS[position]);
}
AppboyLogger.LogLevel = Log.DEBUG;
AppboyLogger.d(TAG, LOG_SELECT_PREFIX + DEBUG);
saveLogLevel(Log.DEBUG);
break;
case INFO:
if (AppboyLogger.LogLevel != Log.INFO) {
showToast(LOG_LEVEL_TOAST, OPTIONS[position]);
}
AppboyLogger.LogLevel = Log.INFO;
AppboyLogger.i(TAG, LOG_SELECT_PREFIX + INFO);
saveLogLevel(Log.INFO);
break;
case WARN:
if (AppboyLogger.LogLevel != Log.WARN) {
showToast(LOG_LEVEL_TOAST, OPTIONS[position]);
}
AppboyLogger.LogLevel = Log.WARN;
AppboyLogger.w(TAG, LOG_SELECT_PREFIX + WARN);
saveLogLevel(Log.WARN);
break;
case ERROR:
if (AppboyLogger.LogLevel != Log.ERROR) {
showToast(LOG_LEVEL_TOAST, OPTIONS[position]);
}
AppboyLogger.LogLevel = Log.ERROR;
AppboyLogger.e(TAG, LOG_SELECT_PREFIX + ERROR);
saveLogLevel(Log.ERROR);
break;
case SUPPRESS:
if (AppboyLogger.LogLevel != AppboyLogger.SUPPRESS) {
showToast("Disabled Appboy Logging.", null);
}
AppboyLogger.LogLevel = AppboyLogger.SUPPRESS;
saveLogLevel(AppboyLogger.SUPPRESS);
break;
default:
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
return mView;
}
// Displays a toast to the user
private void showToast(String message, String inputString) {
if (inputString != null) {
message = String.format(message, inputString);
}
Toast.makeText(this.getContext(), message, Toast.LENGTH_LONG).show();
}
private void saveLogLevel(int logLevel) {
SharedPreferences.Editor sharedPreferencesEditor = this.getContext().getSharedPreferences(this.getContext().getString(R.string.log_level_dialog_title), Context.MODE_PRIVATE).edit();
sharedPreferencesEditor.putInt(this.getContext().getString(R.string.current_log_level), logLevel);
sharedPreferencesEditor.apply();
}
}