Android Open Source - opensudoku I M Popup Dialog






From Project

Back to project page opensudoku.

License

The source code is released under:

GNU General Public License

If you think the Android project opensudoku 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

/* 
 * Copyright (C) 2009 Roman Masek//from   www  .  j ava 2  s.  c  om
 * 
 * This file is part of OpenSudoku.
 * 
 * OpenSudoku is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * OpenSudoku is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with OpenSudoku.  If not, see <http://www.gnu.org/licenses/>.
 * 
 */

package org.moire.opensudoku.gui.inputmethod;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.LightingColorFilter;
import android.graphics.PorterDuff;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TabWidget;
import android.widget.TextView;
import android.widget.ToggleButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.LinearLayout.LayoutParams;
import org.moire.opensudoku.R;

public class IMPopupDialog extends Dialog {

  private Context mContext;
  private LayoutInflater mInflater;
  private TabHost mTabHost;

  // buttons from "Select number" tab
  private Map<Integer, Button> mNumberButtons = new HashMap<Integer, Button>();
  // buttons from "Edit note" tab
  private Map<Integer, ToggleButton> mNoteNumberButtons = new HashMap<Integer, ToggleButton>();

  // selected number on "Select number" tab (0 if nothing is selected).
  private int mSelectedNumber;
  // selected numbers on "Edit note" tab
  private Set<Integer> mNoteSelectedNumbers = new HashSet<Integer>();

  private OnNumberEditListener mOnNumberEditListener;
  private OnNoteEditListener mOnNoteEditListener;

  public IMPopupDialog(Context context) {
    super(context);
    mContext = context;
    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    mTabHost = createTabView();

    // hide dialog's title
    TextView title = (TextView) findViewById(android.R.id.title);
    title.setVisibility(View.GONE);

    setContentView(mTabHost);
  }

  /**
   * LightingColorFilter bkgColorFilter = new LightingColorFilter(
   * mContext.getResources().getColor(R.color.im_number_button_completed_background), 0);
   * <p/>
   * Registers a callback to be invoked when number is selected.
   *
   * @param l
   */
  public void setOnNumberEditListener(OnNumberEditListener l) {
    mOnNumberEditListener = l;
  }

  /**
   * Register a callback to be invoked when note is edited.
   *
   * @param l
   */
  public void setOnNoteEditListener(OnNoteEditListener l) {
    mOnNoteEditListener = l;
  }

  public void resetButtons() {
    /*for (Button b : mNumberButtons.values()) {
      b.setBackgroundResource(R.drawable.btn_default_bg);
    }

    for (Button b : mNoteNumberButtons.values()) {
      b.setBackgroundResource(R.drawable.btn_toggle_bg);
    }*/

    for (Map.Entry<Integer, ToggleButton> entry : mNoteNumberButtons.entrySet()) {
      entry.getValue().setText("" + entry.getKey());
    }
  }

  // TODO: vsude jinde pouzivam misto number value
  public void updateNumber(Integer number) {
    mSelectedNumber = number;

    //LightingColorFilter selBkgColorFilter = new LightingColorFilter(
    //    mContext.getResources().getColor(R.color.im_number_button_selected_background), 0);

    for (Map.Entry<Integer, Button> entry : mNumberButtons.entrySet()) {
      Button b = entry.getValue();
      if (entry.getKey().equals(mSelectedNumber)) {
                b.setTextColor(Color.WHITE);
        //b.setTextAppearance(mContext, android.R.style.TextAppearance_Inverse);
        //b.getBackground().setColorFilter(selBkgColorFilter);
                b.getBackground().setColorFilter(new LightingColorFilter(Color.CYAN, 0));
      } else {
        //b.setTextAppearance(mContext, android.R.style.TextAppearance_Widget_Button);
                b.setTextColor(Color.BLACK);
        b.getBackground().setColorFilter(null);
      }
    }
  }

