package com.appboy.sample.logging;
import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.Toast;
import com.appboy.Appboy;
import com.appboy.models.outgoing.AppboyProperties;
import com.appboy.sample.R;
import com.appboy.sample.util.ButtonUtils;
import com.appboy.support.StringUtils;
public abstract class CustomLogger extends DialogPreference {
private CheckBox mRequestFlush;
private Context mContext;
private EditText mName;
private EditText mPropertyKey;
private EditText mPropertyValue;
private LinearLayout mPropertyLayout;
private Spinner mTypeSpinner;
private Button mAddProperty;
private View mView;
private PropertyManager mPropertyManager;
public CustomLogger(Context context, AttributeSet attributeSet, int resourceId) {
super(context, attributeSet);
mContext = context;
setDialogLayoutResource(resourceId);
setPersistent(false);
}
@Override
protected View onCreateDialogView() {
mView = super.onCreateDialogView();
mName = (EditText) mView.findViewById(R.id.custom_name);
mPropertyKey = (EditText) mView.findViewById(R.id.property_key);
mPropertyValue = (EditText) mView.findViewById(R.id.property_value);
mRequestFlush = (CheckBox) mView.findViewById(R.id.custom_logging_flush_checkbox);
mTypeSpinner = (Spinner) mView.findViewById(R.id.property_type_spinner);
mAddProperty = (Button) mView.findViewById(R.id.add_property_button);
mPropertyLayout = (LinearLayout) mView.findViewById(R.id.property_linear_layout);
ButtonUtils.setUpPopulateButton(mView, R.id.custom_name_button, mName, "football");
mRequestFlush.setChecked(false);
mPropertyManager = new PropertyManager(mContext, mPropertyLayout, mPropertyKey, mPropertyValue, mTypeSpinner, mAddProperty);
return mView;
}
private void notifyResult(boolean result, String input) {
if (result) {
Toast.makeText(mContext, "Successfully logged " + input + ".", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(mContext, "Failed to log " + input + ".", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
String customName = mName.getText().toString();
if (!StringUtils.isNullOrBlank(customName)) {
notifyResult(customLog(customName, mPropertyManager.getAppboyProperties()), customName);
} else {
Toast.makeText(mContext, "Must input a name", Toast.LENGTH_LONG).show();
}
// Flushing manually is not recommended in almost all production situations as
// Appboy automatically flushes data to its servers periodically. This call
// is solely for testing purposes.
if (mRequestFlush.isChecked()) {
Appboy.getInstance(mContext).requestImmediateDataFlush();
}
}
}
protected abstract boolean customLog(String name, AppboyProperties properties);
}