import com.android.apps.tag.record.ImageRecord;
import com.android.apps.tag.record.ParsedNdefRecord;
import com.android.apps.tag.record.RecordEditInfo;
+import com.android.apps.tag.record.RecordEditInfo.EditCallbacks;
import com.android.apps.tag.record.UriRecord;
import com.android.apps.tag.record.VCardRecord;
import com.google.common.base.Preconditions;
* {@link ParsedNdefRecord} types. Each type of {@link ParsedNdefRecord} can build views to
* pick/select a new piece of content, or edit an existing content for the {@link NdefMessage}.
*/
-public abstract class EditTagActivity extends Activity implements OnClickListener {
+public abstract class EditTagActivity extends Activity implements OnClickListener, EditCallbacks {
private static final String BUNDLE_KEY_OUTSTANDING_PICK = "outstanding-pick";
protected static final int DIALOG_ID_ADD_CONTENT = 0;
*/
public void addViewForRecord(RecordEditInfo editInfo) {
ViewGroup root = getContentRoot();
- View editView = editInfo.getEditView(this, mInflater, root);
+ View editView = editInfo.getEditView(this, mInflater, root, this);
root.addView(mInflater.inflate(R.layout.tag_divider, root, false));
root.addView(editView);
-
- if (editInfo.getPickIntent() != null) {
- editView.setOnClickListener(this);
- }
}
private void rebuildChildViews() {
showDialog(DIALOG_ID_ADD_CONTENT);
}
- /**
- * Fires an {@link Intent} to pick content for a record.
- */
+ @Override
public void startPickForRecord(RecordEditInfo editInfo, Intent intent) {
mRecordWithOutstandingPick = editInfo;
startActivityForResult(intent, 0);
}
@Override
- public void onClick(View target) {
- Object tag = target.getTag();
- if ((tag != null) && (tag instanceof RecordEditInfo)) {
- RecordEditInfo editInfo = (RecordEditInfo) tag;
- startPickForRecord(editInfo, Preconditions.checkNotNull(editInfo.getPickIntent()));
- }
+ public void deleteRecord(RecordEditInfo editInfo) {
+ mRecords.remove(editInfo);
+ ViewGroup root = getContentRoot();
+ root.removeAllViews();
+ rebuildChildViews();
}
@Override
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.EditText;
-import android.widget.Toast;
-
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
case R.id.add_content_target:
showAddContentDialog();
break;
-
- default:
- super.onClick(target);
}
}
}
@Override
- public View getEditView(Activity activity, LayoutInflater inflater, ViewGroup parent) {
- View result = inflater.inflate(R.layout.tag_edit_image, parent, false);
+ public View getEditView(
+ Activity activity, LayoutInflater inflater,
+ ViewGroup parent, EditCallbacks callbacks) {
+ View result = buildEditView(
+ activity, inflater, R.layout.tag_edit_image, parent, callbacks);
((ImageView) result.findViewById(R.id.image)).setImageBitmap(getValueInternal());
- result.setTag(this);
+ result.setOnClickListener(this);
return result;
}
public int describeContents() {
return 0;
}
+
+ @Override
+ public void onClick(View target) {
+ if (this == target.getTag()) {
+ mCallbacks.startPickForRecord(this, mIntent);
+ } else {
+ super.onClick(target);
+ }
+ }
}
}
package com.android.apps.tag.record;
+import com.android.apps.tag.R;
+
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
/**
* A simple holder for information required for editing a {@code ParsedNdefRecord}.
*/
-public abstract class RecordEditInfo implements Parcelable {
+public abstract class RecordEditInfo implements Parcelable, View.OnClickListener {
+
+ public interface EditCallbacks {
+ void startPickForRecord(RecordEditInfo info, Intent intent);
+ void deleteRecord(RecordEditInfo info);
+ }
/**
* The record type being edited.
*/
private final String mType;
+ protected EditCallbacks mCallbacks;
+
public RecordEditInfo(String type) {
mType = type;
}
* the value of the record.
* This {@code RecordEditInfo} will be set as the {@link View}'s tag.
*/
- public abstract View getEditView(Activity activity, LayoutInflater inflater, ViewGroup parent);
+ public abstract View getEditView(
+ Activity activity, LayoutInflater inflater, ViewGroup parent, EditCallbacks callbacks);
+
+ /**
+ * Does the work of building a {@link View} and binding common controls.
+ */
+ protected View buildEditView(
+ Activity activity, LayoutInflater inflater, int resourceId,
+ ViewGroup parent, EditCallbacks callbacks) {
+ View result = inflater.inflate(resourceId, parent, false);
+ result.setTag(this);
+
+ View deleteButton = result.findViewById(R.id.delete);
+ if (deleteButton == null) {
+ throw new IllegalArgumentException("All record edit layouts must have a delete button");
+ } else {
+ deleteButton.setOnClickListener(this);
+ }
+ mCallbacks = callbacks;
+ return result;
+ }
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(mType);
}
+
+ @Override
+ public void onClick(View target) {
+ if (target.getId() == R.id.delete) {
+ mCallbacks.deleteRecord(this);
+ }
+ }
}
}
@Override
- public View getEditView(Activity activity, LayoutInflater inflater, ViewGroup parent) {
- View view = inflater.inflate(R.layout.tag_edit_url, parent, false);
+ public View getEditView(
+ Activity activity, LayoutInflater inflater,
+ ViewGroup parent, EditCallbacks callbacks) {
+ View view = buildEditView(activity, inflater, R.layout.tag_edit_url, parent, callbacks);
mEditText = (EditText) view.findViewById(R.id.value);
mEditText.setText(mCurrentValue);
mEditText.addTextChangedListener(this);
- view.setTag(this);
return view;
}
}
@Override
- public View getEditView(Activity activity, LayoutInflater inflater, ViewGroup parent) {
- View result = inflater.inflate(R.layout.tag_edit_vcard, parent, false);
+ public View getEditView(
+ Activity activity, LayoutInflater inflater,
+ ViewGroup parent, EditCallbacks callbacks) {
+ View result = buildEditView(
+ activity, inflater, R.layout.tag_edit_vcard, parent, callbacks);
+
mActiveView = new WeakReference<View>(result);
- result.setTag(this);
+ result.setOnClickListener(this);
// Show default contact photo until the data loads.
((ImageView) result.findViewById(R.id.photo)).setImageDrawable(
public int describeContents() {
return 0;
}
+
+ @Override
+ public void onClick(View target) {
+ if (this == target.getTag()) {
+ mCallbacks.startPickForRecord(this, mIntent);
+ } else {
+ super.onClick(target);
+ }
+ }
}
}