  /**
   * Updates selected numbers in note.
   *
   * @param numbers
   */
  public void updateNote(Collection<Integer> numbers) {
    mNoteSelectedNumbers = new HashSet<Integer>();

    if (numbers != null) {
      for (int number : numbers) {
        mNoteSelectedNumbers.add(number);
      }
    }

    for (Integer number : mNoteNumberButtons.keySet()) {
      mNoteNumberButtons.get(number).setChecked(mNoteSelectedNumbers.contains(number));
    }
  }

//  public void enableAllNumbers() {
//    for (Button b : mNumberButtons.values()) {
//      b.setEnabled(true);
//    }
//    for (Button b : mNoteNumberButtons.values()) {
//      b.setEnabled(true);
//    }
//  }

//  public void setNumberEnabled(int number, boolean enabled) {
//    mNumberButtons.get(number).setEnabled(enabled);
//    mNoteNumberButtons.get(number).setEnabled(enabled);
//  }

  public void highlightNumber(int number) {
    //int completedTextColor = mContext.getResources().getColor(R.color.im_number_button_completed_text);

    if (number == mSelectedNumber) {
      mNumberButtons.get(number).setTextColor(Color.argb(255,0,180,0));
    } else {
      //mNumberButtons.get(number).setBackgroundResource(R.drawable.btn_completed_bg);
            mNumberButtons.get(number).getBackground().setColorFilter(0xFF008800, PorterDuff.Mode.MULTIPLY);
    }

        mNoteNumberButtons.get(number).getBackground().setColorFilter(0xFF008800, PorterDuff.Mode.MULTIPLY);
    //mNoteNumberButtons.get(number).setBackgroundResource(R.drawable.btn_toggle_completed_bg);
  }

  public void setValueCount(int number, int count) {
    mNumberButtons.get(number).setText(number + " (" + count + ")");
  }

  /**
   * Creates view with two tabs, first for number in cell selection, second for
   * note editing.
   *
   * @return
   */
  private TabHost createTabView() {
    TabHost tabHost = new TabHost(mContext, null);
    tabHost.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    //tabHost.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    LinearLayout linearLayout = new LinearLayout(mContext);
    linearLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    //linearLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    linearLayout.setOrientation(LinearLayout.VERTICAL);

    TabWidget tabWidget = new TabWidget(mContext);
        tabWidget.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    tabWidget.setId(android.R.id.tabs);

    FrameLayout frameLayout = new FrameLayout(mContext);
    frameLayout.setId(android.R.id.tabcontent);

    linearLayout.addView(tabWidget);
    linearLayout.addView(frameLayout);
    tabHost.addView(linearLayout);

    tabHost.setup();

    final View editNumberView = createEditNumberView();
    final View editNoteView = createEditNoteView();

    tabHost.addTab(tabHost.newTabSpec("number")
        .setIndicator(mContext.getString(R.string.select_number))
        .setContent(new TabHost.TabContentFactory() {

          @Override
          public View createTabContent(String tag) {
            return editNumberView;
          }

        }));
    tabHost.addTab(tabHost.newTabSpec("note")
        .setIndicator(mContext.getString(R.string.edit_note))
        .setContent(new TabHost.TabContentFactory() {

          @Override
          public View createTabContent(String tag) {
            return editNoteView;
          }

        }));

    return tabHost;
  }

