Android Open Source - android-chess importactivity






From Project

Back to project page android-chess.

License

The source code is released under:

MIT License

If you think the Android project android-chess 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 jwtc.android.chess.tools;
/*from  ww w.j a va 2 s  .c o m*/
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.TreeSet;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import jwtc.android.chess.R;
import jwtc.android.chess.puzzle.MyPuzzleProvider;
import jwtc.android.chess.puzzle.practice;
import jwtc.chess.GameControl;
import jwtc.chess.JNI;
import jwtc.chess.PGNColumns;
import jwtc.chess.PGNEntry;
import jwtc.chess.algorithm.UCIWrapper;
import jwtc.chess.board.ChessBoard;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.ClipboardManager;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class importactivity extends Activity {
  
  private int _cnt, _untilPly, _cntFail;
  private GameControl _gameControl;
  private JNI _jni;
  private TextView _tvWork, _tvWorkCnt, _tvWorkCntFail;
  private ProgressBar _progress;
  private PGNProcessor _processor;
  private String _mode = null;
  
  protected TreeSet<Long> _arrKeys;
  protected String _outFile;
  protected boolean _processing;
  
  private final String TAG = "importactivity";
  
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.doimport);
        
        _processing = false;
        _gameControl = new GameControl();
        
        _jni = _gameControl.getJNI();
    _untilPly = 17;
    
    _arrKeys = new TreeSet<Long>();
    
        _tvWork = (TextView)findViewById(R.id.TextViewDoImport);
        _tvWorkCnt = (TextView)findViewById(R.id.TextViewDoImportCnt);
        _tvWorkCntFail = (TextView)findViewById(R.id.TextViewDoImportCntFail);
        _progress = (ProgressBar)findViewById(R.id.ProgressDoImport);
        
        _progress.setVisibility(View.INVISIBLE);
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        
        if(_processing == false){
          final Intent intent = getIntent();
          final Uri uri = intent.getData();
          
          Bundle extras =intent.getExtras(); 
          if(extras != null){
            String type = extras.getString(pgntool.EXTRA_MODE); 
            if(type != null){
              _mode = type;
            }
          }
          if(_mode == null)
          {
            if(uri == null){
              finish();
              return;
            }
            _mode = pgntool.MODE_IMPORT; // by default
          }
          _cnt = 0;
          _cntFail = 0;
          
          
          if(_mode.equals(pgntool.MODE_IMPORT)){
            _processor = new PGNImportProcessor();
              _processor.m_threadUpdateHandler = new Handler(){
                  /** Gets called on every message that is received */
                  // @Override
                  public void handleMessage(Message msg) {
                    
                    if(msg.what == PGNProcessor.MSG_PROCESSED_PGN){
                      _cnt++;
                      _tvWorkCnt.setText("Processed " + _cnt);
                    } else if(msg.what == PGNProcessor.MSG_FAILED_PGN){
                      _cntFail++;
                      _tvWorkCntFail.setText("Failed " + _cntFail);
                    } else if(msg.what == PGNProcessor.MSG_FINISHED){
                      _progress.setVisibility(View.INVISIBLE);
                      _tvWorkCnt.setText("Imported " + _cnt + " games");
                    } else if(msg.what == PGNProcessor.MSG_FATAL_ERROR){
                      _progress.setVisibility(View.INVISIBLE);
                      _tvWorkCnt.setText("An error occured, import failed");
                    }
                  }
             }; 
          } else if(_mode.equals(pgntool.MODE_DB_IMPORT)){
            
            _arrKeys.clear();
            
            _processor = new PGNDbProcessor();
              _processor.m_threadUpdateHandler = new Handler(){
                  /** Gets called on every message that is received */
                  // @Override
                  public void handleMessage(Message msg) {
                    
                    if(msg.what == PGNProcessor.MSG_PROCESSED_PGN){
                      _cnt++;
                      _tvWorkCnt.setText("Processed " + _cnt);
                    } else if(msg.what == PGNProcessor.MSG_FAILED_PGN){
                      _cntFail++;
                      _tvWorkCntFail.setText("Failed " + _cntFail);
                    } else if(msg.what == PGNProcessor.MSG_FINISHED){
                      writeHashKeysToFile();
                      _progress.setVisibility(View.INVISIBLE);
                      _tvWorkCnt.setText("Imported " + _cnt + " games; " + _arrKeys.size() + " positions.");
                      _processing = false;
                    } else if(msg.what == PGNProcessor.MSG_FATAL_ERROR){
                      _progress.setVisibility(View.INVISIBLE);
                      _tvWorkCnt.setText("An error occured, import failed");
                      _processing = false;
                    }
                  }
             }; 
            
          } else if(_mode.equals(pgntool.MODE_CREATE_PRACTICE)){ 
            _arrKeys.clear();
            
            Log.i(TAG, "Create practice set");
            
            getContentResolver().delete(MyPuzzleProvider.CONTENT_URI_PRACTICES, "1=1", null);
            Log.i(TAG, "Deleted practices");
            
            _processor = new PracticeImportProcessor();
            _processor.m_threadUpdateHandler = new Handler(){
                  /** Gets called on every message that is received */
                  // @Override
                  public void handleMessage(Message msg) {
                    
                    if(msg.what == PGNProcessor.MSG_PROCESSED_PGN){
                      _cnt++;
                      _tvWorkCnt.setText("Processed " + _cnt);
                    } else if(msg.what == PGNProcessor.MSG_FAILED_PGN){
                      _cntFail++;
                      _tvWorkCntFail.setText("Failed " + _cntFail);
                    } else if(msg.what == PGNProcessor.MSG_FINISHED){
                      
                      _progress.setVisibility(View.INVISIBLE);
                      _tvWorkCnt.setText("Imported " + _cnt + " practice positions");
                      _processing = false;
                    } else if(msg.what == PGNProcessor.MSG_FATAL_ERROR){
                      _progress.setVisibility(View.INVISIBLE);
                      _tvWorkCnt.setText("An error occured, import failed");
                      _processing = false;
                    }
                  }
             }; 
          
          } else if(_mode.equals(pgntool.MODE_DB_POINT)){
            
            
              try {
                
                if(uri != null){
                
                  SharedPreferences.Editor editor = getSharedPreferences("ChessPlayer", MODE_PRIVATE).edit();
                  
                  editor.putString("OpeningDb", uri.toString());
                  
                  editor.commit();
                  
                  
                  doToast("Openingdatabase: " + uri.toString());
                //String outFilename = "/data/data/" + getPackageName() + "/db.bin";
                //_gameControl.loadDB(getAssets().open("db.bin"), outFilename, 17);
                
                }
          } catch (Exception e) {
            
          }
              
            finish();
            return;
          }
          else if(_mode.equals(pgntool.MODE_UCI_INSTALL)){
            
            String sPath = uri.getPath();
        String sEngine = uri.getLastPathSegment(); //"robbolito-android"; //bikjump2.1    stockfish2.0
        
        Log.i(TAG, "Install UCI " + sPath + " as " + sEngine);
        
        try {
          FileInputStream fis = new FileInputStream(sPath);
          UCIWrapper.install(fis, sEngine);
          
          doToast("UCI " + sEngine + " installed");
          SharedPreferences.Editor editor = getSharedPreferences("ChessPlayer", MODE_PRIVATE).edit();
          editor.putString("UCIEngine", sEngine);
          editor.commit();
          
        } catch (IOException e) {
          
          doToast("An error occured, could not install UCI engine");
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
            
            
            finish();
            return;
          }
          else if(_mode.equals(pgntool.MODE_IMPORT_PRACTICE)){
            
            String sPath = uri.getPath();
            Log.i(TAG, "Import practice " + sPath);
        
        try {
          SharedPreferences prefs = getSharedPreferences("ChessPlayer", MODE_PRIVATE);
          SharedPreferences.Editor editor = prefs.edit();
          editor.putInt("practicePos", 0);
          editor.putInt("practiceTicks", 0);
          editor.commit();
          
          getContentResolver().delete(MyPuzzleProvider.CONTENT_URI_PRACTICES, "1=1", null);
          
          Log.i(TAG, "Deleted practices");
          
          Intent practiceIntent = new Intent();
          practiceIntent.setClass(this, practice.class);
          practiceIntent.setData(uri);
          
          doToast("Practice set was copied");
          
          startActivity(practiceIntent);
          
        } catch (Exception e) {
          
          doToast("An error occured, could not copy practice set");
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
            
            finish();
            return;
          }
          else if(_mode.equals(pgntool.MODE_IMPORT_PUZZLE)){
            
            SharedPreferences prefs = getSharedPreferences("ChessPlayer", MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putInt("puzzlePos", 0);
        editor.commit();
            
            _processor = new PuzzleImportProcessor();
            _processor.m_threadUpdateHandler = new Handler(){
                  /** Gets called on every message that is received */
                  // @Override
                  public void handleMessage(Message msg) {
                    
                    if(msg.what == PGNProcessor.MSG_PROCESSED_PGN){
                      _cnt++;
                      _tvWorkCnt.setText("Processed " + _cnt);
                    } else if(msg.what == PGNProcessor.MSG_FAILED_PGN){
                      _cntFail++;
                      _tvWorkCntFail.setText("Failed " + _cntFail);
                    } else if(msg.what == PGNProcessor.MSG_FINISHED){
                      
                      _progress.setVisibility(View.INVISIBLE);
                      _tvWorkCnt.setText("Imported " + _cnt + " puzzle positions");
                      _processing = false;
                    } else if(msg.what == PGNProcessor.MSG_FATAL_ERROR){
                      _progress.setVisibility(View.INVISIBLE);
                      _tvWorkCnt.setText("An error occured, import failed");
                      _processing = false;
                    }
                  }
             }; 
          } else if(_mode.equals(pgntool.MODE_IMPORT_OPENINGDATABASE)){
            _processor = new OpeningImportProcessor();
            _processor.m_threadUpdateHandler = new Handler(){
                  /** Gets called on every message that is received */
                  // @Override
                  public void handleMessage(Message msg) {
                    
                    if(msg.what == PGNProcessor.MSG_PROCESSED_PGN){
                      _cnt++;
                      _tvWorkCnt.setText("Processed " + _cnt);
                    } else if(msg.what == PGNProcessor.MSG_FAILED_PGN){
                      _cntFail++;
                      _tvWorkCntFail.setText("Failed " + _cntFail);
                    } else if(msg.what == PGNProcessor.MSG_FINISHED){
                      
                      _progress.setVisibility(View.INVISIBLE);
                      _tvWorkCnt.setText("Imported " + _cnt + " openings");
                      _processing = false;
                      
                      ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
                        cm.setText(_processor.getString());
                      //Log.i("DONE_OPENING", _processor.getString());
                      
                    } else if(msg.what == PGNProcessor.MSG_FATAL_ERROR){
                      _progress.setVisibility(View.INVISIBLE);
                      _tvWorkCnt.setText("An error occured, import failed");
                      _processing = false;
                    }
                  }
             };
          }
          else  {

            finish();
            return;
          }
  
          if(uri != null){
            
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Import " + uri.getLastPathSegment() + "?");
        
        builder.setPositiveButton(getString(R.string.alert_yes), new DialogInterface.OnClickListener(){
  
          public void onClick(DialogInterface dialog, int which) {
            
            dialog.dismiss();
              
            _progress.setVisibility(View.VISIBLE);
                _tvWork.setText("Importing " + uri.toString());
                
            try {
              
              InputStream is = getContentResolver().openInputStream(uri);
              
              if(uri.getPath().lastIndexOf(".zip") > 0){
  
                _outFile = uri.getPath().replace(".zip", ".bin"); 
                _processor.processZipFile(is);
              } else {
                _outFile = uri.getPath().replace(".pgn", ".bin");
                _processor.processPGNFile(is);
              }
    
              _processing = true;
              
              
            } catch(Exception ex){
              
              Log.e("import", ex.toString());
            }
            
          }
        });
        
        builder.setNegativeButton(getString(R.string.alert_no), new DialogInterface.OnClickListener(){
          public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            finish();
          }
        });
        
        AlertDialog alert = builder.create();
        alert.show();
          }
        }
    }
    
    public void doToast(String s){
      Toast t = Toast.makeText(this, s, Toast.LENGTH_LONG);
    t.setGravity(Gravity.CENTER, 0, 0);
    t.show();
    }
   
    public void readDB(InputStream isDB){
      Log.i("import", "readDB executing");
    _arrKeys.clear();
    long l;
    int len; byte[] bytes = new byte[8];
    try {
      while((len = isDB.read(bytes, 0, bytes.length)) != -1){
        l = 0L;
        l |= (long)bytes[0] << 56;
        l |= (long)bytes[1] << 48;
        l |= (long)bytes[2] << 40;
        l |= (long)bytes[3] << 32;
        l |= (long)bytes[4] << 24;
        l |= (long)bytes[5] << 16;
        l |= (long)bytes[6] << 8;
        l |= (long)bytes[7];
        
        // assume file keys are allready unique
        
        _arrKeys.add(l);
      }
    } catch (IOException e) {
      Log.e("import", "readDB: " + e.toString());
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
  }
    public void writeHashKeysToFile(){
    FileOutputStream fos;
    try {
      fos = new FileOutputStream(_outFile);
      long l; 
      byte[] bytes = new byte[8];
      
      /*
      Collections.sort(_arrKeys,  new Comparator<Long>() {
            public int compare(Long arg0, Long arg1) {
              long x = (long) arg0;
            long y = (long) arg1;
            if(x > y) {
              return 1;
            } else if(x == y) {
              return 0;
            } else {
              return -1;
            }
              
            }
        });
      */
      
      Iterator<Long> it = _arrKeys.iterator();
      while(it.hasNext()){
        
        l = it.next();
        
        if(l == 0)
          break;
      
        bytes[0] = (byte)(l >>> 56);
        bytes[1] = (byte)(l >>> 48);
        bytes[2] = (byte)(l >>> 40);
        bytes[3] = (byte)(l >>> 32);
        bytes[4] = (byte)(l >>> 24);
        bytes[5] = (byte)(l >>> 16);
        bytes[6] = (byte)(l >>> 8);
        bytes[7] = (byte)(l);
        
        fos.write(bytes);
        
        //co.pl("" + l + "{" + bytes[0] + ", " + bytes[1] + ", " + bytes[2] + ", " + bytes[3] + ", " + bytes[4] + ", " + bytes[5] + ", " + bytes[6] + ", " + bytes[7] + "}");
        
        //Log.i("writeHashKeys", "long " + l);
        //break;
      }
      
      fos.flush();
      fos.close();
      Log.i("import", "wrote hash keys to " + _outFile);
    
    } catch (Exception e) {
      // TODO Auto-generated catch block
      Log.e("import", "writeHashkeys: " + e.toString());
      e.printStackTrace();
    }
  }
    
    
    private class PGNImportProcessor extends PGNProcessor{

      public PGNImportProcessor(){
        
      }
    @Override
    public synchronized boolean processPGN(final String sPGN) {
      
      //Log.i("processPGN", sPGN);
        if(_gameControl.loadPGN(sPGN)){
          
          ContentValues values = new ContentValues();
          values.put(PGNColumns.EVENT, _gameControl.getPGNHeadProperty("Event"));
          values.put(PGNColumns.WHITE, _gameControl.getWhite());
          values.put(PGNColumns.BLACK, _gameControl.getBlack());
          values.put(PGNColumns.PGN, _gameControl.exportFullPGN());
          values.put(PGNColumns.RATING, 2.5F);
          
          // todo date goes wrong #################################
          Date dd = _gameControl.getDate();
          if(dd == null)
            dd = Calendar.getInstance().getTime();
          
          values.put(PGNColumns.DATE, dd.getTime());
          
          Uri uri = Uri.parse("content://jwtc.android.chess.MyPGNProvider/games");
           Uri uriInsert = getContentResolver().insert(uri, values);
           return true;
        }
        return false;
    }
    @Override
    public String getString() {
      // TODO Auto-generated method stub
      return null;
    }
      
    }
    
    private class PGNDbProcessor extends PGNProcessor{

    public PGNDbProcessor(){
      
    }
    
    @Override
    public synchronized boolean processPGN(final String sPGN) {

      long lKey;
      //Log.i("import", "processPGN:" + sPGN);
      if(_gameControl.loadPGN(sPGN)){
        int ply = 0, pgnSize = _gameControl.getArrPGNSize();
        int existingCnt = 0;
        //Log.i("import", "processPGN - gameSize:" + pgnSize);
        while(ply <= pgnSize && ply <= _untilPly){
          //_jni.getNumBoard();
          _gameControl.jumptoMove(ply);
          
          lKey = _jni.getHashKey();
          
          if(false == _arrKeys.contains(lKey)){
            _arrKeys.add(lKey);
          } else {
            existingCnt++;
          }
          ply++;
        }
        //Log.i("import", "processPGN - existing keys: " + existingCnt);
        return true;
      }
      return false;
    }

    @Override
    public String getString() {
      // TODO Auto-generated method stub
      return null;
    }
    
  }
    
    private class PracticeImportProcessor extends PGNProcessor{

      public PracticeImportProcessor(){
        
      }
    @Override
    public synchronized boolean processPGN(final String sPGN) {
      
      //Log.i("processPGN", sPGN);
        if(_gameControl.loadPGN(sPGN)){
          
          if(_jni.getState() == ChessBoard.MATE){
          
            int startExport = _gameControl.getArrPGNSize();
                        
            int plies = 2, undos = 0, moves = 0;
            String s = "";
            String[] arrMoves = {
                _gameControl.exportMovesPGNFromPly(startExport),
                "", // not interested in move from opponent
                _gameControl.exportMovesPGNFromPly(startExport - 3),
            };
            
            if(startExport >= 3){ // at least 3 half moves for a 2 move mate
            
              while(plies <= 4){
                undos = 0;
                while(undos <= moves){ // undo one extra
                  //Log.i(TAG, "undo");
                  _gameControl.undo();
                  undos++;
                }
                String sFEN = _jni.toFEN();
                
                _jni.searchDepth(plies);
                
                int move = _jni.getMove();
                int value = _jni.peekSearchBestValue();
  
                //Log.i(TAG, moves + ", Move " + Move.toDbgString(move) + " val: " + value + " at plies " + plies);
                
                if(value == 100000 * (plies % 2 == 0 ? 1 : -1) && _jni.move(move) != 0)
                {
                  _gameControl.addPGNEntry(_jni.getNumBoard()-1, _jni.getMyMoveToString(), "", _jni.getMyMove(), true);
                  
                  // save when it's our move
                  if(plies % 2 == 0){
                    if(plies == 4){
                      Log.i(TAG, "YESS");
                    }
                    s = "[FEN \"" + sFEN + "\"]\n" + arrMoves[moves];
                  }
                  moves++;
                  plies++; 
                  
                } else {
                  //Log.i(TAG, "Stop at plies " + plies);
                  break;
                }
              }
              
              if(s.length() > 0){
                try{
                  
                  Cursor cursor = managedQuery(MyPuzzleProvider.CONTENT_URI_PRACTICES, MyPuzzleProvider.COLUMNS, PGNColumns.PGN + "=?", new String[]{s}, "");
                  if(cursor != null){
                    if(cursor.getCount() > 0){
                      //Log.i(TAG, "DOUBLE!");
                      return false;
                    }
                    cursor.close();
                  }
                  //Log.i(TAG, "SAVING: " + s);
                
                  ContentValues values = new ContentValues();
                  values.put(PGNColumns.PGN, s);
                
                  Uri uri = MyPuzzleProvider.CONTENT_URI_PRACTICES;
                   Uri uriInsert = getContentResolver().insert(uri, values);
                  
                  return true;
                } catch(Exception ex){
                  Log.e(TAG, ex.toString());
                  return false;
                }
              }
            }
          }
        }
        return false;
    }
    @Override
    public String getString() {
      // TODO Auto-generated method stub
      return null;
    }
      
    }
    
    private class PuzzleImportProcessor extends PGNProcessor{

      private ContentResolver _cr;
      
      public PuzzleImportProcessor(){
        _cr = importactivity.this.getContentResolver();
        _cr.delete(MyPuzzleProvider.CONTENT_URI_PUZZLES, "1=1", null);
        
        Log.i(TAG, "Created puzzle import instance, deleted puzzles");
      }
    @Override
    public synchronized boolean processPGN(final String sPGN) {
      
       ContentValues values;
       values = new ContentValues();
       values.put("PGN", sPGN);
       _cr.insert(MyPuzzleProvider.CONTENT_URI_PUZZLES, values);
      
      return true;
    }
    @Override
    public String getString() {
      // TODO Auto-generated method stub
      return null;
    }
    }
    
    private class OpeningImportProcessor extends PGNProcessor{

      public JSONArray _jArray;
      ArrayList<PGNEntry> _arrMoves;
      String _sECO     = _gameControl.getPGNHeadProperty("Event");
    String _sName     = _gameControl.getPGNHeadProperty("White");
    String _sVariation   = _gameControl.getPGNHeadProperty("Black");
      
      public OpeningImportProcessor(){
        _jArray = new JSONArray();
      }
      
    @Override
    public boolean processPGN(String sPGN) {
      if(_gameControl.loadPGN(sPGN)){
        _sECO     = _gameControl.getPGNHeadProperty("Event");
        _sName     = _gameControl.getPGNHeadProperty("White");
        _sVariation = _gameControl.getPGNHeadProperty("Black");
        if(_sVariation.equals("black ?")){
          _sVariation = "";
        }
        _arrMoves   = _gameControl.getPGNEntries();
        
        findOrInsertEntry(_jArray, _arrMoves.remove(0));
        
        return true;
      }
      return false;
    }
      
    
    // m = move
    // a = array
    // e = ECO
    // v = variation
    protected void findOrInsertEntry(JSONArray curArray, PGNEntry entry){
      boolean bFound = false;
      for(int i = 0; i < curArray.length(); i++){
        try {
          JSONObject jObj = (JSONObject)curArray.get(i);
          
          if(jObj.getString("m").equals(entry._sMove)){
            
            bFound = true;
            JSONArray newArray;
            if(jObj.has("a")){
              newArray = (JSONArray)jObj.get("a");
            } else {
              newArray = new JSONArray();
              jObj.put("a", newArray);
            }
            
            if(_arrMoves.size() == 0){
              jObj.put("e", _sECO);
              jObj.put("n", _sName);
              jObj.put("v", _sVariation);
            } else {
              findOrInsertEntry(newArray, _arrMoves.remove(0));
            }
            
          } 
          
        } catch (JSONException e) {
          
        }
      
      }
      if(false == bFound){
        JSONObject newObject = new JSONObject();
        try {
          JSONArray newArray = new JSONArray();
          
          newObject.put("m", entry._sMove);
          newObject.put("a", newArray);
          
          if(_arrMoves.size() == 0){
            newObject.put("e", _sECO);
            newObject.put("n", _sName);
            newObject.put("v", _sVariation);
          }
          
          curArray.put(newObject);
          
          if(_arrMoves.size() > 0){
            findOrInsertEntry(newArray, _arrMoves.remove(0));
          }
          
        } catch (JSONException e) {
        }
      }
    }

    @Override
    public String getString() {
      return _jArray.toString();
    }
    }
   
}




Java Source Code List

jwtc.android.chess.ChessFieldView.java
jwtc.android.chess.ChessImageView.java
jwtc.android.chess.ChessPreferences.java
jwtc.android.chess.ChessViewBase.java
jwtc.android.chess.ChessView.java
jwtc.android.chess.GamesListView.java
jwtc.android.chess.HtmlActivity.java
jwtc.android.chess.ImageCacheObject.java
jwtc.android.chess.MyBaseActivity.java
jwtc.android.chess.MyPGNProvider.java
jwtc.android.chess.PGNView.java
jwtc.android.chess.SaveGameDlg.java
jwtc.android.chess.UI.java
jwtc.android.chess.convergence.Connection.java
jwtc.android.chess.convergence.ConvergenceActivity.java
jwtc.android.chess.convergence.RestServer.java
jwtc.android.chess.iconifiedlist.IconifiedTextListAdapter.java
jwtc.android.chess.iconifiedlist.IconifiedTextView.java
jwtc.android.chess.iconifiedlist.IconifiedText.java
jwtc.android.chess.ics.CustomCommands.java
jwtc.android.chess.ics.ICSChatDlg.java
jwtc.android.chess.ics.ICSChessView.java
jwtc.android.chess.ics.ICSClient.java
jwtc.android.chess.ics.ICSConfirmDlg.java
jwtc.android.chess.ics.ICSMatchDlg.java
jwtc.android.chess.ics.TelnetSocket.java
jwtc.android.chess.ics.TimesealInputStream.java
jwtc.android.chess.ics.TimesealOutputStream.java
jwtc.android.chess.ics.TimesealPipe.java
jwtc.android.chess.ics.TimesealingSocket.java
jwtc.android.chess.puzzle.ChessViewPractice.java
jwtc.android.chess.puzzle.ChessViewPuzzle.java
jwtc.android.chess.puzzle.MyPuzzleProvider.java
jwtc.android.chess.puzzle.practice.java
jwtc.android.chess.puzzle.puzzle.java
jwtc.android.chess.tools.FileListView.java
jwtc.android.chess.tools.PGNProcessor.java
jwtc.android.chess.tools.importactivity.java
jwtc.android.chess.tools.pgntool.java
jwtc.android.chess.main.java
jwtc.android.chess.options.java
jwtc.android.chess.setup.java
jwtc.android.chess.start.java
jwtc.android.timeseal.TimesealingSocket.java
jwtc.android.timeseal.streams.a.java
jwtc.android.timeseal.streams.b.java
jwtc.android.timeseal.streams.c.java
jwtc.chess.ChessPuzzleProvider.java
jwtc.chess.GameControl.java
jwtc.chess.JNI.java
jwtc.chess.Move.java
jwtc.chess.PGNColumns.java
jwtc.chess.PGNEntry.java
jwtc.chess.PGNProvider.java
jwtc.chess.Pos.java
jwtc.chess.Valuation.java
jwtc.chess.algorithm.SearchAlgorithmRunner.java
jwtc.chess.algorithm.UCIWrapper.java
jwtc.chess.board.BoardConstants.java
jwtc.chess.board.BoardHashKeys.java
jwtc.chess.board.BoardMembers.java
jwtc.chess.board.BoardStatics.java
jwtc.chess.board.ChessBoard.java