package cgeo.geocaching.settings;
import cgeo.geocaching.R;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
abstract class AbstractClickablePreference extends Preference implements View.OnLongClickListener {
private final SettingsActivity activity;
AbstractClickablePreference(final Context context, final AttributeSet attrs) {
super(context, attrs);
activity = (SettingsActivity) context;
}
AbstractClickablePreference(final Context context, final AttributeSet attrs, final int defStyle) {
super(context, attrs, defStyle);
activity = (SettingsActivity) context;
}
@Override
protected View onCreateView(final ViewGroup parent) {
setOnPreferenceClickListener(getOnPreferenceClickListener(activity));
final ListView listView = (ListView) parent;
listView.setOnItemLongClickListener(new ListView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(final AdapterView<?> parent, final View view, final int position, final long id) {
final ListView listView = (ListView) parent;
final ListAdapter listAdapter = listView.getAdapter();
final Object obj = listAdapter.getItem(position);
if (obj instanceof View.OnLongClickListener) {
final View.OnLongClickListener longListener = (View.OnLongClickListener) obj;
return longListener.onLongClick(view);
}
return false;
}
});
return super.onCreateView(parent);
}
protected abstract OnPreferenceClickListener getOnPreferenceClickListener(final SettingsActivity settingsActivity);
protected boolean isAuthorized() {
return false;
}
protected void revokeAuthorization() {
}
@Override
public boolean onLongClick(final View v) {
if (!isAuthorized()) {
return false;
}
final AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
builder.setMessage(R.string.auth_forget_message)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(R.string.auth_forget_title)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int id) {
revokeAuthorization();
setSummary(R.string.auth_unconnected);
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int id) {
dialog.cancel();
}
});
builder.create().show();
return true;
}
}