  /**
   * Creates view for number in cell editing.
   *
   * @return
   */
  private View createEditNumberView() {
    View v = mInflater.inflate(R.layout.im_popup_edit_value, null);

    mNumberButtons.put(1, (Button) v.findViewById(R.id.button_1));
    mNumberButtons.put(2, (Button) v.findViewById(R.id.button_2));
    mNumberButtons.put(3, (Button) v.findViewById(R.id.button_3));
    mNumberButtons.put(4, (Button) v.findViewById(R.id.button_4));
    mNumberButtons.put(5, (Button) v.findViewById(R.id.button_5));
    mNumberButtons.put(6, (Button) v.findViewById(R.id.button_6));
    mNumberButtons.put(7, (Button) v.findViewById(R.id.button_7));
    mNumberButtons.put(8, (Button) v.findViewById(R.id.button_8));
    mNumberButtons.put(9, (Button) v.findViewById(R.id.button_9));

    for (Integer num : mNumberButtons.keySet()) {
      Button b = mNumberButtons.get(num);
      b.setTag(num);
      b.setOnClickListener(editNumberButtonClickListener);
    }

    Button closeButton = (Button) v.findViewById(R.id.button_close);
    closeButton.setOnClickListener(closeButtonListener);
    Button clearButton = (Button) v.findViewById(R.id.button_clear);
    clearButton.setOnClickListener(clearButtonListener);

    return v;
  }


  /**
   * Creates view for note editing.
   *
   * @return
   */
  private View createEditNoteView() {
    View v = mInflater.inflate(R.layout.im_popup_edit_note, null);

    mNoteNumberButtons.put(1, (ToggleButton) v.findViewById(R.id.button_1));
    mNoteNumberButtons.put(2, (ToggleButton) v.findViewById(R.id.button_2));
    mNoteNumberButtons.put(3, (ToggleButton) v.findViewById(R.id.button_3));
    mNoteNumberButtons.put(4, (ToggleButton) v.findViewById(R.id.button_4));
    mNoteNumberButtons.put(5, (ToggleButton) v.findViewById(R.id.button_5));
    mNoteNumberButtons.put(6, (ToggleButton) v.findViewById(R.id.button_6));
    mNoteNumberButtons.put(7, (ToggleButton) v.findViewById(R.id.button_7));
    mNoteNumberButtons.put(8, (ToggleButton) v.findViewById(R.id.button_8));
    mNoteNumberButtons.put(9, (ToggleButton) v.findViewById(R.id.button_9));

    for (Integer num : mNoteNumberButtons.keySet()) {
      ToggleButton b = mNoteNumberButtons.get(num);
      b.setTag(num);
      b.setOnCheckedChangeListener(editNoteCheckedChangeListener);
    }

    Button closeButton = (Button) v.findViewById(R.id.button_close);
    closeButton.setOnClickListener(closeButtonListener);
    Button clearButton = (Button) v.findViewById(R.id.button_clear);
    clearButton.setOnClickListener(clearButtonListener);

    return v;
  }

  /**
   * Occurs when user selects number in "Select number" tab.
   */
  private View.OnClickListener editNumberButtonClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      Integer number = (Integer) v.getTag();

      if (mOnNumberEditListener != null) {
        mOnNumberEditListener.onNumberEdit(number);
      }

      dismiss();
    }
  };

  /**
   * Occurs when user checks or unchecks number in "Edit note" tab.
   */
  private OnCheckedChangeListener editNoteCheckedChangeListener = new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView,
                   boolean isChecked) {
      Integer number = (Integer) buttonView.getTag();
      if (isChecked) {
        mNoteSelectedNumbers.add(number);
      } else {
        mNoteSelectedNumbers.remove(number);
      }
    }

  };

  /**
   * Occurs when user presses "Clear" button.
   */
  private View.OnClickListener clearButtonListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      String currentTab = mTabHost.getCurrentTabTag();

      if (currentTab.equals("number")) {
        if (mOnNumberEditListener != null) {
          mOnNumberEditListener.onNumberEdit(0); // 0 as clear
        }
        dismiss();
      } else {
        for (ToggleButton b : mNoteNumberButtons.values()) {
          b.setChecked(false);
          mNoteSelectedNumbers.remove(b.getTag());
        }
      }
    }
  };

  /**
   * Occurs when user presses "Close" button.
   */
  private View.OnClickListener closeButtonListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
      if (mOnNoteEditListener != null) {
        Integer[] numbers = new Integer[mNoteSelectedNumbers.size()];
        mOnNoteEditListener.onNoteEdit(mNoteSelectedNumbers.toArray(numbers));
      }
      dismiss();
    }
  };

  /**
   * Interface definition for a callback to be invoked, when user selects number, which
   * should be entered in the sudoku cell.
   *
   * @author romario
   */
  public interface OnNumberEditListener {
    boolean onNumberEdit(int number);
  }

  /**
   * Interface definition for a callback to be invoked, when user selects new note
   * content.
   *
   * @author romario
   */
  public interface OnNoteEditListener {
    boolean onNoteEdit(Integer[] number);
  }

}




