Files
tubestation/mobile/android/base/widget/ContentSecurityDoorHanger.java

120 lines
4.4 KiB
Java

/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.widget;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import org.mozilla.gecko.R;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.view.View;
import org.mozilla.gecko.toolbar.SiteIdentityPopup;
import org.mozilla.gecko.util.ColorUtils;
public class ContentSecurityDoorHanger extends DoorHanger {
private static final String LOGTAG = "GeckoSecurityDoorHanger";
private final TextView mTitle;
private final TextView mSecurityState;
private final TextView mMessage;
public ContentSecurityDoorHanger(Context context, DoorhangerConfig config, Type type) {
super(context, config, type);
mTitle = (TextView) findViewById(R.id.security_title);
mSecurityState = (TextView) findViewById(R.id.security_state);
mMessage = (TextView) findViewById(R.id.security_message);
loadConfig(config);
}
@Override
protected void loadConfig(DoorhangerConfig config) {
final String message = config.getMessage();
if (message != null) {
mMessage.setText(message);
}
final JSONObject options = config.getOptions();
if (options != null) {
setOptions(options);
}
final DoorhangerConfig.Link link = config.getLink();
if (link != null) {
addLink(link.label, link.url);
}
addButtonsToLayout(config);
}
@Override
protected int getContentResource() {
return R.layout.doorhanger_security;
}
@Override
public void setOptions(final JSONObject options) {
super.setOptions(options);
final JSONObject link = options.optJSONObject("link");
if (link != null) {
try {
final String linkLabel = link.getString("label");
final String linkUrl = link.getString("url");
addLink(linkLabel, linkUrl);
} catch (JSONException e) { }
}
final JSONObject trackingProtection = options.optJSONObject("tracking_protection");
if (trackingProtection != null) {
mTitle.setVisibility(VISIBLE);
mTitle.setText(R.string.doorhanger_tracking_title);
try {
final boolean enabled = trackingProtection.getBoolean("enabled");
if (enabled) {
mMessage.setText(R.string.doorhanger_tracking_message_enabled);
mSecurityState.setText(R.string.doorhanger_tracking_state_enabled);
mSecurityState.setTextColor(ColorUtils.getColor(getContext(), R.color.affirmative_green));
} else {
mMessage.setText(R.string.doorhanger_tracking_message_disabled);
mSecurityState.setText(R.string.doorhanger_tracking_state_disabled);
mSecurityState.setTextColor(ColorUtils.getColor(getContext(), R.color.rejection_red));
}
mMessage.setVisibility(VISIBLE);
mSecurityState.setVisibility(VISIBLE);
} catch (JSONException e) {}
}
}
@Override
protected OnClickListener makeOnButtonClickListener(final int id) {
return new Button.OnClickListener() {
@Override
public void onClick(View v) {
final JSONObject response = new JSONObject();
try {
switch (mType) {
case TRACKING:
response.put("allowContent", (id == SiteIdentityPopup.ButtonType.DISABLE.ordinal()));
response.put("contentType", ("tracking"));
break;
default:
Log.w(LOGTAG, "Unknown doorhanger type " + mType.toString());
}
} catch (JSONException e) {
Log.e(LOGTAG, "Error creating onClick response", e);
}
mOnButtonClickListener.onButtonClick(response, ContentSecurityDoorHanger.this);
}
};
}
}