diff --git a/app/build.gradle b/app/build.gradle index 91322233..b9acbd6d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,4 @@ apply plugin: 'com.android.application' -apply plugin: 'com.google.gms.google-services' android { signingConfigs { @@ -7,12 +6,12 @@ android { storeFile file('/Users/jcarolus/Projecten/Chess/android-keystore') } } - compileSdkVersion 23 - buildToolsVersion "23.0.1" + compileSdkVersion 24 + buildToolsVersion "24.0.0" defaultConfig { applicationId "jwtc.android.chess" minSdkVersion 11 - targetSdkVersion 23 + targetSdkVersion 24 } buildTypes { release { @@ -26,10 +25,13 @@ android { } dependencies { - compile 'com.android.support:support-v4:23.3.0' - compile 'com.android.support:appcompat-v7:23.3.0' - compile 'com.android.support:mediarouter-v7:23.3.0' + compile 'com.android.support:support-v4:24.0.0' + compile 'com.android.support:appcompat-v7:24.0.0' + compile 'com.android.support:mediarouter-v7:24.0.0' compile 'com.google.android.gms:play-services-cast:8.3.0' compile 'com.google.android.gms:play-services-analytics:8.3.0' + compile 'com.larswerkman:HoloColorPicker:1.5' compile files('libs/play-hub-support.jar') } + +apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0aee4c91..aebf0fbf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + @@ -130,12 +131,14 @@ - + - + @@ -162,15 +165,7 @@ - - - - - - - + @@ -213,7 +208,4 @@ - - - \ No newline at end of file diff --git a/app/src/main/assets/about-en.html b/app/src/main/assets/about-en.html index d44f6c37..d2bbea69 100644 --- a/app/src/main/assets/about-en.html +++ b/app/src/main/assets/about-en.html @@ -19,6 +19,8 @@

About

Tim Tennyson: Several improvements.

Alessandro Dal Bello, Paolo Straffi: Italian translation.

Ildar Gubaidulin: Russian translation.

+

Marcella De Rosa: Spanish and Portuguese translations.

+

Stan Zheng: Chinese translation.

\ No newline at end of file diff --git a/app/src/main/assets/about-es.html b/app/src/main/assets/about-es.html index ed949453..a6b2d4ef 100644 --- a/app/src/main/assets/about-es.html +++ b/app/src/main/assets/about-es.html @@ -1,25 +1,26 @@ + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - - Acerca de Ajedrez - - - + + Sobre Ajedrez + + -

Sobre

+

Quiénes somos

Creado por Jeroen Carolus

-

Para el apoyo, la información acerca de las actualizaciones y la versión más reciente: por favor vaya a la página web de desarrolladores jwtc.nl.

+

Para suporte tecnico, información acerca de las actualizaciónes y la última versión: por favor visite la página web del desarrollador jwtc.nl.

-

Gracias a Peter van Grijfland por su participación, excelentes sugerencias y pruebas beta.

-

GitHub contribuciones:

-

Tim Tennyson: varias mejoras.

-

Alessandro Dal Bello, Paolo Straffi: Traducción italiano.

-

Ildar Gubaidulin: Traducción Ruso.

+

Gracias a Peter van Grijfland por su participación, excelentes sugerencias y prueba beta.

+

Contribuciónes GitHub:

+

Tim Tennyson: Varias mejoras.

+

Alessandro Dal Bello, Paolo Straffi: traducción al Italiano.

+

Ildar Gubaidulin: traducción al Ruso

+

Marcella De Rosa: traducción al Español y al Portugués

+

Stan Zheng: Traducción china.

\ No newline at end of file diff --git a/app/src/main/assets/about-it.html b/app/src/main/assets/about-it.html index c5c54e1a..6c67bffe 100644 --- a/app/src/main/assets/about-it.html +++ b/app/src/main/assets/about-it.html @@ -19,6 +19,8 @@

Informazioni

Tim Tennyson: Diversi miglioramenti.

Alessandro Dal Bello, Paolo Straffi: Traduzione italiana.

Ildar Gubaidulin: Traduzione russa.

+

Marcella De Rosa: Traduzioni spagnolo e portoghese.

+

Stan Zheng: traduzione cinese.

\ No newline at end of file diff --git a/app/src/main/assets/about-pt.html b/app/src/main/assets/about-pt.html new file mode 100644 index 00000000..6f672b4e --- /dev/null +++ b/app/src/main/assets/about-pt.html @@ -0,0 +1,26 @@ + + + + Sobre Xadrez + + + + + +

Sobre nós

+ +

Criado por Jeroen Carolus

+ +

Para apoio, informações sobre atualizações e a versão mais recente: por favor, acesse o site do desenvolvedor jwtc.nl.

+ +

Graças ao Peter van Grijfland por seu envolvimento, excelentes sugestões e testes beta.

+

Contribuções GitHub:

+

Tim Tennyson: várias melhorias

+

Alessandro Dal Bello, Paolo Straffi: traducção italiana

+

Ildar Gubaidulin: traducção russa

+

Marcella De Rosa: traducção espanhola e portuguesa

+

Stan Zheng: Tradução chinês.

+ + + \ No newline at end of file diff --git a/app/src/main/assets/about-ru.html b/app/src/main/assets/about-ru.html index 6697b3a9..6fb503aa 100644 --- a/app/src/main/assets/about-ru.html +++ b/app/src/main/assets/about-ru.html @@ -19,6 +19,8 @@

О приложении

Тим Теннисон: несколько улучшений.

Алессандро Дал Белло, Паоло Страффи: итальянский перевод.

Ильдар Губайдулин: русский перевод.

+

Марселла De Rosa: Испанские и португальские переводы.

+

Стан Zheng: Китайский перевод.

\ No newline at end of file diff --git a/app/src/main/assets/about-zh.html b/app/src/main/assets/about-zh.html new file mode 100644 index 00000000..fd84737d --- /dev/null +++ b/app/src/main/assets/about-zh.html @@ -0,0 +1,26 @@ + + + + 关于国际象棋 + + + + + +

关于

+ +

本软件开发者为Jeroen Carolus

+ +

请前往开发者网站获取最新的版本和帮助: jwtc.nl.

+ +

在此感谢 Peter van Grijfland 为本软件提供了测试和积极的优化建议.

+

Github上参与人员:

+

Tim Tennyson: 为本软件做了一些优化.

+

Alessandro Dal Bello, Paolo Straffi: 完成了意大利语翻译.

+

Ildar Gubaidulin: 俄语翻译

+

Marcella De Rosa: 葡萄牙语,西班牙语翻译.

+

Stan Zheng: 中国的翻译.

+ + + \ No newline at end of file diff --git a/app/src/main/assets/convergence-es.html b/app/src/main/assets/convergence-es.html index 6aa7f3f8..e51d2773 100644 --- a/app/src/main/assets/convergence-es.html +++ b/app/src/main/assets/convergence-es.html @@ -1,28 +1,27 @@ - + - - Acerca de Ajedrez - - - + + Sobre Ajedrez + +
-

Ajedrez Screen TV - experimental

+

Pantalla de TV ajedrez - experimental

-

Esto le da la capacidad de permitir que otro dispositivo muestra el tablero de ajedrez , cuando en la misma red de área local.

-

En la actualidad, esto es experimental y la aplicación real de Smart-TV que puede conectarse a su dispositivo Android todavía no está disponible.

-

Déjeme saber si usted quiere beta prueba esto (si usted tiene un Smart-TV)

-

Paso 1. presione el "Start" botón de la "Share screen" ventana en su dispositivo Android

-

Paso 2. Inicie el "Chess screen" aplicación en su TV

-

Paso 3. Introduzca el número que se muestra debajo de la "Start" botón con el control remoto de su televisor.

-

--------------------

-

Pruebe esto desde un navegador regular en su PC o portátil? - ir http://jwtc.nl/tv

+

Esto le permite de dejar que otro dispositivo muestre el tablero de ajedrez cuando se encuentre en la misma red de área local.

+

Actualmente, esto es experimental y la aplicación Smart-TV real que puede conectarse a su dispositivo Android no está disponible todavía.

+

Digame si quiere hacer esta prueba beta (si tiene una Smart TV)

+

Paso 1. Pulse el botón "Inicio" de la ventana "Compartir pantalla" en su dispositivo Android

+

Paso 2. Inicie la aplicación "pantalla de ajedrez" en su televisor

+

Paso 3. Entre el número que se muestra a continuación del botón "Inicio" usando el mando a distancia de su televisor.

+

--------------------

+

Quiere probar esto desde un navegador normal en su PC o portátil? - Visite http://jwtc.nl/tv

- + \ No newline at end of file diff --git a/app/src/main/assets/convergence-pt.html b/app/src/main/assets/convergence-pt.html new file mode 100644 index 00000000..e0a02f88 --- /dev/null +++ b/app/src/main/assets/convergence-pt.html @@ -0,0 +1,27 @@ + + + + Sobre Xadrez + + + + + +
+ +

Tela da TV de Xadrez - experimental

+ +

Isso lhe dá a capacidade de permitir que outro dispositivo mostre o tabuleiro de xadrez, quando está na mesma rede de área local.

+

Atualmente, este é experimental e a real aplicação Smart-TV que você pode conectar ao seu dispositivo Android ainda não está disponível.

+

Diga-me se você quiser testar a versão beta disso (se você tiver uma Smart TV)

+

Passo 1. Pressione o botão "Iniciar" na janela "Compartilhe tela" no seu dispositivo Android

+

Passo 2. Inicie a aplicação "tela de Xadrez" na sua TV

+

Passo 3. Digite o número que é mostrado abaixo do botão "Iniciar" usando o controle remoto da sua TV.

+

--------------------

+

Você quer testar isso a partir de um browser regular no seu PC ou laptop? - Visite http://jwtc.nl/tv

+ +
+ + + \ No newline at end of file diff --git a/app/src/main/assets/convergence-zh.html b/app/src/main/assets/convergence-zh.html new file mode 100644 index 00000000..1d9969fc --- /dev/null +++ b/app/src/main/assets/convergence-zh.html @@ -0,0 +1,27 @@ + + + + 关于国际象棋 + + + + + +
+ +

国际象棋电视屏游戏体验

+ +

本功能可以在同一网络的另外一个显示设备上显示正在对局的棋局.

+

当前这一功能还是体验性的. 能够连接安卓设备的智能电视应用还在开发中.

+

如果你有一款智能电视, 并有兴趣试试. 请联系我们

+

第一步. 在安卓设备"Share screen"的窗口中, 点击 "Start" 按钮

+

第二步. 在电视上启动"Chess screen"

+

第三步. 用电视遥控器按下"Start"按钮下的数字.

+

--------------------

+

想用电脑或笔记本上的游览器对此功能做一个常规检测? - 请访问http://jwtc.nl/tv

+ +
+ + + \ No newline at end of file diff --git a/app/src/main/assets/help-en.html b/app/src/main/assets/help-en.html index 7babe763..bc0c4a68 100644 --- a/app/src/main/assets/help-en.html +++ b/app/src/main/assets/help-en.html @@ -23,6 +23,8 @@

Help

Tim Tennyson: Several improvements.

Alessandro Dal Bello, Paolo Straffi: Italian translation.

Ildar Gubaidulin: Russian translation.

+

Marcella De Rosa: Spanish and Portuguese translations.

+

stan zheng: Chinese translation.

Play

Play vs. Android or use as a chess board to analyze games. diff --git a/app/src/main/assets/help-es.html b/app/src/main/assets/help-es.html index b42170bd..65d3ec2e 100644 --- a/app/src/main/assets/help-es.html +++ b/app/src/main/assets/help-es.html @@ -1,55 +1,56 @@ - + - - Acerca de Ajedrez - - - + + Ayuda para Ajedrez + +

-

Ayuda

+

Ayuda

-

Creado por Jeroen Carolus

+

Creado por Jeroen Carolus

-

Para el apoyo, la información sobre las actualizaciones y la versión más reciente: por favor vaya a la página web de desarrollador jwtc.nl.

+

Para apoyo, información sobre las actualizaciones y la versión más reciente: por favor visite la página web de desarrollador jwtc.nl. jwtc.nl.

-

Gracias a Peter van Grijfland por su participación , excelentes sugerencias y las pruebas beta.

+

Gracias a Peter van Grijfland por su participación, excelentes sugerencias y pruebas beta.

-

El ajedrez es en GitHub - contribuir y hacer una mejor aplicación!

-

Contribuciones GitHub:

-

Tim Tennyson: Varias mejoras.

-

Alessandro Dal Bello, Paolo Straffi: Traducción italiano.

-

Ildar Gubaidulin: Traducción Ruso.

+

Ajedrez está en GitHub - contribuya y hagala una mejor aplicación!

+

Contribuciónes de GitHub:

+

Tim Tennyson: Varias mejoras.

+

Alessandro Dal Bello, Paolo Straffi: Traducción italiana.

+

Ildar Gubaidulin: Traducción rusa.

+

Marcella De Rosa: Traducción portuguesa y española.

+

stan zheng: Traducción china.

-

Jugar

-

Jugar contra Android o el uso como un tablero de ajedrez para analizar juegos. -

+

Jugar

+

Juege contra el Android or utilice el tablero de ajedrez para analizar juegos. +

-

Práctica

-

Practique sus habilidades cheque -mate contra el reloj. -

+

Práctica

+

Practique sus habilidades cheque-mate contra el reloj. +

-

Rompecabezas

-

Resuelva duro "mate en dos" puzzles. -

+

Rompecabezas

+

Resuelva duros rompecabezas de "mate en dos". +

-

Jugar en linea

-

Jugar en linea en el FICS (Free Internet Chess Server). -

+

Jugar en línea

+

Juegue en línea en el FICS (Free Internet Chess Server). +

-

Preferencias globales

-

Configuración de preferencias que son globales para el ajedrez. -

+

Preferencias globales

+

Configure las preferencias que son globales para el ajedrez.. +

-

Avanzado

-

Herramientas de importación y exportación que manejan archivos PGN. -

+

Avanzado

+

Importe y exporte herramientas que manejan archivos PGN. +

- + \ No newline at end of file diff --git a/app/src/main/assets/help-it.html b/app/src/main/assets/help-it.html index c70a94d0..f3220333 100644 --- a/app/src/main/assets/help-it.html +++ b/app/src/main/assets/help-it.html @@ -23,6 +23,8 @@

Aiuto

Tim Tennyson: Diversi miglioramenti.

Alessandro Dal Bello, Paolo Straffi: Traduzione italiana.

Ildar Gubaidulin: Traduzione russa.

+

Marcella De Rosa: Traduzioni spagnolo e portoghese.

+

stan zheng: Traduzione cinese.

Gioco

Gioca contro Android o usa una scacchiera per analizzare le partite. diff --git a/app/src/main/assets/help-pt.html b/app/src/main/assets/help-pt.html new file mode 100644 index 00000000..bc57f311 --- /dev/null +++ b/app/src/main/assets/help-pt.html @@ -0,0 +1,56 @@ + + + + Ajuda para Xadrez + + + + + +

+ +

Ajuda

+ +

Criado por Jeroen Carolus

+ +

Para apoio, informações sobre atualizações e a versão mais recente: por favor, visite o site do desenvolvedor jwtc.nl. jwtc.nl.

+ +

Graças a Peter van Grijfland por seu envolvimento, excelentes sugestões e testes beta.

+ +

O xadrez está no GitHub - contribuia e torná-lo um aplicativo melhor!!

+

Contribuções GitHub:

+

Tim Tennyson: Várias melhorias

+

Alessandro Dal Bello, Paolo Straffi: tradução italiana.

+

Ildar Gubaidulin: tradução russa.

+

Marcella De Rosa: tradução portuguesa e espanhola

+

stan zheng: Tradução chinês

+ +

-Jogue

+

Jogue contra o Android ou use o tabuleiro para analisar jogos. +

+ +

Pratique

+

Pratique suas habilidades cheque mate contra o relógio. +

+ +

Quebra-cabeças

+

Resolve difíciles quebra-cabeças "mate em dois". +

+ +

Jogue online

+

Jogue online no FICS (Free Internet Chess Server). +

+ +

Preferências globais

+

Definir preferências que são globais para o Xadrez.. +

+ +

Avanzado

+

Importe e exporte ferramentas que lidam com arquivos PGN.. +

+ +
+ + + \ No newline at end of file diff --git a/app/src/main/assets/help-ru.html b/app/src/main/assets/help-ru.html index fe6c9ca7..7e0d5312 100644 --- a/app/src/main/assets/help-ru.html +++ b/app/src/main/assets/help-ru.html @@ -23,6 +23,8 @@

Помощь

Тим Теннисон: несколько улучшений.

Алессандро Дал Белло, Паоло Страффи: итальянский перевод.

Ильдар Губайдулин: русский перевод.

+

Марселла De Rosa: Испанские и португальские переводы.

+

Стан Zheng: Китайский перевод.

Игра

Играйте против Android или используйте шахматную доску для анализа игр. diff --git a/app/src/main/assets/help-zh.html b/app/src/main/assets/help-zh.html new file mode 100644 index 00000000..e5eaf2e5 --- /dev/null +++ b/app/src/main/assets/help-zh.html @@ -0,0 +1,56 @@ + + + + 使用帮助 + + + + + +

+ +

使用帮助

+ +

作者: Jeroen Carolus

+ +

请前往开发者网站获取最新的版本和帮助: jwtc.nl.

+ +

在此感谢 Peter van Grijfland 为本软件提供了测试和积极的优化建议.

+ +

国际象棋基于GitHub - 让软件更好!

+

GitHub 参与人员:

+

Tim Tennyson: 做了一些优化.

+

Alessandro Dal Bello, Paolo Straffi: 完成了意大利语翻译.

+

Ildar Gubaidulin: 俄语翻译.

+

Marcella De Rosa: 葡萄牙语,西班牙语翻译.

+

stan zheng: 中国的翻译.

+ +

对局

+

与安卓机器人对局或使用棋盘来分析对局. +

+ +

练习

+

在规定时间内练习将死对方的方法. +

+ +

题局

+

寻求在几步内将死对手, 类似一个题目. +

+ +

在线游戏

+

在免费的国际象棋网络服务器内与其它玩家对战 (FICS). +

+ +

通用参数设置

+

为国际象棋通用参数进行设置. +

+ +

高级

+

用于导入和导出PGN文件的工具. +

+ +
+ + + \ No newline at end of file diff --git a/app/src/main/assets/help_online-es.html b/app/src/main/assets/help_online-es.html index b1c7c074..40dab2b2 100644 --- a/app/src/main/assets/help_online-es.html +++ b/app/src/main/assets/help_online-es.html @@ -1,41 +1,40 @@ - + - - Jugar Ayuda en línea - - - + + Ayuda para juego en línea + + - +
-

Jugar Ayuda en línea

+

Ayuda para juego en línea

-

-FICS: Free Internet Chess Server vamos que juegas con miles de jugadores de ajedrez en línea.
- Advertencia: si su dispositivo cambia de un punto de acceso a Internet a otra, la conexión puede romperse. No hay timeseal
-

-

Menú

-Desafíos
-Esto muestra a los jugadores que buscan un partido. Haga clic en el reproductor de la lista para aceptar un desafío.
-Buscar
- Configure su propio reto . Si rellena el mango de un jugador que sabe, va a hacer un desafío directo.
-Juegos
-juegos de relojes que se está reproduciendo en línea. Un gran maestro puede ser identificado por el prefijo GM al mango.
-Jugadores
-Muestra a los jugadores inactivos con puntuaciones.
-

Botones

-Los dos botones de la pantalla se puede utilizar para:
-- acceder a una lista de funciones útiles.
-- susurro botón - permite a los usuarios registrados para chatear con otros observadores del juego
-Ver los observadores del juego escribiendo: allobservers [número de juego]
-

Examinar

-Ir sobre el juego con diferentes líneas. Utilice botón de la inversión para volver a la línea principal.
-Tiene un entrenador que sigue. Permitir a un jugador para hacer movimientos escribiendo: mexamine [jugador]
-Utilice un teléfono de Internet para tener conversaciones de voz. (Por ejemplo: Skype)
-Cuando haya terminado - Tipo: unexamine
+

+ FICS: Free Internet Chess Server le permite jugar con miles de jugadores de ajedrez en línea..
+ Advertencia: si el dispositivo cambia de punto de acceso a Internet, la conexión puede romperse. No hay timeseal.
+

+

Menú

+ Desafíos
+ Muestra los jugadores que buscan un partido. Haga clic en el reproductor de la lista para aceptar un desafío.
+ Buscar
+ Configure su propio desafío. Si inserta el codigo de un jugador que conoce, hará un desafío directo con el.
+ Juegos
+ Mire los juegos que se están reproduciendo en línea. Un gran maestro puede ser identificado por el prefijo GM antes del codigo.
+ Jugadores
+ Muestra los jugadores inactivos con puntuaciones.
+

Botones

+ Los dos botones de la pantalla se pueden utilizar para:
+ - Acceder a una lista de funciones útiles
+ - Susurro botón - permite a los usuarios registrados de chatear con otros observadores del juego
+ Ver los observadores del juego escribiendo: allobservers [número de juego]
+

Investigación

+ Revise el juego con diferentes líneas. Utilice botón de la inversión para volver a la línea principal.
+ Tenga un entrenador que la sigua. Permita un jugador de hacer movimientos escribiendo: mexamine [jugador]
+ Utilice un teléfono de Internet para tener conversaciones de voz. (Por ejemplo. Skype)
+ Cuando haya terminado - digite: unexamine
- + \ No newline at end of file diff --git a/app/src/main/assets/help_online-pt.html b/app/src/main/assets/help_online-pt.html new file mode 100644 index 00000000..b148dcd8 --- /dev/null +++ b/app/src/main/assets/help_online-pt.html @@ -0,0 +1,40 @@ + + + + Ajuda para o jogo on-line + + + + + +
+

Ajuda para o jogo on-line

+ +

+ FICS: Free Internet Chess Server permite que você jogue com milhares de jogadores de xadrez online.
+ Aviso: se o dispositivo muda de um ponto de acesso à Internet para outro, a conexão pode quebrar. Não há timeseal.
+

+

Menu

+ Desafios
+ Mostra os jogadores que procuram uma partida. Clique no player na lista para aceitar um desafio.
+ Procure
+ Configure o seu próprio desafio. Se você preencher o pseudônimo de um jogador que você sabe, vai fazer um desafio direto com ele.
+ Jogos
+ Olhe os jogos que estão sendo jogados online. Um grande mestre pode ser identificado pelo prefixo GM antes do pseudônimo.
+ Jogadores
+ Mostra jogadores parados com classificações.
+

Botões

+ Os dois botões na tela podem ser usados para:
+ - aceder a uma lista de funções úteis
+ - botão de sussurro - permite aos utilizadores registrados de conversar com outros observadores do jogo.
+ Veja os observadores do jogo, digitando: allobservers [número de jogo]
+

Examine

+ Vá ao longo do jogo com diferentes linhas. Use botão da reversão para voltar a linha principal.
+ Tenha um treinador para segui-lo. Permite que um jogador faça movimentos digitando: mexamine [jogador]
+ Use um telefone via internet para ter chat de voz. (Eg. Skype)
+ Quando terminar - insere: unexamine
+
+ + + \ No newline at end of file diff --git a/app/src/main/assets/help_online-zh.html b/app/src/main/assets/help_online-zh.html new file mode 100644 index 00000000..f9ab8ac5 --- /dev/null +++ b/app/src/main/assets/help_online-zh.html @@ -0,0 +1,40 @@ + + + + 在线对局的说明 + + + + + +
+

在线对局的说明

+ +

+ FICS: 免费的国际象棋网络服务器 让你与数千位国际象棋爱好者同时在线竞技.
+ 警告: 如果你的设备从一个网络接入点转换到另一个接入点时, 网络连接可能会断开. 此时下棋计时器会中断.
+

+

菜单

+ 挑战
+ 用于寻找对手对局. 点击列表中的选手来发起挑战.
+ 寻战
+ 设置你要挑战的选手. 如果你填写你知道的一个选手的名字,将会直接发起挑战.
+ 观战
+ 在线观看选手对局. 高段位选手的对局会被系统标识出来.
+ 选手清单
+ 可以显示空闲中的选手及其等级.
+

按键

+ 屏幕上有两个可用按键:
+ - 一个可以进入所有功能菜单
+ - 私话按键 - 允许注册用户和此局游戏的其它观察者聊天.
+ 可以输入下面文本命令知道此局游戏的其它观察者(括号内输入棋局编号): allobservers [game number]
+

学习性对局

+ 可以回到上一步来探索不同支线走法的可能性. 点击回复按键可以回到主线.
+ 如果有一个老师教你对局时. 输入下列命令可以让学习者下棋: mexamine [player]
+ 同时双方请用网络电话(如SKYPE)保持联系
+ 终止时输入命令: unexamine
+
+ + + \ No newline at end of file diff --git a/app/src/main/assets/help_pgntool-es.html b/app/src/main/assets/help_pgntool-es.html index 39d2f1ca..d59e487a 100644 --- a/app/src/main/assets/help_pgntool-es.html +++ b/app/src/main/assets/help_pgntool-es.html @@ -1,47 +1,47 @@ - + - - Avanzado - - - + + Avanzado + + +
-

Avanzado

-

Crear o importar tus propias cosas aquí.

- -

Base de datos de juego Exportar a tarjeta SD

-

Todos los juegos en la base de datos del juego se pueden exportar a un solo archivo PGN en tarjeta SD. Este archivo se denominará chess.pgn y un archivo existente se sobrescribe.

- -

Juegos de importación en la base de datos de juegos

-

Utilice esta opción para agregar juegos a la base de datos del juego. Te permite navegar a un archivo PGN. Seleccione y optar por importar.

- -

Eliminar todos los juegos en la base de datos del juego

-

Utilice esta opción si desea limpiar la base de datos del juego. Asegúrese de que primero haga una copia de seguridad de la tarjeta SD, esta acción no se puede deshacer.

- -

Crear base de datos de apertura

-

Vaya a un archivo PGN en tarjeta SD y se convierte en una base de datos de apertura con el mismo nombre pero con extensión de archivo .bin. Actualmente todos los juegos en el archivo PGN se analizan hasta 17 capas.

- -

Establezca la apertura de la base de datos

-

Vaya a la recién creada .bin abrir archivo de base de datos para permitir Ajedrez usarlo.

- -

Instalar módulo UCI

-

Seleccionar un motor UCI instalado dejar Ajedrez usarlo (e.g. Komodo).

- -

Instale manualmente el motor UCI

-

Vaya a un archivo binario módulo UCI para dejar Ajedrez usarlo.

- -

Motor Desinstalar UCI

-

Retire el módulo UCI instalado.

- -

Crear conjunto de la práctica

-

Crea puestos de práctica de juegos que terminan en un jaque mate . Busque el archivo a procesar . Entradas fallidas suelen ser juegos que no terminaron en un jaque mate o son un duplicado.

- -

Conjunto de la práctica de reinicio

-

¿Quieres volver a empezar a practicar? Esto también restablecer su contador de tiempo promedio.

- -
+

Avanzado

+

Crear o importar sus proprias cosas aquí

+ +

Exportar base de datos del juego a tarjeta sd

+

Todos los juegos en la base de datos del juego pueden ser exportados a un solo archivo PGN en la tarjeta SD. Este archivo se denominará chess.pgn y será sobrescrito a un archivo existente.

+ +

Importar juegos a la base de datos del juego

+

Utilice esta opción para agregar juegos a la base de datos del juego. Le permite navegar a un archivo PGN. Seleccione y elija de importar

+ +

Borrar todos los juegos en la base de datos de juegos

+

Utilice esta opción si desea limpiar la base de datos del juego. Asegúrese de hacer primero una copia de seguridad de la tarjeta SD, porqué esta acción no se puede deshacer

+ +

Crear una base de datos de aperturas

+

Abra un archivo PGN en la tarjeta SD y se conviertirá en una base de datos de aperturas con el mismo nombre pero con extensión de archivo .bin. Actualmente todos los juegos en el archivo PGN serán analizados hasta 17 jugadores.

+ +

Configuración de base de datos de aperturas

+

Abra la base de datos de aperturas recién creada para que Ajedrez la utilice.

+ +

Instalare el motor UCI

+

Seleccione un motor UCI instalado para que Ajedrez lo utilice (por ejemplo Komodo).

+ +

Instalar manualmente el motor UCI

+

Abra un archivo binario del motor UCI para que Ajedrez lo utilice.

+ +

Desinstalar el motor UCI

+

Elimine el motor UCI instalado.

+ +

Crear configuración de práctica

+

Crea posiciones de práctica de juegos que terminan en un jaque mate. Abra el archivo para procesarlo. Accesos fallidos suelen ser los juegos que no terminaron en un jaque mate o son un duplicado

+ +

Configuración de práctica de reinicio

+

¿Quiere volver a empezar la práctica? Se restablecerá también el contador de tiempo medio.

+ + \ No newline at end of file diff --git a/app/src/main/assets/help_pgntool-pt.html b/app/src/main/assets/help_pgntool-pt.html new file mode 100644 index 00000000..a797147e --- /dev/null +++ b/app/src/main/assets/help_pgntool-pt.html @@ -0,0 +1,47 @@ + + + + Avançado + + + + + +
+

Avançado

+

Criar ou importar seu próprio material aqui

+ +

Exportar banco de dados do jogo para cartão SD

+

Todos os jogos no banco de dados do jogo podem ser exportados para um único arquivo PGN no cartão SD. Este arquivo será nomeado chess.pgn y será sobrescrito num arquivo existente.

+ +

Importar jogos no banco de dados do jogo

+

Use esta opção para adicionar jogos ao banco de dados do jogo. Selecione e escolhe de importar

+ +

Excluir todos os jogos no banco de dados do jogo

+

Use esta opção se você deseja limpar o banco de dados jogo. Assegure-se primeiro de fazer uma cópia de segurança para o cartão SD, porqué esta ação não pode ser desfeita.

+ +

Criar um banco de dados de aberturas

+

Navegue até um arquivo PGN no cartão SD e ele será convertido em um banco de dados de aberturas com o mesmo nome, mas com arquivo de extensão .bin. Atualmente todos os jogos no arquivo PGN serão analisados até 17 jogadores.

+ +

Configurar um banco de dados de aberturas

+

Abre o recém-criado arquivo do banco de dados de aberturas .bin para deixar Xadrez usá-lo.

+ +

Instale o motor UCI

+

Selecione um motor UCI instalado para deixar Xadrez usá-lo. (por exemplo Komodo).

+ +

Instalar manualmente el motor UCI

+

Abre um arquivo binário do motor UCI para deixar Xadrez usá-lo.

+ +

Desinstalar o motor UCI

+

Remova o motor UCI instalado.

+ +

Criar configuração de práticas

+

Crie posições de prática de jogos que terminam em um cheque-mate. Abre o arquivo para processar. Accessos que falharam são geralmente jogos que não terminam em um cheque-mate ou que são duplicados

+ +

Configuração de prática de reset

+

Quer começar a prática? Isso também irá redefinir seu contador de tempo médio.

+ +
+ + \ No newline at end of file diff --git a/app/src/main/assets/help_pgntool-zh.html b/app/src/main/assets/help_pgntool-zh.html new file mode 100644 index 00000000..91786758 --- /dev/null +++ b/app/src/main/assets/help_pgntool-zh.html @@ -0,0 +1,47 @@ + + + + 高级 + + + + + +
+

高级

+

创建或导入自定义棋局.

+ +

将对局资料导出到SD卡

+

所有的对局都可以以PGN文件的形式导出到SD卡. 这个文件名为 chess.pgn, 当新一局保存时旧的对局文件会被替换覆盖.

+ +

导入游戏

+

使用"add games"的选项可以新建一局游戏. 可以让你游览各PGN文件, 从中选择要导入的对局.

+ +

删除数据库中所有对局资料

+

在这一菜单下, 你可以清空所有对局资料. 请先备份好数据, 被清空资料将不可以被恢复.

+ +

创建开放数据库

+

浏览SD卡内的PGN文件, 该文件将被转换为一个开放式数据库但文件名有.BIN作为后缀. 该文件内所有对局将被提取, 最多17层.

+ +

设置开放数据库

+

游览刚刚创建的开放数据库, 并让国际象棋使用它.

+ +

安装通用国际象棋界面引擎(UCI)

+

选择一个已经安装的UCI并使用它 (如 Komodo).

+ +

手动安装通用国际象棋界面引擎UCI

+

手动选择一个UCI引擎二进制文件并让软件使用它.

+ +

卸载通用国际象棋界面引擎(UCI)

+

卸载通用国际象棋界面引擎(UCI)

+ +

创建对局练习集

+

创建一个必胜残局. 打开文件继续此残局. 如果最终不能获胜或只能重复相同的步骤, 则说明之前走子错误

+ +

对局练习复原

+

想重新恢复对局练习? 这同时也会重置你的计时器.

+ +
+ + \ No newline at end of file diff --git a/app/src/main/assets/help_play-es.html b/app/src/main/assets/help_play-es.html index 9ab963cf..4c95d8e3 100644 --- a/app/src/main/assets/help_play-es.html +++ b/app/src/main/assets/help_play-es.html @@ -1,96 +1,87 @@ - + - - Ajedrez Ayuda - - - + + Ayuda para Ajedrez + + - +
-

Ajedrez Ayuda

+

Ayuda para Ajedrez

-

Para demostración de apoyo en línea y vaya al sitio web para desarrolladores.

- -
Índice -

Jugar instrucciones

-

Menú

-

Opciones

-

Vistas

-

Guardar y Cargar

-

Juego de importación

-

Juego de exportación

-

Consejos

-
+

Para demostración en línea y apoio visite el sitio web del desarrollador

+
Índice +

Instrucciones del juego

+

El menú

+

Opciones

+

Visitas

+

Guardar y cargar

+

Importar juego

+

Exportar juego

+

Consejos

+
-

Jugar instrucciones

-

-Para mover una pieza, seleccionarlo mediante el tacto. También puede utilizar el pad direccional o trackball para ir a la plaza y seleccionarlo. Se resaltará. -A continuación, seleccione la posición en la que debe ir. Vea el título de información del juego, tales como el estado del juego o si se trataba de un movimiento ilegal
-Haga clic en el botón Reproducir para que Android hacer un movimiento.
-Utilice los botones de navegación o la barra de la historia para navegar a través de la historia del juego. Si vas hacia atrás y hacer un movimiento desde un punto anterior en el juego, la historia del juego se trunca desde ese punto.
-

-

El menú

-

-Iniciar un nuevo juego
-Guardar el juego
-Cargar una partida guardada
-Establecer opciones de jugar
-

+

Instrucciones del juego

+

Para mover una pieza, seleccionela con un toque. Puede también utilizar el mando de dirección o la bola de seguimento para ir al cuadrado y seleccionarlo. Se destacará. A continuación, seleccione la posición donde debe ir. Mire el título par informaciones sobre el juego, como el estado del juego o si ha habido un movimiento ilegal.
+ Haga clic en el botón de reproducción para que Android haga un movimiento.
+ Utilice los botones de navegación o la barra de la historia para navegar a través de la historia del juego. Si va hacia atrás y hace un movimiento desde un punto anterior en el juego, la historia del juego se trunca a partir de ese punto.
-

Opciones

-

-Marque la casilla para jugar vs Android o desmarque para el modo de dos jugadores.
-Si se encuentra en modo de dos jugadores , se puede comprobar al girar el tablero de forma automática después de cada movimiento.
-Si desea ver los movimientos válidos de la pieza que ha seleccionado para mover , comprobar los movimientos 'Mostrar' . -Ajuste el tiempo máximo de Android se permite "pensar".
-

+

-

Vistas

-

-Pulse el botón "más" para cambiar los controles a uno de los siguientes:
-Default 'jugador' vista con los botones de navegación.
-Las piezas capturadas .
-Reloj. Pulse el icono del reloj para ajustar la hora.
-Mostrar anotaciones. Haga clic en el área de texto para editar. -Historia PGN. -
-

+

El menu

+

Comienza un nuevo juego
+ Guarde el juego
+ Cargue un partido guardado
+ Configure las opciones del juego
+

-

Guardar y Cargar

-

-Puede guardar el juego a la lista de juegos salvados a través del menú. Elija 'Guardar juego " y rellenar -el diálogo de modo que usted puede encontrar de nuevo.
- Aviso: el juego actual se guardar automáticamente porque si entra una llamada a través, el -proceso de ajedrez podría ser asesinado y en este punto no hay ' ¿quieres salvar tu juego de diálogo' posible< br. /> -Para cargar una partida guardada , seleccione " Cargar partida " en el menú . -
-

+

Opciones

+

+ Elija un partido contra Android o en modo dos jugadores
+ Si se encuentra en modo de dos jugadores, puede girar el tablero de forma automática después de cada movimiento.
+ Si desea ver los movimientos válidos de la pieza que ha seleccionado para mover, mire en 'Mostrar movimientos'. Ajuste el tiempo máximo del que dispone Android para 'pensar' +
+

-

Importación

-

-Si alguien le ha enviado por correo electrónico un archivo PGN, puede dejar de Ajedrez abrirlo.
-También puede utilizar la herramienta de PGN para buscar un archivo PGN en su tarjeta SD y la importación de juegos. -
-

+

Visitas

+

+ Presione el botón "más" para cambiar los controles a uno de los siguientes:
+ Vista 'player' por defecto con los botones de navegación
+ Piezas capturadas
+ Reloj. Pulse el icono del reloj para ajustar la hora
+ Mostrar anotaciones.Haga clic en el área de texto para editar la história PGN. +
+

-

Juego de exportación

-

-Puede enviarnos un correo electrónico el juego que esté viendo actualmente por la elección de menú "juego E-mail'. -Esto iniciará el cliente de correo electrónico con un e-mail con el juego como un PGN-apego.
-

+

Guardar y cargar

+

+ Puede guardar el juego en la lista de juegos salvados a través del menú.
Seleccione "Guardar juego" y rellene el cuadro de diálogo para que pueda encontrarla de nuevo.
+ Notice: Aviso: el juego actual se guarda automáticamente ya que si entra una llamada, el proceso de ajedrez podría ser matado y en este punto no hay "¿desea guardar su juego?'
+ Para cargar un partido guardado, elija 'Cargar juego' en el menu.
+

-

Consejos

-

-Use el reloj y ajustar la hora a 2 o 5 minutos. Trate de golpear a Android antes de que acabe el tiempo. -No se olvide de establecer el nivel de juego de Android a una cantidad apropiada (2 segundos)
-Utilice ajedrez 960 para que sea más difícil.
-

+

Importar

+

+ Si alguien le ha enviado por correo electrónico un formato PGN, puede hacer que ajedrez lo abra
+ También puede utilizar la herramienta de la PGN para buscar un archivo PGN en su tarjeta SD y importar juegos
+

+ +

Exportar juegos

+

+ Puede enviar por correo electrónico el juego que está viendo actualmente por la elección de menú "manda juego por correo electronico'. Esto iniciará el cliente de correo electrónico con un e-mail con el juego como un PGN-adjunto. +
+

+ +

Consejos

+

+ Use el reloj y ajuste la hora a 2 o 5 minutos. Trate de vencer al Android antes de que acabe el tiempo. No se olvide de establecer el nivel de juego de Android en una cantidad apropiada (2 segundos)
+ Use Ajedrez960 para que sea más dificil.
+

- + \ No newline at end of file diff --git a/app/src/main/assets/help_play-pt.html b/app/src/main/assets/help_play-pt.html new file mode 100644 index 00000000..cdd345ca --- /dev/null +++ b/app/src/main/assets/help_play-pt.html @@ -0,0 +1,88 @@ + + + + Ajuda para Xadrez + + + + + +
+

Ajuda para Xadrez

+ +

Para demo e suporte on-line acesse o site do desenvolvedor

+ +
Índice +

Instruções para jogar

+

O menu

+

Opções

+

Visualizações

+

Salvar e carregar

+

Importar jogo

+

Exportar jogo

+

Dicas

+
+ + +

Instruções do jogo

+

Para mover uma peça, selecione pelo toque. Pode também usar o bloque direcional ou trackball para ir ao quadrado e selecioná-lo. Ele será destacado. Em seguida, selecione a posição onde ele deve ir. Assista o título para as informações do jogo, como o estado do jogo o se foi um movimento ilegal.
+ Clique no botão Joga para deixar que o Android faça um movimento.
+ Use os botões de navegação ou a barra de histórico para navegar através da história do jogo. Se você voltar e fazer um movimento de um ponto no início do jogo, a história do jogo fica truncado a partir desse ponto.
+ +

+ +

O menu

+

Começa um jogo novo
+ Salve o jogo
+ Carregar um jogo salvado
+ Definir opções de jogo
+

+ +

Opções

+

+ Escolha um jogo contra Android o em modo dois jogadores
+ Se você estiver no modo para dois jogadores, você pode girar a placa automaticamente após cada movimento.
+ Se você quiser ver os movimentos válidos da peça que decidiu mover, olhe o 'Mostre movimento'. Define o tempo máximo que permite ao Android para pensar. +
+

+ +

Visualizações

+

+ Pressione o botão "mais" para mudar os controles para um dos seguintes procedimentos:
+ Vista de 'Jogador' como padrão con botões de navegação.
+ Peças capturadas
+ Relógio. Pressione o ícone do relogio para definir a hora.
+ Mostrar anotações.Clique na área de texto para editar + história PGN. +
+

+ +

Salvar e carregar

+

+ Você pode salvar o seu jogo para a lista de jogos salvos através do menu.
Escolha 'Salvar o jogo "e preencha a caixa de diálogo para que você possa encontrá-lo novamente.
+ Notice: Aviso: o jogo atual será salva automaticamente porque se uma chamada chega, o processo de xadrez pode ser matado e neste momento não há nenhuma 'quer salvar o seu diálogo jogo "possível.
+ Para carregar um jogo salvo, escolha 'Carregar jogo "a partir do menu.
+

+ +

Importar

+

+ Se alguém lhe enviar um e-mail com um arquivo PGN, você pode deixar Xadrez abri-lo.
+ Você também pode usar a ferramenta PGN para procurar um arquivo PGN no seu cartão SD e importar jogos.
+

+ +

Exportar jogo

+

+ Você pode enviar um e-mail para o jogo que você está vendo através do menu escolhendo 'E-mail do jogo'. Isto irá iniciar o seu cliente de e-mail com um e-mail com o jogo como um pgn-anexo. +
+

+ +

Dicas

+

+ Use o relógio e define o tempo de 2 ou 5 minutos. Tente bater Android antes do tempo acabar. Não se esqueça de definir o nível de jogo do Android para uma quantidade adequada (2 segundos)
+ Use Xadrez960 para torná-lo mais desafiador.
+

+ +
+ + \ No newline at end of file diff --git a/app/src/main/assets/help_play-zh.html b/app/src/main/assets/help_play-zh.html new file mode 100644 index 00000000..1fd08a51 --- /dev/null +++ b/app/src/main/assets/help_play-zh.html @@ -0,0 +1,86 @@ + + + + 国际象棋使用帮助 + + + + + +
+

国际象棋使用帮助

+ +

如需在线示范和帮助, 请访问开发者网站

+ +
索引 +

对局说明

+

菜单

+

选项

+

查看

+

保存和载入

+

导入游戏

+

导出游戏

+

提示

+
+ + +

对局说明

+

触击一个棋子即可选择该棋子, 你也可以通过方向键或光标移动到指定格子来选定此位置上的棋子. 被选定的棋子将会加亮. + 接下来选定此棋子要去的位置. 留意标题栏中提示的游戏状态或此步是否违反国际象棋的规则.
+ 点击"Play" 按钮, 让系统执行这一步棋.
+ 用导航按钮或进度条来回顾棋局. 如果你回到某一步, 并且在此重新下棋, 则之前此步后的记录将全部删除.
+ +

+ +

菜单

+

开启新的棋局
+ 保存棋局
+ 载入一个已保存对局
+ 设置对局选项
+

+ +

选项

+

+ 选择与机器对战或与人对战.
+ 在与人对战模式, 你可以在每一步后, 自动旋转棋盘来进行检查.
+ 如果想合理控制每一步的用时, 你可以检查'show moves'.并设置机器每步的最大用时.
+

+ +

查看

+

+ 点击'更多more' 按钮进入下列功能:
+ 默认的选手视角, 有前进和后退按钮.
+ 追踪各步骤.
+ 时钟. 点击时钟按钮,来设置时间.
+ 显示注释. 点击文本区域可以进行编辑. + PGN 历史信息.
+

+ +

保存和载入

+

+ 通过本菜单,你可以将对局保存到已保存对局列表内. 选择 'Save game' 并在对话框内填入名称(以便你以后再找到).
+ 注意: 当有一个电话打进来时, 当前进行中的游戏将自动保存. 国际象棋此时可能退出而没有'保存对局的提示对话框'.
+ 选择此菜单中的'载入游戏Load Game'来载入一个已保存游戏.
+

+ +

导入游戏

+

+ 通过此菜单你可以打开别人发送给你的PGN文件.
+ 也可以使用PGN工具来游览SD卡内的各PGN文件并导入对局.
+

+ +

导出游戏

+

+ 在观看对局时, 可以通过选择菜单'发送电子邮件E-mail'将对局的PGN文件发送给别人. 这一操作将触发你的电子邮件客户端, 创建一个带PGN文件作为附件的新邮件.
+

+ +

提示

+

+ 使用时钟将时间设置为2或5分钟, 尝试在此时限内战胜安卓机器人. 不要忘记设置安卓机器人下棋时的时间限制(大约2秒).
+ 你也可以使用Chess960挑战更高难度.
+

+ +
+ + \ No newline at end of file diff --git a/app/src/main/assets/help_practice-es.html b/app/src/main/assets/help_practice-es.html index 2e533c5e..d2811f4e 100644 --- a/app/src/main/assets/help_practice-es.html +++ b/app/src/main/assets/help_practice-es.html @@ -1,27 +1,26 @@ - + - - Práctica Ayuda - - - + + Ayuda práctica + + - +
-

Práctica Ayuda

+

Ayuda práctica

-

+

+ Encuentra el Check-Mate (puede ser más de un movimiento).
+ Su tiempo y el tiempo promedio por posición se muestran al lado del tablero.
+ Presione el botón "Mostre" para la solución.
+ Pulse el botón 'Siguiente' para pasar a la siguiente posición.
+ A veces se pueden encontrar múltiples soluciones, pero la aplicación sólo acepta una.. +

-

-Encuentra la Check-Mate (puede haber más de un movimiento).
-Se muestra su tiempo y el tiempo promedio por posición al lado del tablero.
-Pulse el botón ' Show' para la solución.
-Pulse el botón "Siguiente" para pasar a la siguiente posición.
-A veces múltiples se pueden encontrar soluciones , pero la aplicación sólo acepta uno. -

-Esta aplicación contiene 2000 secuencias mate forzado tomadas de los grandes juegos de master. -

+

+ Esta aplicación contiene 2000 secuencias de mate forzado cogidas de juegos de grandes maestros.. +

- + \ No newline at end of file diff --git a/app/src/main/assets/help_practice-pt.html b/app/src/main/assets/help_practice-pt.html new file mode 100644 index 00000000..396404fc --- /dev/null +++ b/app/src/main/assets/help_practice-pt.html @@ -0,0 +1,26 @@ + + + + Ajuda prática + + + + +
+

Ajuda prática

+ +

+ Encontre o Check-Mate (pode haver mais de um movimento).
+ O seu tempo e o tempo médio por posição são mostrados ao lado do tabuleiro.
+ Pressione o botão 'Mostre' para a solução.
+ Pressione o botão "Proximo" para ir para a próxima posição.
+ Às vezes, várias soluções podem ser encontradas, mas a aplicação aceita apenas uma. +

+ +

+ Esta aplicação contém 2000 sequências de mate forçado tiradas de jogos de grandes mestres.. +

+
+ + \ No newline at end of file diff --git a/app/src/main/assets/help_practice-zh.html b/app/src/main/assets/help_practice-zh.html new file mode 100644 index 00000000..c66c71a0 --- /dev/null +++ b/app/src/main/assets/help_practice-zh.html @@ -0,0 +1,26 @@ + + + + 练习帮助 + + + + +
+

练习帮助

+ +

+ 找到胜利的步骤 (可能不只一步).
+ 你的用时和平均每步用时会在棋盘边显示.
+ 点击'显示Show' 按钮, 查看正确的步骤和下法.
+ 点击 '下一步Next' 按钮来查看下一步正确的步骤.
+ 有时候存在多种制胜方法和步骤, 但本软件只保存和认可其中的一种. +

+ +

+ 本软件保存有来自顶级国际象棋大师的多达2000场对局. +

+
+ + \ No newline at end of file diff --git a/app/src/main/assets/help_puzzle-es.html b/app/src/main/assets/help_puzzle-es.html index 161b17a1..729bb7cb 100644 --- a/app/src/main/assets/help_puzzle-es.html +++ b/app/src/main/assets/help_puzzle-es.html @@ -1,27 +1,26 @@ - + - - Puzzle Ayuda - - - + + Ayuda para rompecabezas + + - +
-

Puzzle Ayuda

+

Ayuda para rompecabezas

-

-Estos son difíciles Mate en dos puzzles.
-El objetivo es encontrar el primer movimiento que conduce a un mate forzado dentro de los dos movimientos.
-En otras palabras, después de realizar el movimiento correcto, el oponente no puede evitar que un compañero de su próximo movimiento.
-Después de este primer paso, el rompecabezas se resuelve.
-Pulse el botón 'Show' para la solución.
-

-

-Source: EL ARTE DEL MATE EN DOS por Eduardo Sadier -

+

+ Estos son duros rompecabezas de Mate en dos
+ El objectivo es encontrar el primer movimiento que conduce a un mate forzado dentro de dos movimientos.
+ En otras palabras, después de realizar el movimiento correcto, el oponente no puede evitar un mate en su siguiente movimiento.
+ Después de este primer movimiento, el rompecabezas se resuelve.
+ Presione el botón "Mostrar" para la solución.
+

+

+ Fuente: EL ARTE DEL MATE EN DOS de Eduardo Sadier +

- + \ No newline at end of file diff --git a/app/src/main/assets/help_puzzle-pt.html b/app/src/main/assets/help_puzzle-pt.html new file mode 100644 index 00000000..4f927602 --- /dev/null +++ b/app/src/main/assets/help_puzzle-pt.html @@ -0,0 +1,26 @@ + + + + Ajuda para quebra-cabeças + + + + +
+

Ajuda para quebra-cabeças

+ +

+ Estes são difíceis quebra-cabeças de Mate em dois .
+ O objetivo é encontrar o primeiro movimento que leva a um mate forçado dentro de dois movimentos.
+ Em outras palavras, depois de fazer o movimento correto, o adversário não pode impedir um mate em seu próximo movimento.
+ Após este primeiro passo, o quebra-cabeças é resolvido.
+ Pressione o botão 'Mostre' para a solução.
+

+

+ Fonte: EL ARTE DEL MATE EN DOS por Eduardo Sadier +

+ +
+ + \ No newline at end of file diff --git a/app/src/main/assets/help_puzzle-zh.html b/app/src/main/assets/help_puzzle-zh.html new file mode 100644 index 00000000..5cadbcaf --- /dev/null +++ b/app/src/main/assets/help_puzzle-zh.html @@ -0,0 +1,26 @@ + + + + 题局说明 + + + + +
+

题局说明

+ +

+ 这些对局(题局)有 两步内必胜的将军 方法.
+ 目标是 找到关键的第一步 , 这一步导致在两步内取得一个必能将死对方的方法.
+ 或者说, 如果你走对了这一正确的一步, 对方将无法躲开你的下一步将军.
+ 在这第一步后, 题局就被成功解答.
+ 点击'显示Show' 按钮来获得答案.
+

+

+ 来源: EL ARTE DEL MATE EN DOS 作者 Eduardo Sadier +

+ +
+ + \ No newline at end of file diff --git a/app/src/main/assets/help_setup-es.html b/app/src/main/assets/help_setup-es.html index 76eef618..c203eb8b 100644 --- a/app/src/main/assets/help_setup-es.html +++ b/app/src/main/assets/help_setup-es.html @@ -1,24 +1,22 @@ - + - - Ajedrez Ayuda - - - + + Ayuda para Ajedrez + + - +
-

Ajedrez Ayuda

- -

Configuración de una posición en el tablero

-

-Toque una de las piezas debajo del tablero para seleccionarlo y luego toque donde desea ponerlo.
-Para quitar una pieza, seleccione la pieza, y luego haga clic en el botón de eliminar.
-Para mover una pieza, seleccionarlo y toque en la que quiere que vaya.
-Para cambiar el color de una nueva pieza, seleccione la plaza junto a la X.
-Cuando haya terminado, haga clic en la casilla de verificación. -

+

Ayuda para Ajedrez

+ +

Configuración de la posición del tablero

+

Toque una de las piezas por debajo de la placa para seleccionarla y luego toque donde desea ponerla.
+ Para quitar una pieza, seleccione la pieza y a continuación, haga clic en el botón para eliminarla.
+ Para mover una pieza, seleccionare la pieza y toque donde quiere que vaya.
+ Para cambiar el color, toque el botón con dos flechas torcidas
+ Cuando haya terminado, haga clic en la casilla de verificación. +

- + \ No newline at end of file diff --git a/app/src/main/assets/help_setup-pt.html b/app/src/main/assets/help_setup-pt.html new file mode 100644 index 00000000..1d1d8824 --- /dev/null +++ b/app/src/main/assets/help_setup-pt.html @@ -0,0 +1,22 @@ + + + + Ajuda para Xadrez + + + + +
+

Ajuda para Xadrez

+ +

Configurar uma posição do tabuleiro

+

Toque uma das peças abaixo do tabuleiro para selecioná-la e em seguida, toque onde você deseja colocá-la.
+ Para remover uma peça, selecione a peça, em seguida, clique no botão excluir.
+ Para mover uma peça, selecione a peça e toque onde quer que ela vá.
+ Para alterar a cor, toque no botão com duas setas torcidas.
+ Quando estiver feito, clique na quadrícula. +

+
+ + \ No newline at end of file diff --git a/app/src/main/assets/help_setup-zh.html b/app/src/main/assets/help_setup-zh.html new file mode 100644 index 00000000..67508210 --- /dev/null +++ b/app/src/main/assets/help_setup-zh.html @@ -0,0 +1,22 @@ + + + + 国际象棋布局说明 + + + + +
+

国际象棋布局说明

+ +

设置一个棋盘的布局

+

从棋盘下方选择一个棋子, 将其放置在棋盘内你要放置的位置上.
+ 如果要去掉一个棋子, 则选择该棋子, 然后点击删除按钮.
+ 如果要改变一个棋子的位置, 则选择该棋子, 然后点选要放置的位置.
+ 如果要改变棋子的颜色,则在选择该棋子后点击有两个箭头的按钮.
+ 布局完成后, 点击CheckBox进行检查. +

+
+ + \ No newline at end of file diff --git a/app/src/main/assets/highres/select_light.png b/app/src/main/assets/highres/select_light.png index e0ec901f..9a5e44e3 100644 Binary files a/app/src/main/assets/highres/select_light.png and b/app/src/main/assets/highres/select_light.png differ diff --git a/app/src/main/java/jwtc/android/chess/ChessImageView.java b/app/src/main/java/jwtc/android/chess/ChessImageView.java index 19d7e8ad..40a12e8b 100644 --- a/app/src/main/java/jwtc/android/chess/ChessImageView.java +++ b/app/src/main/java/jwtc/android/chess/ChessImageView.java @@ -4,6 +4,7 @@ import jwtc.chess.board.ChessBoard; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; @@ -22,6 +23,8 @@ public class ChessImageView extends View { public static Bitmap[][] _arrPieceBitmaps = new Bitmap[2][6]; public static Bitmap _bmpBorder, _bmpSelect, _bmpSelectLight; public static Bitmap _bmpTile; + + private static String _sActivity; //public static SVG _svgTest = null; @@ -38,9 +41,6 @@ public class ChessImageView extends View { } private ImageCacheObject _ico; - - private start _start; - private options _options; public ChessImageView(Context context) { super(context); @@ -93,18 +93,28 @@ public void onDraw(Canvas canvas) { // first draw field background if(ico == null) Log.e("err", "err"); - + + SharedPreferences pref = getContext().getSharedPreferences("ChessPlayer", Context.MODE_PRIVATE); //_paint.setColor(Color.TRANSPARENT); if(hasFocus()){ _paint.setColor(0xffff9900); canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), _paint); } else { - _paint.setColor(ico._fieldColor == 0 ? _arrColorScheme[_colorScheme][0] : _arrColorScheme[_colorScheme][1]); - canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), _paint); - if(ico._selected){ - _paint.setColor(_arrColorScheme[_colorScheme][2]); - canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), _paint); - } + if (_colorScheme == 6){ // 6 is color picker + _paint.setColor(ico._fieldColor == 0 ? pref.getInt("color2", 0xffdddddd) : pref.getInt("color1", 0xffff0066)); + canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), _paint); + if (ico._selected){ + _paint.setColor(pref.getInt("color3", 0xcc00dddd) & 0xccffffff); + canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), _paint); + } + } else { + _paint.setColor(ico._fieldColor == 0 ? _arrColorScheme[_colorScheme][0] : _arrColorScheme[_colorScheme][1]); + canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), _paint); + if (ico._selected) { + _paint.setColor(_arrColorScheme[_colorScheme][2]); + canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), _paint); + } + } } if(ChessImageView._bmpTile != null){ @@ -128,11 +138,16 @@ public void onDraw(Canvas canvas) { bmp = _arrPieceBitmaps[ico._color][ico._piece]; -// quick fix to not access other activities -// if (_start.sActivity.equals("Play") && _options.is_bFlipBlack() && -// (_options._radioBlack.isChecked() ? ico._color == 1 : ico._color == 0)) { // flips black for human vs human without -// canvas.rotate(180, getWidth()/2, getHeight()/2); // autoflip on while in Play mode -// } + _sActivity = (start.get_ssActivity() == null) ? "" : start.get_ssActivity(); + + // todo if it's fine then will put back && statements + if (_sActivity.equals(getContext().getString(R.string.start_play))){ + if(options.is_sbFlipTopPieces()){ + if((options.is_sbPlayAsBlack() ? ico._color == 1 : ico._color == 0)) { // flips top pieces for human vs human without + canvas.rotate(180, getWidth() / 2, getHeight() / 2); // autoflip on in Play mode + } + } + } canvas.drawBitmap(bmp, _matrix, _paint); diff --git a/app/src/main/java/jwtc/android/chess/ChessPreferences.java b/app/src/main/java/jwtc/android/chess/ChessPreferences.java index 64c53b5e..14e95b59 100644 --- a/app/src/main/java/jwtc/android/chess/ChessPreferences.java +++ b/app/src/main/java/jwtc/android/chess/ChessPreferences.java @@ -53,7 +53,14 @@ public void onClick(DialogInterface dialog, int item) { _colorScheme = item; editor.putInt("ColorScheme", _colorScheme); - editor.commit(); + + if (_colorScheme == 6){ // Color Picker + Intent i = new Intent(); + i.setClass(getApplicationContext(), ColorPickerActivity.class); + startActivity(i); + } + + editor.commit(); dialog.dismiss(); } diff --git a/app/src/main/java/jwtc/android/chess/ChessView.java b/app/src/main/java/jwtc/android/chess/ChessView.java index d6fa0843..3c9ea3bf 100644 --- a/app/src/main/java/jwtc/android/chess/ChessView.java +++ b/app/src/main/java/jwtc/android/chess/ChessView.java @@ -46,7 +46,7 @@ public class ChessView extends UI { private ChessViewBase _view; private ChessActivity _parent; - private ImageButton _butPlay; + private ImageButton _butPlay, butQuickSoundOn, butQuickSoundOff; private ViewAnimator _viewAnimator; private ProgressBar _progressPlay; private TextView _tvClockMe, _tvClockOpp, _tvTitleMe, _tvTitleOpp, _tvAnnotate, _tvEngine, _tvAnnotateGuess; @@ -58,7 +58,7 @@ public class ChessView extends UI { private RelativeLayout _layoutHistory; private ArrayList _arrPGNView; private LayoutInflater _inflater; - private boolean _bAutoFlip, _bShowMoves, _bShowLastMove, _bPlayAsBlack, _bDidResume; + private boolean _bAutoFlip, _bShowMoves, _bShowLastMove, _bPlayAsBlack, _bDidResume, _bPlayVolume; private Timer _timer; private ViewSwitcher _switchTurnMe, _switchTurnOpp; private SeekBar _seekBar; @@ -100,9 +100,9 @@ public void handleMessage(Message msg) { } if (lTmp < 0) { lTmp = -lTmp; - chessView._tvClockMe.setTextColor(0xffff0000); + chessView._tvClockMe.setTextColor(0xffff0000); // red } else { - chessView._tvClockMe.setTextColor(0xffffffff); + chessView._tvClockMe.setTextColor(0xffffffff); // white } chessView._tvClockMe.setText(chessView.formatTime(lTmp)); @@ -148,11 +148,45 @@ public void onClick(View arg0) { } }; + OnLongClickListener olcl = new OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + handleClick(_view.getIndexOfButton(view)); + // Long press is ready for the future. + // For example: confirm move or to move pieces around and then go back to original position + return true; + } + }; + + butQuickSoundOn = (ImageButton) activity.findViewById(R.id.ButtonICSSoundOn); + butQuickSoundOff = (ImageButton) activity.findViewById(R.id.ButtonICSSoundOff); + if (butQuickSoundOn != null && butQuickSoundOff != null) { + butQuickSoundOn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + _bPlayVolume = false; + _parent.set_fVolume(0.0f); + butQuickSoundOn.setVisibility(View.GONE); + butQuickSoundOff.setVisibility(View.VISIBLE); + } + }); + + butQuickSoundOff.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + _bPlayVolume = true; + _parent.set_fVolume(1.0f); + butQuickSoundOff.setVisibility(View.GONE); + butQuickSoundOn.setVisibility(View.VISIBLE); + } + }); + } + _vScrollHistory = null; _hScrollHistory = null; _layoutHistory = null; - _view.init(ocl); + _view.init(ocl, olcl); //_vibrator = (Vibrator)activity.getSystemService(Context.VIBRATOR_SERVICE); _vibrator = null; @@ -876,8 +910,8 @@ public void play() { _progressPlay.setVisibility(View.GONE); _butPlay.setVisibility(View.VISIBLE); } else { - _progressPlay.setVisibility(View.VISIBLE); _butPlay.setVisibility(View.GONE); + _progressPlay.setVisibility(View.VISIBLE); } } @@ -1084,6 +1118,7 @@ public void OnPause(SharedPreferences.Editor editor) { editor.putBoolean("autoflipBoard", _bAutoFlip); editor.putBoolean("showMoves", _bShowMoves); editor.putBoolean("playAsBlack", _bPlayAsBlack); + editor.putBoolean("PlayVolume" , _bPlayVolume); editor.putInt("boardNum", _jni.getNumBoard()); if (_viewAnimator != null) { editor.putInt("animatorViewNumber", _viewAnimator.getDisplayedChild()); @@ -1147,19 +1182,36 @@ public void OnResume(SharedPreferences prefs) { _viewAnimator.setDisplayedChild(prefs.getInt("animatorViewNumber", 0) % _viewAnimator.getChildCount()); } - if (_bPlayAsBlack) { - // playing as black + _bPlayVolume = prefs.getBoolean("PlayVolume", true); + if (_bPlayVolume){ + butQuickSoundOff.setVisibility(View.GONE); + butQuickSoundOn.setVisibility(View.VISIBLE); + _parent.set_fVolume(1.0f); + } else { + butQuickSoundOn.setVisibility(View.GONE); + butQuickSoundOff.setVisibility(View.VISIBLE); + _parent.set_fVolume(0.0f); + } + if (_butPlay != null) { + if (_playMode == HUMAN_HUMAN) { + _butPlay.setVisibility(View.GONE); // turn off play button when human vs human + } else { + _butPlay.setVisibility(View.VISIBLE); + } + } + + if (_bPlayAsBlack) { + // player as black if (false == _view.getFlippedBoard()) { flipBoard(); } - if (_playMode == HUMAN_PC && _jni.getTurn() == ChessBoard.WHITE) { play(); } } else { - // playing as white + // player as white if (_view.getFlippedBoard()) { flipBoard(); } @@ -1168,13 +1220,6 @@ public void OnResume(SharedPreferences prefs) { } } - if (_butPlay != null) { - if (_playMode == HUMAN_HUMAN) { - _butPlay.setVisibility(View.GONE); // turn off play button when human vs human - } else { - _butPlay.setVisibility(View.VISIBLE); - } - } /////////////////////////////////////////////////////////////////// @@ -1493,6 +1538,12 @@ public void playNotification() { int move = _jni.getMyMove(); String sMove = _jni.getMyMoveToString(); + if (sMove.contains("x")){ + _parent.soundCapture(); + } else { + _parent.soundMove(); + } + if (sMove.length() > 3 && !sMove.equals("O-O-O")) { // assures space to separate which Rook and which Knight to move sMove = sMove.substring(0, 2) + " " + sMove.substring(2, sMove.length()); diff --git a/app/src/main/java/jwtc/android/chess/ChessViewBase.java b/app/src/main/java/jwtc/android/chess/ChessViewBase.java index 7133ce1a..e2a621f6 100644 --- a/app/src/main/java/jwtc/android/chess/ChessViewBase.java +++ b/app/src/main/java/jwtc/android/chess/ChessViewBase.java @@ -58,7 +58,7 @@ public ChessViewBase(Activity activity) { } - public void init(OnClickListener ocl){ + public void init(OnClickListener ocl, OnLongClickListener olcl){ Log.i("ChessViewBase", "init() called"); _flippedBoard = false; @@ -199,7 +199,7 @@ public void init(OnClickListener ocl){ ChessImageView._arrColorScheme[0][2] = 0xccf3ed4b; // blue - ChessImageView._arrColorScheme[1][0] = 0xff398bc6; + ChessImageView._arrColorScheme[1][0] = 0xff28628b; ChessImageView._arrColorScheme[1][1] = 0xff7dbdea; ChessImageView._arrColorScheme[1][2] = 0xcc9fdef3; @@ -214,7 +214,7 @@ public void init(OnClickListener ocl){ ChessImageView._arrColorScheme[3][2] = 0xccf3ed4b; // brown - ChessImageView._arrColorScheme[4][0] = 0xffb56617; + ChessImageView._arrColorScheme[4][0] = 0xff65390d; //4c2b0a ChessImageView._arrColorScheme[4][1] = 0xffb98b4f; ChessImageView._arrColorScheme[4][2] = 0xccf3ed4b; // 347733 @@ -226,6 +226,7 @@ public void init(OnClickListener ocl){ for(int i = 0; i < 64; i++){ _arrImages[i].setOnClickListener(ocl); //_arrImages[i].setFocusable(false); + _arrImages[i].setOnLongClickListener(olcl); _arrImgCache[i] = new ImageCacheObject(); } @@ -465,7 +466,7 @@ public boolean getFlippedBoard(){ public void flipBoard(){ resetImageCache(); - _flippedBoard = _flippedBoard ? false : true; + _flippedBoard = !_flippedBoard; setFlippedBoard(_flippedBoard); } diff --git a/app/src/main/java/jwtc/android/chess/ColorPickerActivity.java b/app/src/main/java/jwtc/android/chess/ColorPickerActivity.java new file mode 100644 index 00000000..e2759f14 --- /dev/null +++ b/app/src/main/java/jwtc/android/chess/ColorPickerActivity.java @@ -0,0 +1,119 @@ +package jwtc.android.chess; + +import android.content.Context; +import android.content.SharedPreferences; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import com.larswerkman.holocolorpicker.ColorPicker; +import com.larswerkman.holocolorpicker.SVBar; + +/** + * Created by Profile on 8/7/2016. + */ +public class ColorPickerActivity extends MyBaseActivity implements ColorPicker.OnColorChangedListener { + + private ColorPicker picker; + ImageView ImageViewlightColor, ImageViewdarkColor, ImageViewselectedColor; + ColorDrawable square1, square2, square3; + int choice; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.color_picker_dialog); + + choice = 1; + + ImageViewlightColor = (ImageView) findViewById(R.id.imageViewLightSquares); + ImageViewdarkColor = (ImageView) findViewById(R.id.imageViewDarkSquares); + ImageViewselectedColor = (ImageView) findViewById(R.id.imageViewSelected); + + square1 = (ColorDrawable) ImageViewlightColor.getBackground(); + square2 = (ColorDrawable) ImageViewdarkColor.getBackground(); + square3 = (ColorDrawable) ImageViewselectedColor.getBackground(); + + SharedPreferences pref = getSharedPreferences("ChessPlayer", Context.MODE_PRIVATE); + int squarecolor1 = pref.getInt("color1", 0xffff0066); + int squarecolor2 = pref.getInt("color2", 0xff006600); + int squarecolor3 = pref.getInt("color3", 0xcc99ccff); + + ImageViewlightColor.setBackgroundColor(squarecolor1); + ImageViewdarkColor.setBackgroundColor(squarecolor2); + ImageViewselectedColor.setBackgroundColor(squarecolor3); + ImageViewlightColor.setImageResource(R.drawable.select_square); + + + SVBar svBar = (SVBar) findViewById(R.id.svbar); + picker = (ColorPicker) findViewById(R.id.picker); + picker.addSVBar(svBar); + picker.setShowOldCenterColor(false); + picker.setColor(squarecolor1); + picker.setOnColorChangedListener(this); + + // put square select image - among the three squares + ImageViewlightColor.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + setSelected(ImageViewlightColor); + choice = 1; + picker.setColor(square1.getColor()); + return true; + } + }); + ImageViewdarkColor.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + setSelected(ImageViewdarkColor); + choice = 2; + picker.setColor(square2.getColor()); + return true; + } + }); + ImageViewselectedColor.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + setSelected(ImageViewselectedColor); + choice = 3; + picker.setColor(square3.getColor()); + return true; + } + }); + + + } + + private void setSelected(ImageView selected) { + ImageViewlightColor.setImageResource(0); + ImageViewdarkColor.setImageResource(0); + ImageViewselectedColor.setImageResource(0); + selected.setImageResource(R.drawable.select_square); + } + + @Override + public void onColorChanged(int color) { + SharedPreferences pref = getSharedPreferences("ChessPlayer", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = pref.edit(); + + switch (choice) { + case 1: + ImageViewlightColor.setBackgroundColor(color); + editor.putInt("color1", color); + break; + case 2: + ImageViewdarkColor.setBackgroundColor(color); + editor.putInt("color2", color); + break; + case 3: + ImageViewselectedColor.setBackgroundColor(color); + editor.putInt("color3", color); + break; + } + + editor.apply(); + } +} diff --git a/app/src/main/java/jwtc/android/chess/Donate.java b/app/src/main/java/jwtc/android/chess/Donate.java deleted file mode 100644 index eb9382e8..00000000 --- a/app/src/main/java/jwtc/android/chess/Donate.java +++ /dev/null @@ -1,172 +0,0 @@ -package jwtc.android.chess; - - -import android.app.AlertDialog; -import android.app.PendingIntent; -import android.content.ComponentName; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.ServiceConnection; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.os.IBinder; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.RadioButton; -import android.widget.RadioGroup; -import android.widget.Spinner; - -import com.android.vending.billing.IInAppBillingService; -import com.google.android.gms.analytics.HitBuilders; - -import org.json.JSONObject; - -import java.math.BigInteger; -import java.security.SecureRandom; - -public class Donate extends MyBaseActivity { - - public static final String TAG = "Donate"; - private String _payLoad; - - IInAppBillingService mService; - - ServiceConnection mServiceConn = new ServiceConnection() { - @Override - public void onServiceDisconnected(ComponentName name) { - mService = null; - } - - @Override - public void onServiceConnected(ComponentName name, - IBinder service) { - mService = IInAppBillingService.Stub.asInterface(service); - } - }; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.donate); - - this.makeActionOverflowMenuShown(); - - SecureRandom sr = new SecureRandom(); - _payLoad = new BigInteger(130, sr).toString(32); - Log.i(TAG, "Payload " + _payLoad); - - Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); - serviceIntent.setPackage("com.android.vending"); - bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); - - final RadioGroup group = (RadioGroup)findViewById(R.id.RadioGroupDonate); - RadioButton button; - - final String[] arrDonate = getResources().getStringArray(R.array.donate_amount); - - for(int i = 0; i < arrDonate.length; i++) { - button = new RadioButton(this); - button.setText(arrDonate[i]); - group.addView(button); - if(i == 2){ - button.setChecked(true); - } - } - - Button butDonate = (Button)findViewById(R.id.ButtonDonate); - butDonate.setOnClickListener(new View.OnClickListener() { - public void onClick(View arg0) { - - int index = 0; - for(int i = 0; i < arrDonate.length; i++) { - if(((RadioButton)group.getChildAt(i)).isChecked()){ - index = i; - } - } - - String[] arrSKU = new String[]{"donate1euro", "donate2euro", "donate5euro", "donate10euro", "donate20euro"}; - try { - - Log.i(TAG, "Start buy intent with SKU " + arrSKU[index]); - - Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), arrSKU[index], "inapp", _payLoad); - PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT"); - - startIntentSenderForResult(pendingIntent.getIntentSender(), - 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), - Integer.valueOf(0)); - - } catch (Exception e) { - doToast(getString(R.string.donate_intent)); - e.printStackTrace(); - } - } - }); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == 1001) { - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setPositiveButton(R.string.alert_ok, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int item) { - dialog.dismiss(); - }}); - - int responseCode = data.getIntExtra("RESPONSE_CODE", 0); - String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA"); - String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE"); - - Log.i(TAG, "response code " + responseCode); - - if (resultCode == RESULT_OK) { - builder.setTitle(getString(R.string.donate_success)); - - SharedPreferences mPrefs = getApplicationContext().getSharedPreferences("ChessPlayer", Context.MODE_PRIVATE); - SharedPreferences.Editor editor = mPrefs.edit(); - editor.putBoolean("bHeart", false); // turn heart animation off - editor.putBoolean("RESTART", true); // restart start menu - editor.apply(); - - try { - JSONObject jo = new JSONObject(purchaseData); - String token = jo.getString("purchaseToken"); - String payLoad = jo.getString("developerPayload"); - - if(_payLoad.equals(payLoad)) { - - int response = mService.consumePurchase(3, getPackageName(), token); - Log.i(TAG, "consume response " + response); - } else { - Log.w(TAG, "payLoads do not match " + _payLoad + " != " + payLoad); - } - } - catch (Exception e) { - //alert("Failed to parse purchase data."); - e.printStackTrace(); - } - } else { - builder.setTitle(getString(R.string.donate_error)); - SharedPreferences mPrefs = getApplicationContext().getSharedPreferences("ChessPlayer", Context.MODE_PRIVATE); - SharedPreferences.Editor editor = mPrefs.edit(); - editor.putBoolean("bHeart", false); - } - AlertDialog alert = builder.create(); - alert.show(); - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - if (mService != null) { - unbindService(mServiceConn); - } - } - - -} diff --git a/app/src/main/java/jwtc/android/chess/HtmlActivity.java b/app/src/main/java/jwtc/android/chess/HtmlActivity.java index fee2b98c..a2194655 100644 --- a/app/src/main/java/jwtc/android/chess/HtmlActivity.java +++ b/app/src/main/java/jwtc/android/chess/HtmlActivity.java @@ -30,19 +30,23 @@ public void onCreate(Bundle savedInstanceState) { this.makeActionOverflowMenuShown(); // html assets localization - if (Locale.getDefault().getLanguage().equals("it")) { - _lang = "it"; - } else if (Locale.getDefault().getLanguage().equals("es")) { + if (Locale.getDefault().getLanguage().equals("es")) { _lang = "es"; + } else if (Locale.getDefault().getLanguage().equals("it")) { + _lang = "it"; + } else if (Locale.getDefault().getLanguage().equals("pt")) { + _lang = "pt"; } else if (Locale.getDefault().getLanguage().equals("ru")) { _lang = "ru"; + } else if (Locale.getDefault().getLanguage().equals("zh")) { + _lang = "zh"; } else { _lang = "en"; } _webview = (WebView) findViewById(R.id.WebViewHelp); _TVversionName = (TextView) findViewById(R.id.textVersionName); - _TVversionName.setText("Version: " + BuildConfig.VERSION_NAME); + _TVversionName.setText(getString(R.string.version_number, BuildConfig.VERSION_NAME)); // "Version: " + BuildConfig.VERSION_NAME } diff --git a/app/src/main/java/jwtc/android/chess/MyBaseActivity.java b/app/src/main/java/jwtc/android/chess/MyBaseActivity.java index c69e05d1..f4340189 100644 --- a/app/src/main/java/jwtc/android/chess/MyBaseActivity.java +++ b/app/src/main/java/jwtc/android/chess/MyBaseActivity.java @@ -3,6 +3,8 @@ import android.app.Activity; import android.content.SharedPreferences; import android.content.res.Configuration; +import android.media.AudioManager; +import android.media.SoundPool; import android.os.Bundle; import android.os.PowerManager; import android.preference.PreferenceActivity; @@ -25,6 +27,10 @@ public class MyBaseActivity extends android.app.Activity{ protected Tracker _tracker; public static final String TAG = "MyBaseActivity"; private long _onResumeTimeMillies = 0; + public SoundPool spSound; + public int _itickTock, _ihorseNeigh, _ismallNeigh, _ihorseSnort, _ihorseRunAway, + _imove, _icapture; + public float _fVolume = 1.0f; @Override public void onCreate(Bundle savedInstanceState) { @@ -38,6 +44,15 @@ public void onCreate(Bundle savedInstanceState) { _tracker = application .getDefaultTracker(); // _tracker.setScreenName(TAG); // _tracker.send(new HitBuilders.ScreenViewBuilder().build()); + spSound = new SoundPool(7, AudioManager.STREAM_MUSIC, 0); + _itickTock = spSound.load(this, R.raw.ticktock, 1); + _ihorseNeigh = spSound.load(this, R.raw.horseneigh, 1); + _ismallNeigh = spSound.load(this, R.raw.smallneigh, 2); + _ihorseSnort = spSound.load(this, R.raw.horsesnort, 1); + _ihorseRunAway = spSound.load(this, R.raw.horserunaway, 1); + _imove = spSound.load(this, R.raw.move, 1); + _icapture = spSound.load(this, R.raw.capture, 1); + } @Override @@ -148,4 +163,40 @@ public void trackEvent(String category, String action, String label){ .setLabel(label) .build()); } + + public void set_fVolume(float vol){ + _fVolume = vol; + } + + public float get_fVolume(){ + return _fVolume; + } + + public void soundTickTock(){ + spSound.play(_itickTock, _fVolume, _fVolume, 1, 0, 1); + } + + public void soundHorseNeigh(){ + spSound.play(_ihorseNeigh, _fVolume, _fVolume, 1, 0, 1); + } + + public void soundSmallNeigh(){ + spSound.play(_ismallNeigh, _fVolume, _fVolume, 2, 0, 1); + } + + public void soundHorseSnort(){ + spSound.play(_ihorseSnort, _fVolume, _fVolume, 1, 0, 1); + } + + public void soundHorseRunAway(){ + spSound.play(_ihorseRunAway, _fVolume, _fVolume, 1, 0, 1); + } + + public void soundMove(){ + spSound.play(_imove, _fVolume, _fVolume, 1, 0, 1); + } + + public void soundCapture(){ + spSound.play(_icapture, _fVolume, _fVolume, 1, 0 ,1); + } } diff --git a/app/src/main/java/jwtc/android/chess/UI.java b/app/src/main/java/jwtc/android/chess/UI.java index 0919aacf..1a47e5c6 100644 --- a/app/src/main/java/jwtc/android/chess/UI.java +++ b/app/src/main/java/jwtc/android/chess/UI.java @@ -26,7 +26,7 @@ public class UI extends GameControl { // @Override public void handleMessage(Message msg) { - Log.i(TAG, "searchThreadUpdateHandler ->" + msg.what); + //Log.i(TAG, "searchThreadUpdateHandler ->" + msg.what); // do move if(msg.what == MSG_MOVE){ diff --git a/app/src/main/java/jwtc/android/chess/ics/CustomCommands.java b/app/src/main/java/jwtc/android/chess/ics/CustomCommands.java index 499d2106..65a29c1b 100644 --- a/app/src/main/java/jwtc/android/chess/ics/CustomCommands.java +++ b/app/src/main/java/jwtc/android/chess/ics/CustomCommands.java @@ -23,8 +23,6 @@ public class CustomCommands extends MyBaseActivity implements OnItemClickListene public static final String TAG = "CustomCommands"; public static final String DEFAULT_COMMANDS = "[" + - "\"obs /b\"," + - "\"obs /s\"," + "\"tell relay listgames\"," + "\"tell puzzlebot getmate\"," + "\"tell puzzlebot gettactics\"," + diff --git a/app/src/main/java/jwtc/android/chess/ics/ICSChessView.java b/app/src/main/java/jwtc/android/chess/ics/ICSChessView.java index 726cb795..ee33836a 100644 --- a/app/src/main/java/jwtc/android/chess/ics/ICSChessView.java +++ b/app/src/main/java/jwtc/android/chess/ics/ICSChessView.java @@ -14,6 +14,7 @@ import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; +import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -42,7 +43,7 @@ public class ICSChessView extends ChessViewBase { private String _opponent, _whitePlayer, _blackPlayer, _playerMe; private int m_iFrom, _iWhiteRemaining, _iBlackRemaining, _iGameNum, _iMe, _iTurn, m_iTo; private ICSClient _parent; - private boolean _bHandleClick, _bOngoingGame, _bConfirmMove, _bCanPreMove, _bfirst; + private boolean _bHandleClick, _bOngoingGame, _bConfirmMove, _bConfirmMoveLongClick, _bCanPreMove, _bfirst; private Timer _timer; private static final int MSG_TOP_TIME = 1, MSG_BOTTOM_TIME = 2; public static final int VIEW_NONE = 0, VIEW_PLAY = 1, VIEW_WATCH = 2, VIEW_EXAMINE = 3, VIEW_PUZZLE = 4, VIEW_ENDGAME = 5; @@ -57,17 +58,22 @@ public void handleMessage(Message msg) { if(_viewMode == VIEW_EXAMINE || _viewMode == VIEW_NONE){ // No ticks during EXAMINE mode or IDLE Mode return; } + int countDown = msg.getData().getInt("ticks"); + if (msg.what == MSG_TOP_TIME) { - _tvClockTop.setText(parseTime(msg.getData().getInt("ticks"))); + _tvClockTop.setText(parseTime(countDown)); } else { - _tvClockBottom.setText(parseTime(msg.getData().getInt("ticks"))); + _tvClockBottom.setText(parseTime(countDown)); + _tvClockBottom.setBackgroundColor(Color.TRANSPARENT); } if((msg.what == MSG_TOP_TIME && (_tvPlayerTop.getText()).equals(_playerMe)) // Time Low Warning || (msg.what == MSG_BOTTOM_TIME && (_tvPlayerBottom.getText()).equals(_playerMe))){ - if (_parent.is_bTimeWarning() && (msg.getData().getInt("ticks") <= _parent.get_TimeWarning()) && (msg.getData().getInt("ticks") > 0)) { + if (_parent.is_bTimeWarning() && (countDown <= _parent.get_TimeWarning()) && (msg.getData().getInt("ticks") > 0)) { try { _parent.soundTickTock(); + if (countDown%2 == 0){ _tvClockBottom.setBackgroundColor(Color.RED); + } else {_tvClockBottom.setBackgroundColor(Color.BLACK);} } catch (Exception e) { Log.e(TAG, "sound process died", e); } @@ -95,6 +101,7 @@ public ICSChessView(Activity activity) { _iTurn = BoardConstants.WHITE; _iWhiteRemaining = _iBlackRemaining = 0; _bConfirmMove = false; + _bConfirmMoveLongClick = false; _tvPlayerTop = (TextView) _activity.findViewById(R.id.TextViewTop); _tvPlayerBottom = (TextView) _activity.findViewById(R.id.TextViewBottom); @@ -121,6 +128,7 @@ public void onClick(View arg0) { paint(); // switch back _viewSwitchConfirm.setDisplayedChild(0); + if (_bConfirmMoveLongClick){_bConfirmMoveLongClick = false;} } }); _butConfirmMove = (Button) _activity.findViewById(R.id.ButtonConfirmMove); @@ -219,7 +227,19 @@ public void onClick(View arg0) { } }; - init(ocl); + OnLongClickListener olcl = new OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + + //Log.d(TAG, "OnLongClickListener m_iFrom ->" + m_iFrom + " m_iTo ->" + m_iTo); + if (m_iFrom == -1){return false;} // return false will let OnClickListener take care of it + setConfirmMoveLongClick(true); + handleClick(getFieldIndex(getIndexOfButton(view))); + return true; + } + }; + + init(ocl, olcl); } public void init() { @@ -252,16 +272,16 @@ public void updateViewMode() { case VIEW_PLAY: switch(_parent.get_gameStartSound()){ case 0: break; - case 1: _parent.soundChessPiecesFall(); + case 1: _parent.soundHorseNeigh(); _parent.vibration(INCREASE); break; - case 2: _parent.soundChessPiecesFall(); + case 2: _parent.soundHorseNeigh(); break; case 3: _parent.vibration(INCREASE); break; default: Log.e(TAG, "get_gameStartSound error"); } - _parent.bringAPPtoFront(); + _parent.notificationAPP(); Log.i(TAG, "Play"); break; case VIEW_WATCH: @@ -303,6 +323,10 @@ public void setConfirmMove(boolean b) { _bConfirmMove = b; } + public void setConfirmMoveLongClick(boolean b){ + _bConfirmMoveLongClick = b; + } + public void stopGame() { Log.i("stopGame", "========="); _bOngoingGame = false; @@ -494,7 +518,7 @@ public synchronized boolean parseGame(String line, String sMe) { Log.i("ICSChessView", "Sound notification!"); _parent.soundNotification(); } - } else if (false == _bConfirmMove) { + } else if (!_bConfirmMove || !_bConfirmMoveLongClick) { _bCanPreMove = true; } } @@ -510,6 +534,13 @@ public synchronized boolean parseGame(String line, String sMe) { String sMove = st.nextToken(); // machine notation move String _sTimePerMove = st.nextToken(); // time it took to make a move String sLastMoveDisplay = st.nextToken(); // algebraic notation move + if(sLastMoveDisplay.contains("+")){ + _parent.soundSmallNeigh(); + } else if(sLastMoveDisplay.contains("x")){ + _parent.soundCapture(); + } else { + _parent.soundMove(); + } int iFlipBoardOrientation = Integer.parseInt(st.nextToken()); //0 = White on Bottom / 1 = Black on bottom if (_flippedBoard) { @@ -600,12 +631,15 @@ private void handleClick(int index) { // _board != null Log.i("handleClick", "Clicked " + index + " handling " + _bHandleClick); + // _bHandleClick helps to determine if the click should be handled (will not if screen loading, etc.) if (_bHandleClick) { m_iTo = -1; if(_jni.pieceAt(_jni.getTurn(), index) != BoardConstants.FIELD){ - m_iFrom = -1;} // This allows user to switch to another piece easily + m_iFrom = -1; // If another piece is selected reset origin. + } + // if a piece is not selected, determine if it should be and select it for movement if (m_iFrom == -1) { // when a pre move is possible, check if the selected position is a field if (_bCanPreMove) { @@ -618,6 +652,8 @@ else if (_jni.pieceAt(_jni.getTurn(), index) == BoardConstants.FIELD) { return; } + if (_bConfirmMoveLongClick){setConfirmMoveLongClick(false);} + m_iFrom = index; paint(); } else { @@ -769,7 +805,7 @@ private void continueMove(int index, boolean isValid, int move) { _bHandleClick = false; // if confirm and is playing, first let user confirm - if (_bConfirmMove && isUserPlaying()) { + if (_bConfirmMove || _bConfirmMoveLongClick && isUserPlaying()) { _tvLastMove.setText(""); // @@ -778,6 +814,7 @@ private void continueMove(int index, boolean isValid, int move) { _jni.move(move); paint(); + if(_bConfirmMoveLongClick){setConfirmMoveLongClick(false);} } else { _tvLastMove.setText("..."); @@ -797,9 +834,10 @@ private void continueMove(int index, boolean isValid, int move) { m_iFrom = -1; } } else { - m_iFrom = -1; - // show that move is invalid + // invalid move + m_iTo = -1; // the destination is reset _tvLastMove.setText("invalid"); + if(_bConfirmMoveLongClick){setConfirmMoveLongClick(false);} } } } \ No newline at end of file diff --git a/app/src/main/java/jwtc/android/chess/ics/ICSClient.java b/app/src/main/java/jwtc/android/chess/ics/ICSClient.java index e6011c87..5efe3606 100644 --- a/app/src/main/java/jwtc/android/chess/ics/ICSClient.java +++ b/app/src/main/java/jwtc/android/chess/ics/ICSClient.java @@ -1,13 +1,15 @@ package jwtc.android.chess.ics; import android.Manifest; -import android.app.ActivityManager; import android.app.AlertDialog; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; +import android.graphics.Color; import android.graphics.Typeface; -import android.media.MediaPlayer; import android.media.Ringtone; import android.media.RingtoneManager; import android.net.Uri; @@ -57,7 +59,7 @@ public class ICSClient extends MyBaseActivity implements OnItemClickListener { _sFile, _FEN = "", _whiteRating, _blackRating, _whiteHandle, _blackHandle; private int _port, _serverType, _TimeWarning, _gameStartSound, _iConsoleCharacterSize; private boolean _bIsGuest, _bInICS, _bAutoSought, _bTimeWarning, _bEndGameDialog, _bShowClockPGN, - _gameStartFront, _bConsoleText; + _notifyON, _bConsoleText, _bICSVolume, _ICSNotifyLifeCycle; private Button _butLogin; private TextView _tvHeader, _tvConsole, _tvPlayConsole; // public ICSChatDlg _dlgChat; @@ -148,8 +150,7 @@ public class ICSClient extends MyBaseActivity implements OnItemClickListener { protected static int[] whiteClk = new int[200]; // PGN time clock protected static int[] blackClk = new int[200]; - - MediaPlayer tickTock, chessPiecesFall; + private ImageButton butQuickSoundOn, butQuickSoundOff; static class InnerThreadHandler extends Handler { WeakReference _client; @@ -222,6 +223,7 @@ public void handleMessage(Message msg) { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Log.i(TAG, "onCreate"); int configOrientation = this.getResources().getConfiguration().orientation; if(configOrientation == Configuration.ORIENTATION_LANDSCAPE) { @@ -304,9 +306,6 @@ public void onCreate(Bundle savedInstanceState) { _scrollConsole = (ScrollView) findViewById(R.id.ScrollICSConsole); _scrollPlayConsole = (ScrollView) findViewById(R.id.ScrollPlayConsole); - tickTock = MediaPlayer.create(this, R.raw.ticktock); - chessPiecesFall = MediaPlayer.create(this, R.raw.chesspiecesfall); - /* ImageButton butClose = (ImageButton)findViewById(R.id.ButtonBoardClose); butClose.setOnClickListener(new OnClickListener() { @@ -337,6 +336,29 @@ public void onClick(View arg0) { }); } + butQuickSoundOn = (ImageButton) findViewById(R.id.ButtonICSSoundOn); + butQuickSoundOff = (ImageButton) findViewById(R.id.ButtonICSSoundOff); + if (butQuickSoundOn != null && butQuickSoundOff != null) { + butQuickSoundOn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + _bICSVolume = false; + set_fVolume(0.0f); + butQuickSoundOn.setVisibility(View.GONE); + butQuickSoundOff.setVisibility(View.VISIBLE); + } + }); + butQuickSoundOff.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + _bICSVolume = true; + set_fVolume(1.0f); + butQuickSoundOff.setVisibility(View.GONE); + butQuickSoundOn.setVisibility(View.VISIBLE); + } + }); + } + ImageButton butCloseConsole = (ImageButton) findViewById(R.id.ICSCloseConsole); if (butCloseConsole != null) { butCloseConsole.setOnClickListener(new OnClickListener() { @@ -537,6 +559,8 @@ public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, R.string.ics_menu_stored, Menu.NONE, R.string.ics_menu_stored); menu.add(Menu.NONE, R.string.ics_menu_seek, Menu.NONE, R.string.ics_menu_seek); menu.add(Menu.NONE, R.string.ics_menu_players, Menu.NONE, R.string.ics_menu_players); + menu.add(Menu.NONE, R.string.ics_menu_top_blitz, Menu.NONE, R.string.ics_menu_top_blitz); + menu.add(Menu.NONE, R.string.ics_menu_top_standard, Menu.NONE, R.string.ics_menu_top_standard); menu.add(Menu.NONE, R.string.ics_menu_stop_puzzle, Menu.NONE, R.string.ics_menu_stop_puzzle); menu.add(Menu.NONE, R.string.ics_menu_console, Menu.NONE, R.string.ics_menu_console); @@ -614,8 +638,6 @@ public boolean onPrepareOptionsMenu(Menu menu) { } } - invalidateOptionsMenu(); // update menu - return super.onPrepareOptionsMenu(menu); } @@ -688,6 +710,12 @@ public boolean onOptionsItemSelected(MenuItem item) { sendString("who a"); switchToLoadingView(); return true; + case R.string.ics_menu_top_blitz: + sendString("obs /b"); + return true; + case R.string.ics_menu_top_standard: + sendString("obs /s"); + return true; case R.string.ics_menu_quit: finish(); return true; @@ -1615,12 +1643,14 @@ else if (line.contains("} 1/2-1/2")){ // draw } gameToast(String.format(getString(R.string.ics_game_over_format), text), true); + soundHorseSnort(); get_view().setViewMode(ICSChessView.VIEW_NONE); } public void copyToClipBoard() { try { + @SuppressWarnings("deprecation") ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); cm.setText(PGN.toString()); doToast(getString(R.string.ics_copy_clipboard)); @@ -1745,6 +1775,9 @@ public void globalToast(final String text) { @Override protected void onResume() { + Log.i(TAG, "onResume"); + + invalidateOptionsMenu(); // update OptionsMenu SharedPreferences prefs = this.getPrefs(); @@ -1768,9 +1801,25 @@ protected void onResume() { _bShowClockPGN = prefs.getBoolean("ICSClockPGN", true); + _bICSVolume = prefs.getBoolean("ICSVolume", true); + if (_bICSVolume){ + butQuickSoundOff.setVisibility(View.GONE); + butQuickSoundOn.setVisibility(View.VISIBLE); + set_fVolume(1.0f); + } else { + butQuickSoundOn.setVisibility(View.GONE); + butQuickSoundOff.setVisibility(View.VISIBLE); + set_fVolume(0.0f); + } + + // get rid of notification for tap to play + NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.cancel(0); // 0 is notification id + _ICSNotifyLifeCycle = false; + _gameStartSound = Integer.parseInt(prefs.getString("ICSGameStartSound", "1")); - _gameStartFront = prefs.getBoolean("ICSGameStartBringToFront", true); + _notifyON = prefs.getBoolean("ICSGameStartBringToFront", true); ///////////////////////////////////////////// _adapterHandles = new ArrayAdapter(this, android.R.layout.simple_list_item_1); @@ -1914,27 +1963,34 @@ public boolean isConnected() { return true; } - public void bringAPPtoFront(){ + public void notificationAPP(){ - if (_gameStartFront) { + if (_notifyON && _ICSNotifyLifeCycle) { - ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); - List tasklist = am.getRunningTasks(10); // Number of tasks you want to get + Intent intent = new Intent(this, ICSClient.class); + PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); + + NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); + + Notification.Builder builder = new Notification.Builder(this); + builder.setContentIntent(pendingIntent) + .setSmallIcon(R.drawable.chess) + .setWhen(System.currentTimeMillis()) + .setAutoCancel(true) + .setLights(Color.CYAN, 100, 100) + .setContentTitle(getString(R.string.ics_notification_title)) + .setContentText(getString(R.string.ics_notification_text)); + + Notification notification = builder.getNotification(); + + notificationManager.notify(0, notification); - if (!tasklist.isEmpty()) { - int nSize = tasklist.size(); - for (int i = 0; i < nSize; i++) { - ActivityManager.RunningTaskInfo taskinfo = tasklist.get(i); - if (taskinfo.topActivity.getPackageName().equals("jwtc.android.chess")) { - am.moveTaskToFront(taskinfo.id, 2); - } - } - } } } @Override protected void onPause() { + Log.i(TAG, "onPause"); // lock screen orientation? //setRequestedOrientation(this.getResources().getConfiguration().orientation); @@ -1958,33 +2014,40 @@ protected void onPause() { editor.putString("ics_handle_array", jArray.toString()); editor.putString("ics_password_array", jArrayPasswords.toString()); + editor.putBoolean("ICSVolume" , _bICSVolume); + editor.commit(); + _ICSNotifyLifeCycle = true; + super.onPause(); } + @Override + protected void onRestart(){ + Log.i(TAG, "onRestart"); + super.onRestart(); + } + @Override protected void onStart() { - Log.i("ICSClient", "onStart"); + Log.i(TAG, "onStart"); super.onStart(); } @Override protected void onStop() { - Log.i("ICSClient", "onStop"); + Log.i(TAG, "onStop"); super.onStop(); } @Override protected void onDestroy() { - Log.i("ICSClient", "onDestroy"); + Log.i(TAG, "onDestroy"); _workerTelnet = null; disconnect(); - tickTock.release(); // clear MediaPlayer resources - chessPiecesFall.release(); - super.onDestroy(); } @@ -2024,7 +2087,7 @@ public void cancelDateTimer(){ } } - Handler dateHandler = new Handler(){ + Handler dateHandler = new Handler(){ // todo static or leaks may occur? use WeakReference as in 153 @Override public void handleMessage(Message msg) { sendString("date"); @@ -2051,15 +2114,16 @@ public void sendString(String s) { } if (_socket == null || _socket.sendString(s + "\n") == false) { + // ----------- Loss connection -------------- // switch (get_gameStartSound()) { case 0: break; case 1: - soundChessPiecesFall(); + soundHorseRunAway(); vibration(DECREASE); break; case 2: - soundChessPiecesFall(); + soundHorseRunAway(); break; case 3: vibration(DECREASE); @@ -2067,14 +2131,12 @@ public void sendString(String s) { default: Log.e(TAG, "get_gameStartSound error"); } - //gameToast(getString(R.string.ics_disconnected), false); - try { - bringAPPtoFront(); + notificationAPP(); cancelDateTimer(); new AlertDialog.Builder(ICSClient.this) .setTitle(R.string.title_error) - .setMessage("Connection to server is broken.") + .setMessage(getString(R.string.ics_lost_connection)) .setPositiveButton(getString(R.string.alert_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -2246,18 +2308,6 @@ public void soundNotification() { } } - public void soundTickTock(){ - tickTock.start(); - } - - public void soundChessPiecesFall(){ - try { - chessPiecesFall.start(); - } catch(Exception ex){ - Log.e(TAG, ex.toString()); - } - } - public void vibration(int seq){ try { int v1, v2; diff --git a/app/src/main/java/jwtc/android/chess/ics/ICSGameOverDlg.java b/app/src/main/java/jwtc/android/chess/ics/ICSGameOverDlg.java index 88889c5e..ee14ba3c 100644 --- a/app/src/main/java/jwtc/android/chess/ics/ICSGameOverDlg.java +++ b/app/src/main/java/jwtc/android/chess/ics/ICSGameOverDlg.java @@ -33,7 +33,7 @@ public ICSGameOverDlg(Context context) { setContentView(R.layout.ics_over); - setTitle("Game Over"); + setTitle(R.string.ics_game_over); _butExit = (Button)findViewById(R.id.ButtonGameExit); _butExit.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/jwtc/android/chess/ics/TelnetSocket.java b/app/src/main/java/jwtc/android/chess/ics/TelnetSocket.java index 99a55a59..fb2b4843 100644 --- a/app/src/main/java/jwtc/android/chess/ics/TelnetSocket.java +++ b/app/src/main/java/jwtc/android/chess/ics/TelnetSocket.java @@ -2,12 +2,16 @@ import java.net.*; import java.io.*; +import java.util.concurrent.ExecutionException; +import android.os.AsyncTask; import android.util.Log; //public class TelnetSocket extends Socket public class TelnetSocket extends jwtc.android.timeseal.TimesealingSocket { + private static final String TAG = "TelnetSocket"; + protected static byte[] _inBytes; protected static byte[] _outBytes; @@ -35,7 +39,7 @@ public String readString(){ } } } catch (Exception e) { - Log.e("TelnetSocket", "readString " + e.toString()); + Log.e(TAG, "readString " + e.toString()); return null; } return data; @@ -46,19 +50,46 @@ public boolean sendString (String data){ for (int i = 0; i < data.length(); i++) { _outBytes[i] = (byte)data.charAt(i); + //Log.d(TAG, "_outBytes ->" + data.charAt(i) + " i->" + i); } - try - { - getOutputStream().write(_outBytes, 0, data.length()); - getOutputStream().flush(); - //Log.i("TelnetSocket", "sendString: " + data); - return true; - } - catch (Exception e) - { - Log.e("TelnetSocket", "sendString: " + e.toString()); - return false; + + boolean result = false; + ATsendString asObj = new ATsendString(); + try { + result = asObj.execute(data).get(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); } + return result; } + + private class ATsendString extends AsyncTask + { + + @Override + protected Boolean doInBackground(String... strings) { + + try + { + getOutputStream().write(_outBytes, 0, strings[0].length()); + getOutputStream().flush(); + //Log.i("TelnetSocket", "sendString: " + data); + return true; + } + catch (Exception e) + { + Log.e("TelnetSocket", "sendString: " + e.toString()); + return false; + } + + } + + @Override + protected void onPostExecute(Boolean aBoolean) { + super.onPostExecute(aBoolean); + } + } } diff --git a/app/src/main/java/jwtc/android/chess/main.java b/app/src/main/java/jwtc/android/chess/main.java index 460b790d..185bf904 100644 --- a/app/src/main/java/jwtc/android/chess/main.java +++ b/app/src/main/java/jwtc/android/chess/main.java @@ -3,6 +3,7 @@ import jwtc.chess.*; import android.app.AlertDialog; +import android.content.Context; import android.media.Ringtone; import android.media.RingtoneManager; import android.net.Uri; @@ -29,6 +30,7 @@ import android.view.GestureDetector.OnGestureListener; import android.view.GestureDetector; +import android.widget.TextView; import com.google.android.gms.analytics.HitBuilders; @@ -213,11 +215,17 @@ public void showSubViewMenu() { AlertDialog.Builder builder = new AlertDialog.Builder(main.this); builder.setTitle(getString(R.string.menu_subview_title)); + final TextView tv_engine = (TextView) findViewById(R.id.TextViewEngine); builder.setItems(_itemsMenu, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { dialog.dismiss(); _chessView.toggleControl(item); + + // show engine name + SharedPreferences pref = getBaseContext().getSharedPreferences("ChessPlayer", Context.MODE_PRIVATE); + String engName = pref.getString("UCIEngine", "Jeroen"); + tv_engine.setText(_itemsMenu[0] + ": " + engName); } }); AlertDialog alert = builder.create(); @@ -622,13 +630,13 @@ private void loadGame() { public void saveGame() { String sEvent = _chessView.getPGNHeadProperty("Event"); if (sEvent == null) - sEvent = "event ?"; + sEvent = getString(R.string.savegame_event_question); String sWhite = _chessView.getWhite(); if (sWhite == null) - sWhite = "white ?"; + sWhite = getString(R.string.savegame_white_question); String sBlack = _chessView.getBlack(); if (sBlack == null) - sBlack = "black ?"; + sBlack = getString(R.string.savegame_black_question); Date dd = _chessView.getDate(); if (dd == null) diff --git a/app/src/main/java/jwtc/android/chess/options.java b/app/src/main/java/jwtc/android/chess/options.java index 4b9b7ea5..a2498f9d 100644 --- a/app/src/main/java/jwtc/android/chess/options.java +++ b/app/src/main/java/jwtc/android/chess/options.java @@ -28,11 +28,10 @@ public class options extends MyBaseActivity { private CheckBox _checkAutoFlip, _checkMoves, _check960; private Spinner _spinLevel, _spinLevelPly; private Button _butCancel, _butOk; - private RadioButton _radioTime, _radioPly, _radioWhite, _radioAndroid, _radioHuman; - public static RadioButton _radioBlack; // used to allow other classes to know if black is on bottom + private RadioButton _radioTime, _radioPly, _radioWhite, _radioBlack, _radioAndroid, _radioHuman; private TableRow _tableRowOption960; - private static boolean _bFlipBlack; + private static boolean _sbFlipTopPieces, _sbPlayAsBlack; @Override public void onCreate(Bundle savedInstanceState) { @@ -47,14 +46,14 @@ public void onCreate(Bundle savedInstanceState) { _radioAndroid = (RadioButton) findViewById(R.id.rbAndroid); _radioAndroid.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - _radioHuman.setChecked(isChecked ? false : true); + _radioHuman.setChecked(!isChecked); _checkAutoFlip.setEnabled(false); } }); _radioHuman = (RadioButton) findViewById(R.id.rbHuman); _radioHuman.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - _radioAndroid.setChecked(_radioHuman.isChecked() ? false : true); + _radioAndroid.setChecked(!_radioHuman.isChecked()); _checkAutoFlip.setEnabled(true); } }); @@ -81,13 +80,13 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { _radioTime = (RadioButton) findViewById(R.id.RadioOptionsTime); _radioTime.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - _radioPly.setChecked(_radioTime.isChecked() ? false : true); + _radioPly.setChecked(!_radioTime.isChecked()); } }); _radioPly = (RadioButton) findViewById(R.id.RadioOptionsPly); _radioPly.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - _radioTime.setChecked(_radioPly.isChecked() ? false : true); + _radioTime.setChecked(!_radioPly.isChecked()); } }); @@ -95,14 +94,14 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { _radioWhite.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - _radioBlack.setChecked(_radioWhite.isChecked() ? false : true); + _radioBlack.setChecked(!_radioWhite.isChecked()); } }); _radioBlack = (RadioButton) findViewById(R.id.rbBlack); _radioBlack.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - _radioWhite.setChecked(_radioBlack.isChecked() ? false : true); + _radioWhite.setChecked(!_radioBlack.isChecked()); } }); @@ -128,7 +127,7 @@ public void onClick(View arg0) { editor.putBoolean("showMoves", _checkMoves.isChecked()); editor.putBoolean("playAsBlack", _radioBlack.isChecked()); - editor.commit(); + editor.apply(); if (_tableRowOption960.getVisibility() == View.VISIBLE && _check960.isChecked()) { @@ -149,7 +148,7 @@ public void onClick(DialogInterface dialog, int whichButton) { editor.putString("FEN", null); editor.putInt("boardNum", 0); editor.putInt("randomFischerSeed", seed % 960); - editor.commit(); + editor.apply(); finish(); } else { @@ -170,7 +169,7 @@ public void onClick(DialogInterface dialog, int which) { editor.putString("FEN", null); editor.putInt("boardNum", -1); editor.putInt("randomFischerSeed", seed); - editor.commit(); + editor.apply(); finish(); } @@ -206,14 +205,14 @@ protected void onResume() { SharedPreferences prefs = this.getPrefs(); _radioAndroid.setChecked(prefs.getInt("playMode", GameControl.HUMAN_PC) == GameControl.HUMAN_PC); - _radioHuman.setChecked(_radioAndroid.isChecked() ? false : true); + _radioHuman.setChecked(!_radioAndroid.isChecked()); _checkAutoFlip.setChecked(prefs.getBoolean("autoflipBoard", false)); _checkAutoFlip.setEnabled(_radioHuman.isChecked()); _checkMoves.setChecked(prefs.getBoolean("showMoves", true)); _radioBlack.setChecked(prefs.getBoolean("playAsBlack", false)); - _radioWhite.setChecked(_radioBlack.isChecked() ? false : true); + _radioWhite.setChecked(!_radioBlack.isChecked()); _radioTime.setChecked(prefs.getInt("levelMode", GameControl.LEVEL_TIME) == GameControl.LEVEL_TIME); _radioPly.setChecked(prefs.getInt("levelMode", GameControl.LEVEL_TIME) == GameControl.LEVEL_PLY); @@ -227,15 +226,18 @@ protected void onResume() { @Override protected void onPause() { - if(_radioHuman.isChecked() && !_checkAutoFlip.isChecked()){ - _bFlipBlack = true; - }else { - _bFlipBlack = false; - } + _sbFlipTopPieces = (_radioHuman.isChecked() && !_checkAutoFlip.isChecked()); + _sbPlayAsBlack = _radioBlack.isChecked(); + super.onPause(); } - public static boolean is_bFlipBlack(){ - return _bFlipBlack; + public static boolean is_sbFlipTopPieces(){ + return _sbFlipTopPieces; } + + public static boolean is_sbPlayAsBlack(){ + return _sbPlayAsBlack; + } + } diff --git a/app/src/main/java/jwtc/android/chess/puzzle/ChessViewPractice.java b/app/src/main/java/jwtc/android/chess/puzzle/ChessViewPractice.java index 9cb15b9c..781cc049 100644 --- a/app/src/main/java/jwtc/android/chess/puzzle/ChessViewPractice.java +++ b/app/src/main/java/jwtc/android/chess/puzzle/ChessViewPractice.java @@ -110,7 +110,16 @@ public void onClick(View arg0) { handleClick(_view.getIndexOfButton(arg0)); } }; - _view.init(ocl); + + OnLongClickListener olcl = new OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + handleClick(_view.getIndexOfButton(view)); + return true; + } + }; + + _view.init(ocl, olcl); init(); _butShow = (Button) _parent.findViewById(R.id.ButtonPracticeShow); diff --git a/app/src/main/java/jwtc/android/chess/puzzle/ChessViewPuzzle.java b/app/src/main/java/jwtc/android/chess/puzzle/ChessViewPuzzle.java index 4cd16c98..b5e0f27c 100644 --- a/app/src/main/java/jwtc/android/chess/puzzle/ChessViewPuzzle.java +++ b/app/src/main/java/jwtc/android/chess/puzzle/ChessViewPuzzle.java @@ -140,7 +140,16 @@ public void onClick(View arg0) { handleClick(_view.getIndexOfButton(arg0)); } }; - _view.init(ocl); + + OnLongClickListener olcl = new OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + handleClick(_view.getIndexOfButton(view)); + return true; + } + }; + + _view.init(ocl, olcl); _butPuzzle = (Button) _parent.findViewById(R.id.ButtonPuzzle); diff --git a/app/src/main/java/jwtc/android/chess/setup.java b/app/src/main/java/jwtc/android/chess/setup.java index 77644041..c6465a9b 100644 --- a/app/src/main/java/jwtc/android/chess/setup.java +++ b/app/src/main/java/jwtc/android/chess/setup.java @@ -87,7 +87,15 @@ public void onClick(View arg0) { handleClick(_view.getIndexOfButton(arg0)); } }; - _view.init(ocl); + View.OnLongClickListener olcl = new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + handleClick(_view.getIndexOfButton(view)); + return true; + } + }; + + _view.init(ocl, olcl); //_tvMsg = (TextView)findViewById(R.id.TextViewSetupMsg); diff --git a/app/src/main/java/jwtc/android/chess/start.java b/app/src/main/java/jwtc/android/chess/start.java index 7194049f..4fbe101f 100644 --- a/app/src/main/java/jwtc/android/chess/start.java +++ b/app/src/main/java/jwtc/android/chess/start.java @@ -68,7 +68,7 @@ public class start extends AppCompatActivity { private JNI _jni; private Timer _timer; private String _lastMessage; - public static String sActivity; // sActivity is a global variable that gives you the current activity + private static String _ssActivity = ""; /** * Called when the activity is first created. @@ -116,46 +116,40 @@ public void run() { String[] title = getResources().getStringArray(R.array.start_menu); _list = (ListView)findViewById(R.id.ListStart); - start_CustomList adapter = new start_CustomList(this, title); - _list.setAdapter(adapter); _list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - sActivity = parent.getItemAtPosition(position).toString(); + _ssActivity = parent.getItemAtPosition(position).toString(); try { Intent i = new Intent(); - Log.i("start", sActivity); - if (sActivity.equals(getString(R.string.start_play))) { + Log.i("start", _ssActivity); + if (_ssActivity.equals(getString(R.string.start_play))) { i.setClass(start.this, main.class); i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(i); - } else if (sActivity.equals(getString(R.string.start_practice))) { + } else if (_ssActivity.equals(getString(R.string.start_practice))) { i.setClass(start.this, practice.class); i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(i); - } else if (sActivity.equals(getString(R.string.start_puzzles))) { + } else if (_ssActivity.equals(getString(R.string.start_puzzles))) { i.setClass(start.this, puzzle.class); i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(i); - } else if (sActivity.equals(getString(R.string.start_about))) { + } else if (_ssActivity.equals(getString(R.string.start_about))) { i.setClass(start.this, HtmlActivity.class); i.putExtra(HtmlActivity.HELP_MODE, "about"); startActivity(i); - } else if (sActivity.equals(getString(R.string.start_ics))) { + } else if (_ssActivity.equals(getString(R.string.start_ics))) { i.setClass(start.this, ICSClient.class); startActivity(i); - } else if (sActivity.equals(getString(R.string.start_pgn))) { + } else if (_ssActivity.equals(getString(R.string.start_pgn))) { i.setClass(start.this, pgntool.class); i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(i); - } else if (sActivity.equals(getString(R.string.start_donate))) { - i.setClass(start.this, Donate.class); - i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); - startActivity(i); - } else if (sActivity.equals(getString(R.string.start_globalpreferences))) { + } else if (_ssActivity.equals(getString(R.string.start_globalpreferences))) { i.setClass(start.this, ChessPreferences.class); startActivityForResult(i, 0); - } else if (sActivity.equals(getString(R.string.menu_help))) { + } else if (_ssActivity.equals(getString(R.string.menu_help))) { i.setClass(start.this, HtmlActivity.class); i.putExtra(HtmlActivity.HELP_MODE, "help"); startActivity(i); @@ -494,4 +488,9 @@ private void teardown(boolean selectDefaultRoute) { mWaitingForReconnect = false; mSessionId = null; } + + public static String get_ssActivity(){ + return _ssActivity; + } + } diff --git a/app/src/main/java/jwtc/android/chess/start_CustomList.java b/app/src/main/java/jwtc/android/chess/start_CustomList.java deleted file mode 100644 index f9b2c77d..00000000 --- a/app/src/main/java/jwtc/android/chess/start_CustomList.java +++ /dev/null @@ -1,48 +0,0 @@ -package jwtc.android.chess; - -/** - * Created by Tim on 12/19/2015. - */ -import android.app.Activity; -import android.content.SharedPreferences; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.animation.AnimationUtils; -import android.widget.ArrayAdapter; -import android.widget.ImageView; -import android.widget.TextView; - -public class start_CustomList extends ArrayAdapter{ - - private final Activity context; - private final String[] title; - - SharedPreferences myPrefs = getContext().getSharedPreferences("ChessPlayer", getContext().MODE_PRIVATE); - boolean _bHeart = myPrefs.getBoolean("bHeart", true); - - public start_CustomList(Activity context, - String[] title) { - super(context, R.layout.start_list_single, title); - this.context = context; - this.title = title; - - } - - @Override - public View getView(int position, View view, ViewGroup parent) { - LayoutInflater inflater = context.getLayoutInflater(); - View rowView= inflater.inflate(R.layout.start_list_single, null, true); - TextView txtTitle = (TextView) rowView.findViewById(R.id.txt); - - ImageView imageView = (ImageView) rowView.findViewById(R.id.img); - - txtTitle.setText(title[position]); - - if(imageView != null && position == 5 && _bHeart) { - imageView.setImageResource(R.drawable.heart); - imageView.startAnimation(AnimationUtils.loadAnimation(this.context, R.anim.pulse)); - } - return rowView; - } -} diff --git a/app/src/main/java/jwtc/android/chess/tools/pgntool.java b/app/src/main/java/jwtc/android/chess/tools/pgntool.java index 3099da7b..c81bbc1a 100644 --- a/app/src/main/java/jwtc/android/chess/tools/pgntool.java +++ b/app/src/main/java/jwtc/android/chess/tools/pgntool.java @@ -219,7 +219,7 @@ public void onClick(DialogInterface dialog, int which) { editor.putInt("practiceTicks", 0); editor.commit(); - doToast("Practice set has been reset"); + doToast(getString(R.string.practice_set_reset)); } }); diff --git a/app/src/main/java/jwtc/chess/GameControl.java b/app/src/main/java/jwtc/chess/GameControl.java index 142df32a..51461b06 100644 --- a/app/src/main/java/jwtc/chess/GameControl.java +++ b/app/src/main/java/jwtc/chess/GameControl.java @@ -10,6 +10,7 @@ import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; +import android.content.res.Resources; import android.util.Log; import jwtc.chess.algorithm.*; import jwtc.chess.board.BoardConstants; @@ -238,8 +239,8 @@ public void newGame() _mapPGNHead.put("Event", "?"); _mapPGNHead.put("Site", "?"); _mapPGNHead.put("Round", "?"); - _mapPGNHead.put("White", "white ?"); - _mapPGNHead.put("Black", "black ?"); + _mapPGNHead.put("White", Resources.getSystem().getString(android.R.string.unknownName)); + _mapPGNHead.put("Black", Resources.getSystem().getString(android.R.string.unknownName)); _mapPGNHead.put("Date", formatter.format(d)); _arrPGN.clear(); @@ -256,8 +257,8 @@ public final boolean initFEN(final String sFEN, boolean resetHead){ _mapPGNHead.put("Event", "?"); _mapPGNHead.put("Site", "?"); _mapPGNHead.put("Round", "?"); - _mapPGNHead.put("White", "white ?"); - _mapPGNHead.put("Black", "black ?"); + _mapPGNHead.put("White", Resources.getSystem().getString(android.R.string.unknownName)); + _mapPGNHead.put("Black", Resources.getSystem().getString(android.R.string.unknownName)); } _mapPGNHead.put("Setup", "1"); _mapPGNHead.put("FEN", sFEN); @@ -279,8 +280,8 @@ public int newGameRandomFischer(int seed){ _mapPGNHead.put("Event", "?"); _mapPGNHead.put("Site", "?"); _mapPGNHead.put("Round", "?"); - _mapPGNHead.put("White", "white ?"); - _mapPGNHead.put("Black", "black ?"); + _mapPGNHead.put("White", Resources.getSystem().getString(android.R.string.unknownName)); + _mapPGNHead.put("Black", Resources.getSystem().getString(android.R.string.unknownName)); _mapPGNHead.put("Variant", "Fischerandom"); _mapPGNHead.put("Setup", "1"); diff --git a/app/src/main/res/anim/pulse.xml b/app/src/main/res/anim/pulse.xml deleted file mode 100644 index 29107999..00000000 --- a/app/src/main/res/anim/pulse.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/ic_volume_off_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_volume_off_white_24dp.png new file mode 100644 index 00000000..ce0c2142 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_volume_off_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_volume_up_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_volume_up_white_24dp.png new file mode 100644 index 00000000..57d78716 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_volume_up_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_volume_off_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_volume_off_white_24dp.png new file mode 100644 index 00000000..4681ec14 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_volume_off_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_volume_up_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_volume_up_white_24dp.png new file mode 100644 index 00000000..7cfd4c7b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_volume_up_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_volume_off_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_volume_off_white_24dp.png new file mode 100644 index 00000000..732a1c0f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_volume_off_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_volume_up_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_volume_up_white_24dp.png new file mode 100644 index 00000000..2ed00343 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_volume_up_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_volume_off_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_volume_off_white_24dp.png new file mode 100644 index 00000000..474aae51 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_volume_off_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_volume_up_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_volume_up_white_24dp.png new file mode 100644 index 00000000..2e751a40 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_volume_up_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_volume_off_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_volume_off_white_24dp.png new file mode 100644 index 00000000..df06b06b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_volume_off_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_volume_up_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_volume_up_white_24dp.png new file mode 100644 index 00000000..82972b4e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_volume_up_white_24dp.png differ diff --git a/app/src/main/res/drawable/select_square.png b/app/src/main/res/drawable/select_square.png new file mode 100644 index 00000000..2aeedee9 Binary files /dev/null and b/app/src/main/res/drawable/select_square.png differ diff --git a/app/src/main/res/drawable/social_chat.png b/app/src/main/res/drawable/social_chat.png deleted file mode 100644 index 31928446..00000000 Binary files a/app/src/main/res/drawable/social_chat.png and /dev/null differ diff --git a/app/src/main/res/layout-land/icsclient.xml b/app/src/main/res/layout-land/icsclient.xml index 8f7f60ed..faf36d58 100644 --- a/app/src/main/res/layout-land/icsclient.xml +++ b/app/src/main/res/layout-land/icsclient.xml @@ -118,6 +118,15 @@ /> + + @@ -167,7 +176,7 @@