Java Source Code List

org.moire.opensudoku.db.DatabaseHelper.java
org.moire.opensudoku.db.FolderColumns.java
org.moire.opensudoku.db.SudokuColumns.java
org.moire.opensudoku.db.SudokuDatabase.java
org.moire.opensudoku.db.SudokuImportParams.java
org.moire.opensudoku.db.SudokuInvalidFormatException.java
org.moire.opensudoku.game.CellCollection.java
org.moire.opensudoku.game.CellGroup.java
org.moire.opensudoku.game.CellNote.java
org.moire.opensudoku.game.Cell.java
org.moire.opensudoku.game.FolderInfo.java
org.moire.opensudoku.game.SudokuGame.java
org.moire.opensudoku.game.command.AbstractCellCommand.java
org.moire.opensudoku.game.command.AbstractCommand.java
org.moire.opensudoku.game.command.ClearAllNotesCommand.java
org.moire.opensudoku.game.command.CommandStack.java
org.moire.opensudoku.game.command.EditCellNoteCommand.java
org.moire.opensudoku.game.command.FillInNotesCommand.java
org.moire.opensudoku.game.command.SetCellValueCommand.java
org.moire.opensudoku.gui.Changelog.java
org.moire.opensudoku.gui.FileImportActivity.java
org.moire.opensudoku.gui.FileListActivity.java
org.moire.opensudoku.gui.FolderDetailLoader.java
org.moire.opensudoku.gui.FolderListActivity.java
org.moire.opensudoku.gui.GameSettingsActivity.java
org.moire.opensudoku.gui.GameTimeFormat.java
org.moire.opensudoku.gui.HintsQueue.java
org.moire.opensudoku.gui.ImportSudokuActivity.java
org.moire.opensudoku.gui.SeekBarPreference.java
org.moire.opensudoku.gui.SudokuBoardView.java
org.moire.opensudoku.gui.SudokuEditActivity.java
org.moire.opensudoku.gui.SudokuExportActivity.java
org.moire.opensudoku.gui.SudokuImportActivity.java
org.moire.opensudoku.gui.SudokuListActivity.java
org.moire.opensudoku.gui.SudokuListFilter.java
org.moire.opensudoku.gui.SudokuPlayActivity.java
org.moire.opensudoku.gui.Timer.java
org.moire.opensudoku.gui.exporting.FileExportTaskParams.java
org.moire.opensudoku.gui.exporting.FileExportTaskResult.java
org.moire.opensudoku.gui.exporting.FileExportTask.java
org.moire.opensudoku.gui.importing.AbstractImportTask.java
org.moire.opensudoku.gui.importing.ExtrasImportTask.java
org.moire.opensudoku.gui.importing.OpenSudokuImportTask.java
org.moire.opensudoku.gui.importing.SdmImportTask.java
org.moire.opensudoku.gui.inputmethod.IMControlPanelStatePersister.java
org.moire.opensudoku.gui.inputmethod.IMControlPanel.java
org.moire.opensudoku.gui.inputmethod.IMNumpad.java
org.moire.opensudoku.gui.inputmethod.IMPopupDialog.java
org.moire.opensudoku.gui.inputmethod.IMPopup.java
org.moire.opensudoku.gui.inputmethod.IMSingleNumber.java
org.moire.opensudoku.gui.inputmethod.InputMethod.java
org.moire.opensudoku.utils.AndroidUtils.java
org.moire.opensudoku.utils.Const.java
org.moire.opensudoku.utils.StringUtils.java