diff options
Diffstat (limited to 'main/src/cgeo/geocaching/settings/CapabilitiesPreference.java')
| -rw-r--r-- | main/src/cgeo/geocaching/settings/CapabilitiesPreference.java | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/settings/CapabilitiesPreference.java b/main/src/cgeo/geocaching/settings/CapabilitiesPreference.java new file mode 100644 index 0000000..d2e19b7 --- /dev/null +++ b/main/src/cgeo/geocaching/settings/CapabilitiesPreference.java @@ -0,0 +1,91 @@ +package cgeo.geocaching.settings; + +import cgeo.geocaching.CgeoApplication; +import cgeo.geocaching.R; +import cgeo.geocaching.connector.ConnectorFactory; +import cgeo.geocaching.connector.IConnector; + +import org.apache.commons.lang3.StringUtils; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.res.TypedArray; +import android.preference.Preference; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebView; + +/** + * Preference for displaying the supported capabilities of an {@link IConnector} implementation. + */ +public class CapabilitiesPreference extends AbstractAttributeBasedPrefence { + + private String connectorCode; + + public CapabilitiesPreference(Context context) { + super(context); + } + + public CapabilitiesPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public CapabilitiesPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + public View getView(View convertView, ViewGroup parent) { + setOnPreferenceClickListener(new ClickListener()); + return super.getView(convertView, parent); + } + + private final class ClickListener implements OnPreferenceClickListener { + @Override + public boolean onPreferenceClick(final Preference preference) { + WebView htmlView = new WebView(preference.getContext()); + htmlView.loadData(createCapabilitiesMessage(), "text/html", null); + AlertDialog.Builder builder = new AlertDialog.Builder(preference.getContext()); + builder.setView(htmlView) + .setIcon(android.R.drawable.ic_dialog_info) + .setTitle(R.string.settings_features) + .setPositiveButton(R.string.err_none, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); + builder.create().show(); + return false; + } + } + + public String createCapabilitiesMessage() { + // TODO: this needs a better key for the connectors + IConnector connector = ConnectorFactory.getConnector(connectorCode + "1234"); + if (connector == null) { + return StringUtils.EMPTY; + } + StringBuilder builder = new StringBuilder("<p>" + + CgeoApplication.getInstance().getString(R.string.feature_description) + "<ul>"); + + for (String capability : connector.getCapabilities()) { + builder.append("<li>").append(capability).append("</li>"); + } + + builder.append("</ul></p>"); + return builder.toString(); + } + + @Override + protected void processAttributeValues(TypedArray values) { + connectorCode = values.getString(0); + } + + @Override + protected int[] getAttributeNames() { + return new int[] { R.attr.connector }; + } +} |
