Android Open Source - wiki-contacts-android Tags Form






From Project

Back to project page wiki-contacts-android.

License

The source code is released under:

Apache License

If you think the Android project wiki-contacts-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.kahkong.wikicontacts.form;
// w  w w.j a  va2 s  .co m
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.kahkong.wikicontacts.R;
import com.kahkong.wikicontacts.subcontroller.FlowLayout;

import android.content.Context;
import android.text.Editable;
import android.text.Html;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

/**
 * 
 * @author Poh Kah Kong
 *
 */
public class TagsForm extends LinearLayout {
  private Context context;  
  private List<String> tags = new ArrayList<String>();
  
  private FlowLayout tagsFL;
  
  public TagsForm(Context context, AttributeSet attrs) {
    super(context, attrs);
    if (isInEditMode()) {
      return;
    }
    
    this.context = context;
    init();
  }

  private void init() {
    final LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.contact_edit_etbtn, null);
    addView(view);
    tagsFL = new FlowLayout(context);
    addView(tagsFL);

    final EditText tagsET = (EditText) view.findViewById(R.id.editEditTextEtbtn);
    final Button tagsBtn = (Button) view.findViewById(R.id.editButtonEtbtn);
    tagsBtn.setText("+");
    tagsBtn.setVisibility(View.INVISIBLE);
    updateTagsView();

    tagsET.addTextChangedListener(new TextWatcher() {
      @Override
      public void afterTextChanged(Editable editable) {
        String tagsETVal = editable.toString();
        boolean isAddable;
        if (tagsETVal.equals("")) {
          isAddable = false;
        } else {
          isAddable = true;
          String[] tagsTokens = tokenizeString(tagsETVal);
          for (int i = 0; i < tagsTokens.length; i++) {
            if (tags.contains(tagsTokens[i])) {
              isAddable = false;
              break;
            }
          }
        }
        if (isAddable) {
          tagsBtn.setVisibility(View.VISIBLE);
        } else {
          tagsBtn.setVisibility(View.INVISIBLE);
        }
      }

      @Override
      public void beforeTextChanged(CharSequence arg0, int arg1,
          int arg2, int arg3) {
      }

      @Override
      public void onTextChanged(CharSequence arg0, int arg1, int arg2,
          int arg3) {
      }
    });

    tagsBtn.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View view) {
        String[] tagsTokens = tokenizeString(tagsET.getText()
            .toString());
        for (int i = 0; i < tagsTokens.length; i++) {
          tags.add(tagsTokens[i]);
        }
        tagsET.setText("");
        updateTagsView();        
      }
    });  
  }
  
  private void updateTagsView() {
    tagsFL.removeAllViews();
    if (tags.isEmpty()) {
      tagsFL.setVisibility(View.GONE);
    }
    Iterator<String> iterator = tags.iterator();
    while (iterator.hasNext()) {
      final String tagsToken = iterator.next();
      final Button tagsTokenTV = new Button(context, null, android.R.attr.buttonStyleSmall);
      tagsTokenTV.setText(Html.fromHtml(tagsToken + " <sup>x</sup>"));
      tagsFL.addView(tagsTokenTV);
      tagsTokenTV.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
          tags.remove(tagsToken);
          tagsFL.removeView(tagsTokenTV);
        }
      });
    }
    tagsFL.setVisibility(View.VISIBLE);
  }
  
  public String[] getValues() {
    if (tags.isEmpty()) {
      return null;
    } else {
      return tags.toArray(new String[tags.size()]);
    }
  }
  
  public void setValues(String[] values) {
    if (values==null) {
      return;
    }
    tags.clear();
    for (int i=0; i<values.length; i++) {
      tags.add(values[i]);      
    }
    updateTagsView();
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        
    int count = getChildCount();
    for (int i = 0; i < count; i++) {
      getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
    }    
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  }

  private String[] tokenizeString(String str) {
    return str.split("\\s+");
  }
}




Java Source Code List

com.kahkong.wikicontacts.callback.OnChangeListener.java
com.kahkong.wikicontacts.callback.OnClickListener.java
com.kahkong.wikicontacts.callback.OnCompleteListener.java
com.kahkong.wikicontacts.callback.OnEventListener.java
com.kahkong.wikicontacts.callback.OnTimeOutListener.java
com.kahkong.wikicontacts.callback.Validator.java
com.kahkong.wikicontacts.controller.AddEditContactActivity.java
com.kahkong.wikicontacts.controller.CallDetectService.java
com.kahkong.wikicontacts.controller.EditContactActivity.java
com.kahkong.wikicontacts.controller.SearchActivity.java
com.kahkong.wikicontacts.controller.TestActivity.java
com.kahkong.wikicontacts.controller.UpdateEditContactActivity.java
com.kahkong.wikicontacts.form.EditTextForm.java
com.kahkong.wikicontacts.form.ImageUploadForm.java
com.kahkong.wikicontacts.form.MultiEditTextForm.java
com.kahkong.wikicontacts.form.OptionsForm.java
com.kahkong.wikicontacts.form.RadioGroupForm.java
com.kahkong.wikicontacts.form.SpinnerForm.java
com.kahkong.wikicontacts.form.TagsForm.java
com.kahkong.wikicontacts.link.EmailLink.java
com.kahkong.wikicontacts.link.Link.java
com.kahkong.wikicontacts.link.NumberLink.java
com.kahkong.wikicontacts.link.TagLink.java
com.kahkong.wikicontacts.link.UrlLink.java
com.kahkong.wikicontacts.modal.ContactAndImage.java
com.kahkong.wikicontacts.modal.Contact.java
com.kahkong.wikicontacts.modal.CountryCode.java
com.kahkong.wikicontacts.modal.CountryCodesWithSelect.java
com.kahkong.wikicontacts.service.ContactServiceImpl.java
com.kahkong.wikicontacts.service.ContactService.java
com.kahkong.wikicontacts.service.CountryCodeServiceImpl.java
com.kahkong.wikicontacts.service.CountryCodeService.java
com.kahkong.wikicontacts.service.ImageServiceImpl.java
com.kahkong.wikicontacts.service.ImageService.java
com.kahkong.wikicontacts.service.IntentServiceImpl.java
com.kahkong.wikicontacts.service.IntentService.java
com.kahkong.wikicontacts.service.NotificationServiceImpl.java
com.kahkong.wikicontacts.service.NotificationService.java
com.kahkong.wikicontacts.service.PhoneBookServiceImpl.java
com.kahkong.wikicontacts.service.PhoneBookService.java
com.kahkong.wikicontacts.service.PreferencesServiceImpl.java
com.kahkong.wikicontacts.service.PreferencesService.java
com.kahkong.wikicontacts.service.ResourceServiceImpl.java
com.kahkong.wikicontacts.service.ResourceService.java
com.kahkong.wikicontacts.service.ValidationServiceImpl.java
com.kahkong.wikicontacts.service.ValidationService.java
com.kahkong.wikicontacts.service.WebServiceImpl.java
com.kahkong.wikicontacts.service.WebService.java
com.kahkong.wikicontacts.subcontroller.CallStateListener.java
com.kahkong.wikicontacts.subcontroller.FlowLayout.java
com.kahkong.wikicontacts.subcontroller.IncomingContactLayout.java
com.kahkong.wikicontacts.subcontroller.InfoDialog.java
com.kahkong.wikicontacts.subcontroller.LoadingDialog.java
com.kahkong.wikicontacts.subcontroller.ResultAdaptor.java
com.kahkong.wikicontacts.subcontroller.ViewContactDialog.java
com.kahkong.wikicontacts.subcontroller.ViewFormatter.java