package org.societies.android.platform.useragent.feedback;
import java.util.List;
import org.societies.api.internal.schema.useragent.feedback.UserFeedbackPrivacyNegotiationEvent;
import org.societies.api.schema.identity.RequestorBean;
import org.societies.api.schema.identity.RequestorCisBean;
import org.societies.api.schema.identity.RequestorServiceBean;
import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.Condition;
import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.RequestItem;
import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.ResponseItem;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class NegotiationActivity extends Activity implements OnItemSelectedListener {
private static final String LOG_TAG = NegotiationActivity.class.getName();
private static final String EXTRA_PRIVACY_POLICY = "org.societies.userfeedback.eventInfo";
private UserFeedbackPrivacyNegotiationEvent eventInfo = null;
private View[] requestControls;
private View[][] allResponses;
private TableLayout[] tblConditions;
private ScrollView svScroll;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_negotiation);
//GET EVENT OBJECT
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
eventInfo = bundle.getParcelable(EXTRA_PRIVACY_POLICY);
//SET HEADER INFO
RequestorBean requestor = eventInfo.getNegotiationDetails().getRequestor();
String sRequestorType = "community";
if (requestor instanceof RequestorServiceBean) {
sRequestorType = "installed service";
}
TextView lblHeader = (TextView) findViewById(R.id.txtHeader);
//lblHeader.setText(sHeader + "\r\n has requested access to the following data:");
lblHeader.setText("The " + sRequestorType + " is requesting access to your personal info for the following uses. Please select what you would like to allow:");
//GENERATE RESOURCE SPINNER
final List<ResponseItem> responses = eventInfo.getResponsePolicy().getResponseItems();
String[] resourceItems = new String[responses.size()];
for(int i=0; i<responses.size(); i++) {
resourceItems[i] = responses.get(i).getRequestItem().getResource().getDataType();
}
Spinner spinResources = (Spinner) findViewById(R.id.spinResource);
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item, resourceItems);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinResources.setAdapter(adapter);
spinResources.setOnItemSelectedListener(this);
//PROCESS EACH RESPONSE
tblConditions = new TableLayout[responses.size()];
allResponses = new View[responses.size()][];
for(int a=0; a<responses.size(); a++) {
ResponseItem response = responses.get(a);
RequestItem request = response.getRequestItem();
List<Condition> conditions = request.getConditions();
TableLayout tblCondition = new TableLayout(this);
tblCondition.setBackgroundResource(R.color.Grey);
requestControls = new View[conditions.size()];
//EACH CONDITION
for (int i=0; i<conditions.size(); i++) {
Condition condition = conditions.get(i);
boolean optional = condition.isOptional();
TextView label = new TextView(this);
label.setText(condition.getConditionConstant().value());
//DATA TYPE - CHECKBOX/TEXTBOX
if (condition.getConditionConstant().value().startsWith("data")) {
final EditText textbox = new EditText(this);
textbox.setText(condition.getValue());
textbox.setContentDescription(a + "_" + i);
textbox.addTextChangedListener(new TextWatcher() {
EditText thisTextBox = textbox;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void afterTextChanged(Editable s) {
String textValue = thisTextBox.getText().toString();
String posValues = (String)thisTextBox.getContentDescription();
String[] positions = posValues.split("_");
int responsePos = Integer.parseInt(positions[0]);
int conditionPos = Integer.parseInt(positions[1]);
responses.get(responsePos).getRequestItem().getConditions().get(conditionPos).setValue(textValue);
}
});
requestControls[i] = textbox;
}
else {
CheckBox checkbox = new CheckBox(this);
checkbox.setChecked(true);
checkbox.setEnabled(optional);
checkbox.setContentDescription(a + "_" + i);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String conditionValue = (isChecked ? "YES" : "NO");
String posValues = (String)buttonView.getContentDescription();
String[] positions = posValues.split("_");
int responsePos = Integer.parseInt(positions[0]);
int conditionPos = Integer.parseInt(positions[1]);
responses.get(responsePos).getRequestItem().getConditions().get(conditionPos).setValue(conditionValue);
}
});
requestControls[i] = checkbox;
}
TableRow row = new TableRow(this);
row.setId(i);
//row.addView(requestLabels[i]);
row.addView(label);
row.addView(requestControls[i]);
tblCondition.addView(row);
}
tblConditions[a] = tblCondition;
allResponses[a] = requestControls;
}
//ADD FIRST TABLE OF CONDITIONS TO SCROLL VIEW - OTHERS ADDED ON CHANGE EVENT
svScroll = (ScrollView)findViewById(R.id.svConditions);
svScroll.addView(tblConditions[0]);
//ACCEPT BUTTON EVENT HANDLER
Button btnAccept = (Button) findViewById(R.id.btnAccept);
btnAccept.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
publishEvent();
finish();
}
});
//CANCEL BUTTON EVENT HANDLER
Button btnCancel = (Button) findViewById(R.id.btnCancel);
btnCancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish(); //BASICALLY, IGNORE REQUEST
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_negotiation, menu);
return true;
}
/* @see android.widget.AdapterView.OnItemSelectedListener#onItemSelected(android.widget.AdapterView, android.view.View, int, long) */
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
svScroll.removeAllViews();
svScroll.addView(tblConditions[position]);
}
/* @see android.widget.AdapterView.OnItemSelectedListener#onNothingSelected(android.widget.AdapterView) */
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
private void publishEvent() {
Log.d(LOG_TAG, "publishing eventinfo");
}
}