Commit 4270fa39 authored by Jeremy JAMET's avatar Jeremy JAMET

Merge branch 'release/1.4'

parents 0b66c29a 903e69cb
......@@ -6,8 +6,8 @@ android {
applicationId "com.kunzisoft.keyboard.switcher"
minSdkVersion 14
targetSdkVersion 28
versionCode 4
versionName "1.3"
versionCode 5
versionName "1.4"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
......
package com.kunzisoft.keyboard.switcher.settings;
import android.os.Bundle;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.text.HtmlCompat;
import androidx.fragment.app.Fragment;
import com.kunzisoft.keyboard.switcher.R;
import com.kunzisoft.keyboard.switcher.utils.Constants;
/**
* Show the about page
*/
public class AboutFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (getContext() != null) {
View rootView = inflater.inflate(R.layout.about_activity, container, false);
TextView versionTextView = rootView.findViewById(R.id.activity_about_version);
String versionString = getString(R.string.about_version) + " " + Constants.getVersion(getContext());
versionTextView.setText(versionString);
String htmlContent =
"<p>" + getString(R.string.html_text_purpose) + "</p>" +
"<h2>" + getString(R.string.about_title) + "</h2>" +
"<p>" + getString(R.string.html_text_free, getString(R.string.app_name)) + "</p>" +
"<p>" + getString(R.string.html_text_contribution) + "</p>" +
"<h2>" + getString(R.string.contact_title) + "</h2>" +
"<p>" + getString(R.string.source_code) + " <a href=\"" + Constants.URL_CONTRIBUTION + "\">" + Constants.URL_CONTRIBUTION + "</a></p>" +
"<p>" + getString(R.string.powered_by) + " <a href=\"" + Constants.URL_WEB_SITE + "\">" + Constants.ORGANIZATION + "</a></p>";
TextView aboutTextView = rootView.findViewById(R.id.activity_about_content);
aboutTextView.setMovementMethod(LinkMovementMethod.getInstance());
aboutTextView.setText(HtmlCompat.fromHtml(htmlContent, HtmlCompat.FROM_HTML_MODE_LEGACY));
return rootView;
}
return super.onCreateView(inflater, container, savedInstanceState);
}
}
......@@ -2,25 +2,33 @@ package com.kunzisoft.keyboard.switcher.settings;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.preference.PreferenceManager;
import com.kunzisoft.keyboard.switcher.R;
import com.kunzisoft.keyboard.switcher.boot.BootUpActivity;
import com.kunzisoft.keyboard.switcher.dialogs.AppDialog;
import com.kunzisoft.keyboard.switcher.dialogs.WarningFloatingButtonDialog;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.PreferenceManager;
public class PreferenceActivity extends AppCompatActivity implements WarningFloatingButtonDialog.OnFloatingButtonListener{
private static final String TAG_PREFERENCE_FRAGMENT = "TAG_PREFERENCE_FRAGMENT";
private static final String TAG_ABOUT_FRAGMENT = "TAG_ABOUT_FRAGMENT";
private static final String KEY_ABOUT_ACTIVE = "KEY_ABOUT_ACTIVE";
private View testZoneView;
private PreferenceFragment preferenceFragment;
private Fragment aboutFragment;
private boolean aboutFragmentActive = false;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
......@@ -28,28 +36,54 @@ public class PreferenceActivity extends AppCompatActivity implements WarningFloa
super.onCreate(savedInstanceState);
setContentView(R.layout.preference_activity);
// Manage fragment who contains list of preferences
preferenceFragment =
(PreferenceFragment) getSupportFragmentManager().findFragmentByTag(TAG_PREFERENCE_FRAGMENT);
testZoneView = findViewById(R.id.test_zone_container);
// Manage fragment who contains list of preferences
preferenceFragment = (PreferenceFragment) getSupportFragmentManager().findFragmentByTag(TAG_PREFERENCE_FRAGMENT);
if(preferenceFragment == null)
preferenceFragment = new PreferenceFragment();
aboutFragment = getSupportFragmentManager().findFragmentByTag(TAG_ABOUT_FRAGMENT);
if(aboutFragment == null)
aboutFragment = new AboutFragment();
if (savedInstanceState != null) {
aboutFragmentActive = savedInstanceState.getBoolean(KEY_ABOUT_ACTIVE, aboutFragmentActive);
}
startActivity(new Intent(this, BootUpActivity.class));
Fragment fragmentToShow;
String tagToSave;
if (aboutFragmentActive) {
fragmentToShow = aboutFragment;
tagToSave = TAG_ABOUT_FRAGMENT;
} else {
fragmentToShow = preferenceFragment;
tagToSave = TAG_PREFERENCE_FRAGMENT;
}
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, preferenceFragment, TAG_PREFERENCE_FRAGMENT)
.replace(R.id.fragment_container, fragmentToShow, tagToSave)
.commit();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if (prefs.getBoolean(getString(R.string.app_warning_key), true)) {
AppDialog dialogFragment = new AppDialog();
if (getFragmentManager() != null)
if (getSupportFragmentManager() != null)
dialogFragment.show(getSupportFragmentManager(), "application_dialog");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(KEY_ABOUT_ACTIVE, aboutFragmentActive);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
......@@ -58,18 +92,49 @@ public class PreferenceActivity extends AppCompatActivity implements WarningFloa
return true;
}
private void switchToPreferenceScreen() {
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowHomeEnabled(false);
getSupportActionBar().setTitle(R.string.app_name);
}
getSupportFragmentManager().popBackStack();
aboutFragmentActive = false;
testZoneView.setVisibility(View.VISIBLE);
}
private void switchToAboutScreen() {
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setTitle(R.string.about_title);
}
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,
R.anim.slide_in_left, R.anim.slide_out_right)
.replace(R.id.fragment_container, aboutFragment, TAG_ABOUT_FRAGMENT)
.addToBackStack(null)
.commit();
aboutFragmentActive = true;
testZoneView.setVisibility(View.GONE);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch ( item.getItemId() ) {
switch (item.getItemId()) {
case R.id.menu_contribute:
String url = "https://www.kunzisoft.com/donation";
Intent intentUrl = new Intent(Intent.ACTION_VIEW);
intentUrl.setData(Uri.parse(url));
startActivity(intentUrl);
if (aboutFragmentActive) {
switchToPreferenceScreen();
} else {
switchToAboutScreen();
}
return true;
case android.R.id.home:
switchToPreferenceScreen();
return true;
default:
return super.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}
@Override
......@@ -92,4 +157,13 @@ public class PreferenceActivity extends AppCompatActivity implements WarningFloa
if (preferenceFragment != null && !preferenceFragment.isTryingToOpenExternalDialog())
finish();
}
@Override
public void onBackPressed() {
if (aboutFragmentActive) {
switchToPreferenceScreen();
} else {
super.onBackPressed();
}
}
}
package com.kunzisoft.keyboard.switcher.utils;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.util.Log;
public class Constants {
public static final String ORGANIZATION = "Kunzisoft";
public static final String URL_WEB_SITE = "http://kunzisoft.com/";
public static final String URL_CONTRIBUTION = "https://gitlab.com/kunzisoft/Android-KeyboardSwitcher";
/**
* Get the current package version.
*
* @return The current version.
*/
public static String getVersion(Context context) {
String result;
try {
PackageManager manager = context.getPackageManager();
PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
result = String.format("%s", info.versionName);
} catch (PackageManager.NameNotFoundException e) {
Log.w(Constants.class.getSimpleName(), "Unable to get application version", e);
result = "Unable to get application version.";
}
return result;
}
}
<?xml version="1.0" encoding="utf-8"?>
<!--
/* //device/apps/common/res/anim/slide_in_left.xml
**
** Copyright 2007, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="@integer/animation_duration"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<!--
/* //device/apps/common/res/anim/slide_in_right.xml
**
** Copyright 2007, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="@integer/animation_duration"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<!--
/* //device/apps/common/res/anim/slide_out_left.xml
**
** Copyright 2007, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="@integer/animation_duration"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<!--
/* //device/apps/common/res/anim/slide_out_right.xml
**
** Copyright 2007, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="@integer/animation_duration"/>
</set>
<vector android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFF" android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42,3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22,5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:isScrollContainer="true"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:scrollbars="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/activity_about_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_toRightOf="@+id/activity_about_icon"
android:layout_toEndOf="@+id/activity_about_icon">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/activity_about_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@android:style/TextAppearance.Small" />
</LinearLayout>
</RelativeLayout>
<TextView
android:id="@+id/activity_about_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textAppearance="@android:style/TextAppearance.Small" />
</LinearLayout>
</ScrollView>
</LinearLayout>
\ No newline at end of file
......@@ -9,21 +9,27 @@
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/separator"/>
android:layout_above="@+id/test_zone_container"/>
<View
android:id="@+id/separator"
android:layout_width="match_parent"
android:layout_height="3dp"
android:layout_above="@+id/test_zone"
android:background="@color/colorPrimary"/>
<EditText
android:id="@+id/test_zone"
<LinearLayout
android:id="@+id/test_zone_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:hint="@string/hint_text_test"
android:inputType="text" />
android:orientation="vertical"
android:layout_alignParentBottom="true">
<View
android:id="@+id/separator"
android:layout_width="match_parent"
android:layout_height="3dp"
android:background="@color/colorPrimary"/>
<EditText
android:id="@+id/test_zone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_text_test"
android:inputType="text"
android:importantForAutofill="no" />
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
......@@ -2,7 +2,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_contribute"
android:icon="@drawable/ic_heart_white_24dp"
android:title="@string/donate"
android:icon="@drawable/ic_info_white_24dp"
android:title="@string/contribute"
app:showAsAction="ifRoom" />
</menu>
\ No newline at end of file
<resources>
<string name="app_warning"> Cette application facilite le changement de clavier si vous n’avez pas de moyen efficace intégré au système d\’exploitation et au clavier de votre appareil. \n\nAvec Lollipop et versions ultérieures d\’Android, vous pouvez appuyer longuement sur la barre d\’espace de votre clavier afin de le changer facilement. Les notifications gérées par le système permettent également ce changement. \n\nDans ces cas, l\'application peut être superflue.</string>
<string name="hint_text_test">zone de test</string>
<string name="notification_keyboard_title">Changer le clavier</string>
<string name="notification_keyboard_content_text">Appuyer pour sélectionner le clavier par défaut.</string>
<string name="notification_floating_button_title">Bouton Clavier</string>
<string name="notification_floating_button_content_text">Service de bouton flottant de clavier activé.</string>
<string name="general">Général</string>
<string name="settings_ime_available_title">Claviers disponibles</string>
<string name="settings_ime_change_title">Change le clavier par défaut</string>
<string name="error_unavailable_keyboard_feature">Votre système ne peut pas ouvrir la boîte de dialogue de sélection du clavier.</string>
<string name="startup">Démarrage</string>
<string name="settings_launch_startup_title">Lancer au démarrage</string>
<string name="notification">Notification</string>
<string name="settings_notification_title">Active la notification</string>
<string name="settings_notification_description">Active une notification pour choisir un clavier</string>
<string name="floating_button">Bouton de clavier flottant</string>
<string name="settings_floating_button_title">Active le bouton flottant</string>
<string name="settings_floating_button_description">Active un bouton flottant pour choisir un clavier</string>
<string name="error_overlay_permission_request">Votre système ne peut pas ouvrir la boîte de dialogue de demande d\'autorisation de superposition.</string>
<string name="floating_button_warning">Cette fonctionnalité peut être instable dans les dernières versions d’Android (Lollipop et les suivantes).</string>
<string name="floating_button_notification_warning">L\'affichage d\'une notification supplémentaire est essentiel pour que le bouton reste visible dans votre version d\'Android (O et suivantes).</string>
<string name="floating_button_above_screen">Vous devez accepter les autorisations pour autoriser le bouton flottant a être dessiné au dessus des autres applications.</string>
<string name="settings_floating_button_position_title">Position de bouton</string>
<string name="settings_floating_button_lock_title">Verouiller la position</string>
<string name="settings_colors_title">Couleur de bouton</string>
<string name="about_title">A propos</string>
<string name="contribute">Contribuer</string>
<string name="powered_by">Propulsé par</string>
<string name="source_code">Code source:</string>
<string name="about_version">Version:</string>
<string name="contact_title">Contact</string>
<string name="developer">Développeur</string>
<string name="html_text_purpose">Cette application est conçue pour &lt;strong&gt;changer facilement de clavier&lt;/strong&gt;.</string>
<string name="html_text_free">%1$s est &lt;strong&gt;gratuit&lt;/strong&gt;, &lt;strong&gt;libre&lt;/strong&gt; et &lt;strong&gt;sans publicité&lt;/strong&gt;. Il est fourni tel quel, sous licence &lt;strong&gt;GPLv3&lt;/strong&gt;, sans aucune garantie.</string>
<string name="html_text_contribution">Afin de &lt;strong&gt;garder notre liberté&lt;/strong&gt;, &lt;strong&gt;corriger des bogues&lt;/strong&gt;, &lt;strong&gt;ajouter des fonctonnalités&lt;/strong&gt; et &lt;strong&gt;pour être toujours actif&lt;/strong&gt;, nous comptons sur votre &lt;strong&gt;contribution.&lt;/strong&gt;</string>
</resources>
<resources>
<string name="app_warning"> Este app torna fácil a troca entre diferentes teclados se seu sistema não tem um meio eficiente de fazê-lo.\n\nNa versão Lollipop e posteriores do Android, um toque longo na barra de espaço pode fazer esta troca. Uma notificação do proprio sistema também permite a troca.\n\nNestes casos o app se torna redundante.</string>
<string name="hint_text_test">área de teste</string>
<string name="notification_keyboard_title">Selecionar teclado</string>
<string name="notification_keyboard_content_text">Toque para selecionar o teclado.</string>
<string name="notification_floating_button_title">Botão de teclado</string>
<string name="notification_floating_button_content_text">Serviço de botão flutuante de teclado ativado.</string>
<string name="general">Geral</string>
<string name="settings_ime_available_title">Teclados disponíveis</string>
<string name="settings_ime_change_title">Selecionar o teclado padrão</string>
<string name="error_unavailable_keyboard_feature">Seu sistema não é capaz de abrir a janela de seleção de teclado.</string>
<string name="startup">Inicialização</string>
<string name="settings_launch_startup_title">Abrir após a inicialização</string>
<string name="notification">Notificação</string>
<string name="settings_notification_title">Ativar notificação</string>
<string name="settings_notification_description">Ativar uma notificação para escolher um teclado</string>
<string name="floating_button">Botão de teclado flutuante</string>
<string name="settings_floating_button_title">Ativar botão flutuante</string>
<string name="settings_floating_button_description">Ativar um botão flutuante para escolher um teclado</string>
<string name="error_overlay_permission_request">Seu sistema não é capaz de abrir a tela de permissão de sobrepor outros apps.</string>
<string name="floating_button_warning">Esta função pode ser instável em versões mais recentes do Android (Lollipop e posterior).</string>
<string name="floating_button_notification_warning">A exibição de uma notificação adicional é essencial para manter o app visível na sua versão do Android (O e posteriores).</string>
<string name="floating_button_above_screen">Você deve permitir que o app se sobreponha a outros apps.</string>
<string name="settings_floating_button_position_title">Posição do botão</string>
<string name="settings_floating_button_lock_title">Travar posição</string>
<string name="settings_colors_title">Cor do botão</string>
<string name="about_title">About</string>
<string name="contribute">Contribute</string>
<string name="powered_by">Powered by</string>
<string name="source_code">Source code:</string>
<string name="about_version">Version:</string>
<string name="contact_title">Contact</string>
<string name="developer">Developer</string>
<string name="html_text_purpose">This app is designed to &lt;strong&gt;easily change keyboards&lt;/strong&gt;.</string>
<string name="html_text_free">%1$s is &lt;strong&gt;free&lt;/strong&gt;, &lt;strong&gt;libre&lt;/strong&gt; and &lt;strong&gt;without advertising&lt;/strong&gt;. It is provided as is, under &lt;strong&gt;GPLv3&lt;/strong&gt; license, without any guaranty.</string>
<string name="html_text_contribution">In order to &lt;strong&gt;keep our freedom&lt;/strong&gt;, &lt;strong&gt;fix bugs&lt;/strong&gt;, &lt;strong&gt;add features&lt;/strong&gt; and &lt;strong&gt;to be always active&lt;/strong&gt;, we count on your &lt;strong&gt;contribution.&lt;/strong&gt;</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<integer name="animation_duration">320</integer>
</resources>
\ No newline at end of file
<resources>
<string name="app_name">Keyboard Switcher</string>
<string name="app_name" translatable="false">Keyboard Switcher</string>
<string name="app_warning_key" translatable="false">app_warning_key</string>
<string name="app_warning"> This application makes it easy to switch keyboard if you do not have an effective way integrated into the operating system and the keyboard of your device.\n\nIn Lollipop and later versions of Android, a long press on the space bar of your keyboard can make it easy to change. System-managed notifications also allow this change.\n\nIn these cases, the application may be superfluous.</string>
......@@ -49,11 +49,21 @@
<string name="settings_floating_button_position_title">Button position</string>
<string name="settings_floating_button_lock_key" translatable="false">settings_floating_button_lock_key</string>
<string name="settings_floating_button_lock_title">Locked position</string>
<string name="settings_floating_button_lock_title">Lock position</string>
<string name="settings_colors_key" translatable="false">settings_colors_key</string>
<string name="settings_colors_title">Button color</string>
<string name="settings_colors_description">[color]</string>
<string name="settings_colors_description" translatable="false">[color]</string>
<string name="about_title">About</string>
<string name="contribute">Contribute</string>
<string name="powered_by">Powered by</string>
<string name="source_code">Source code:</string>
<string name="about_version">Version:</string>
<string name="contact_title">Contact</string>
<string name="developer">Developer</string>
<string name="html_text_purpose">This app is designed to &lt;strong&gt;easily change keyboard&lt;/strong&gt;.</string>
<string name="html_text_free">%1$s is &lt;strong&gt;free&lt;/strong&gt;, &lt;strong&gt;libre&lt;/strong&gt; and &lt;strong&gt;without advertising&lt;/strong&gt;. It is provided as is, under &lt;strong&gt;GPLv3&lt;/strong&gt; license, without any guaranty.</string>
<string name="html_text_contribution">In order to &lt;strong&gt;keep our freedom&lt;/strong&gt;, &lt;strong&gt;fix bugs&lt;/strong&gt;, &lt;strong&gt;add features&lt;/strong&gt; and &lt;strong&gt;to be always active&lt;/strong&gt;, we count on your &lt;strong&gt;contribution.&lt;/strong&gt;</string>
<string name="donate">Donate</string>
</resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment