EditRuleActivity.java :  » SMS » android-sms-batch-editor » marlon » smsbatcheditor » activity » Android Open Source

Android Open Source » SMS » android sms batch editor 
android sms batch editor » marlon » smsbatcheditor » activity » EditRuleActivity.java
package marlon.smsbatcheditor.activity;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import marlon.smsbatcheditor.Constants;
import marlon.smsbatcheditor.R;
import marlon.smsbatcheditor.db.RuleDAO;
import marlon.smsbatcheditor.model.Rule;
import marlon.smsbatcheditor.model.RuleAction;
import marlon.smsbatcheditor.model.RuleCondition;
import marlon.smsbatcheditor.view.RuleActionView;
import marlon.smsbatcheditor.view.RuleConditionView;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
 * 
 * @author marlonyao<yaolei135@gmail.com>
 */
public class EditRuleActivity extends Activity implements RuleConditionView.OnRemoveListener, RuleActionView.OnRemoveListener, OnClickListener {
  private EditText etName;
  private ViewGroup vgConditions;
  private ViewGroup vgActions;
  private Button btnSave;
  private Button btnCancel;
  
  private long ruleId = -1;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.edit_rule);
      etName = (EditText) findViewById(R.id.etName);
      vgConditions = (ViewGroup) findViewById(R.id.vgConditions);
      vgActions = (ViewGroup) findViewById(R.id.vgActions);
      
      btnSave = (Button) findViewById(R.id.btnSave);
      btnCancel = (Button) findViewById(R.id.btnCancel);
      btnSave.setOnClickListener(this);
      btnCancel.setOnClickListener(this);
      
      Intent intent = getIntent();
      if (Intent.ACTION_EDIT.equals(intent.getAction())) { // edit rule
        long ruleId = intent.getLongExtra("rule_id", -1L);
        Rule rule = new RuleDAO(this).findById(ruleId);
        if (rule != null) {
          setTitle("Edit Rule \"" + rule.getName() + "\"");
          this.ruleId = ruleId;
          
          etName.setText(rule.getName());
          for (Iterator<RuleCondition> itor = rule.getConditions(); itor.hasNext();) {
            addRuleCondition(itor.next());
          }
          for (Iterator<RuleAction> itor = rule.getActions(); itor.hasNext();) {
            addRuleAction(itor.next());
          }
        }
      }
      if (this.ruleId == -1) {    // add rule
        setTitle("Create Rule");
        addRuleCondition(null);
        addRuleAction(null);
      }
  }
  
  private RuleConditionView addRuleCondition(RuleCondition cond) {
    RuleConditionView v = new RuleConditionView(cond, this);
    v.setOnRemoveListener(this);
    vgConditions.addView(v);
    return v;
  }
  
  private RuleActionView addRuleAction(RuleAction action) {
    RuleActionView v = new RuleActionView(action, this);
    v.setOnRemoveListener(this);
    vgActions.addView(v);
    return v;
  }
  
  public int getConditionCount() {
    int count = 0;
    for (int i = 0; i < vgConditions.getChildCount(); i++) {
      View v = vgConditions.getChildAt(i);
      if (v instanceof RuleConditionView)
        count++;
    }
    return count;
  }
  
  public List<RuleConditionView> getConditionViews() {
    List<RuleConditionView> result = new ArrayList<RuleConditionView>();
    for (int i = 0; i < vgConditions.getChildCount(); i++) {
      View v = vgConditions.getChildAt(i);
      if (v instanceof RuleConditionView) {
        RuleConditionView cv = (RuleConditionView) v;
        result.add(cv);
      }
    }
    return result;
  }
  
  public int getActionCount() {
    int count = 0;
    for (int i = 0; i < vgActions.getChildCount(); i++) {
      View v = vgActions.getChildAt(i);
      if (v instanceof RuleActionView)
        count++;
    }
    return count;
  }
  
  public List<RuleActionView> getActionViews() {
    List<RuleActionView> result = new ArrayList<RuleActionView>();
    for (int i = 0; i < vgActions.getChildCount(); i++) {
      View v = vgActions.getChildAt(i);
      if (v instanceof RuleActionView)
        result.add((RuleActionView) v);
    }
    return result;
  }
  
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      super.onCreateOptionsMenu(menu);
      menu.add(0, Constants.MENU_ADD_CONDITION, Menu.NONE, "Add Condition");
      menu.add(0, Constants.MENU_ADD_ACTION, Menu.NONE, "Add Action");
      return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case Constants.MENU_ADD_CONDITION:
        addRuleCondition(null);
          return true;
        case Constants.MENU_ADD_ACTION:
        addRuleAction(null);
          return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
    
  @Override
  public void onRemove(RuleConditionView view) {
    if (getConditionCount() <= 1) {
      Toast.makeText(this, "Can not remove last condition", Toast.LENGTH_SHORT).show();
    } else {
      vgConditions.removeView(view);
    }
  }

  @Override
  public void onRemove(RuleActionView view) {
    if (getActionCount() <= 1) {
      Toast.makeText(this, "Can not remove last action", Toast.LENGTH_SHORT).show();
    } else {
      vgActions.removeView(view);
    }
  }

  @Override
  public void onClick(View v) {
    if (v == btnSave) {
      if (saveRule()) {
        setResult(RESULT_OK);
        finish();
      }
    } else if (v == btnCancel) {
      setResult(RESULT_CANCELED);
      finish();
    }
  }
  
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event)  {
      if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
      if (saveRule()) {
        setResult(RESULT_OK);
        finish();
      }
          return true;
      }
      return super.onKeyDown(keyCode, event);
  }

  private boolean saveRule() {
    if (validateRule()) {
      Rule rule = new Rule(ruleId, etName.getText().toString());
      for (RuleConditionView v : getConditionViews()) {
        rule.addCondition(v.getRuleCondition());
      }
      for (RuleActionView v : getActionViews()) {
        rule.addAction(v.getRuleAction());
      }
      new RuleDAO(this).save(rule);
      
      Toast.makeText(this, "Rule saved.", Toast.LENGTH_SHORT).show();
      return true;
    }
    return false;
  }

  
  private boolean validateRule() {
    String ruleName = etName.getText().toString();
    if (ruleName.length() == 0) {
      Toast.makeText(this, "Must specify rule name", Toast.LENGTH_SHORT).show();
      return false;
    }
    // check conditions
    for (RuleConditionView v : getConditionViews()) {
      if (v.validate() == false) {
        return false;
      }
    }
    // check actions
    for (RuleActionView v : getActionViews()) {
      if (v.validate() == false)
        return false;
    }
    return true;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.