Obliczenia brydżowe (Android)
Jacek Kowalski
2015-01-18 0d7d167dcfd456c1f8695448f885989661e712c8
Create "About" tab and bump version.
5 files added
7 files modified
681 ■■■■■ changed files
app/app.iml 11 ●●●●● patch | view | raw | blame | history
app/build.gradle 8 ●●●● patch | view | raw | blame | history
app/src/main/AndroidManifest.xml 32 ●●●● patch | view | raw | blame | history
app/src/main/java/net/jacekk/bridge/android/AboutActivity.java 27 ●●●●● patch | view | raw | blame | history
app/src/main/java/net/jacekk/bridge/android/MainActivity.java 24 ●●●●● patch | view | raw | blame | history
app/src/main/res/layout/about.xml 82 ●●●●● patch | view | raw | blame | history
app/src/main/res/layout/main.xml 381 ●●●● patch | view | raw | blame | history
app/src/main/res/menu/main.xml 13 ●●●●● patch | view | raw | blame | history
app/src/main/res/values-pl/strings.xml 47 ●●●● patch | view | raw | blame | history
app/src/main/res/values-w820dp/dimens.xml 6 ●●●●● patch | view | raw | blame | history
app/src/main/res/values/dimens.xml 5 ●●●●● patch | view | raw | blame | history
app/src/main/res/values/strings.xml 45 ●●●● patch | view | raw | blame | history
app/app.iml
@@ -86,17 +86,6 @@
    <orderEntry type="library" exported="" name="appcompat-v7-21.0.3" level="project" />
    <orderEntry type="library" exported="" name="support-annotations-21.0.3" level="project" />
    <orderEntry type="library" exported="" name="support-v4-21.0.3" level="project" />
    <orderEntry type="module-library" scope="TEST">
      <library name="JUnit4">
        <CLASSES>
          <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
          <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
          <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-library-1.3.jar!/" />
        </CLASSES>
        <JAVADOC />
        <SOURCES />
      </library>
    </orderEntry>
  </component>
</module>
app/build.gradle
@@ -6,14 +6,14 @@
    defaultConfig {
        applicationId "net.jacekk.bridge"
        minSdkVersion 14
        minSdkVersion 11
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
        versionCode 2
        versionName "1.1"
    }
    buildTypes {
        release {
            minifyEnabled false
            minifyEnabled true
        }
    }
}
app/src/main/AndroidManifest.xml
@@ -1,12 +1,30 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.jacekk.bridge">
    <application android:allowBackup="true" android:label="@string/app_name"
        android:icon="@drawable/icon" android:theme="@style/AppTheme">
        <activity android:name="net.jacekk.bridge.android.MainActivity"
            android:label="@string/app_name">
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.jacekk.bridge">
    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:supportsRtl="true">
        <activity
            android:name=".android.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".android.AboutActivity"
            android:label="@string/about_title"
            android:parentActivityName=".android.MainActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="net.jacekk.bridge.android.MainActivity" />
        </activity>
    </application>
</manifest>
app/src/main/java/net/jacekk/bridge/android/AboutActivity.java
New file
@@ -0,0 +1,27 @@
package net.jacekk.bridge.android;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.TextView;
import net.jacekk.bridge.R;
public class AboutActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.about);
        InitializeApp();
    }
    protected void InitializeApp() {
        final TextView version = (TextView)findViewById(R.id.about_version);
        try {
            version.setText(getPackageManager().getPackageInfo(getPackageName(), 0).versionName);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
}
app/src/main/java/net/jacekk/bridge/android/MainActivity.java
@@ -1,9 +1,12 @@
package net.jacekk.bridge.android;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.SeekBar;
@@ -51,6 +54,25 @@
        InitializeApp();
    }
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.main_action_about:
                Intent about = new Intent(getApplicationContext(), AboutActivity.class);
                startActivity(about);
                return true;
            case R.id.main_action_reset:
                resetInputs();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
    private void resetInputs() {
        BidSlider.setProgress(0);
        MinorSuitsToggle.setChecked(true);
@@ -61,7 +83,7 @@
        ResultsText.setText(getString(R.string.enter_data));
    }
    private void InitializeApp() {
    protected void InitializeApp() {
        bridgeCompute = new BridgeCompute();
        BidSlider = (SeekBar) findViewById(R.id.BidSlider);
app/src/main/res/layout/about.xml
New file
@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/about_version_label"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/about_version"
            android:textSize="16sp"
            android:textStyle="bold" />
        <TextView
            android:id="@+id/about_version"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/about_author_label"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10sp"
            android:text="@string/about_author"
            android:textSize="16sp"
            android:textStyle="bold" />
        <TextView
            android:id="@+id/about_author"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/about_author_contents" />
        <TextView
            android:id="@+id/about_url_label"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10sp"
            android:text="@string/about_url"
            android:textSize="16sp"
            android:textStyle="bold" />
        <TextView
            android:id="@+id/about_url"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/about_url_contents"
            android:autoLink="web" />
        <TextView
            android:id="@+id/about_license_label"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10sp"
            android:text="@string/about_license"
            android:textSize="16sp"
            android:textStyle="bold" />
        <TextView
            android:id="@+id/about_license"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/about_license_contents"
            android:textSize="16sp" />
        <TextView
            android:id="@+id/about_license_full"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/about_license_full"
            android:textSize="16sp" />
    </LinearLayout>
</ScrollView>
app/src/main/res/layout/main.xml
@@ -1,195 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_margin="10dp"
    android:orientation="vertical">
    <SeekBar
        android:id="@+id/BidSlider"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:indeterminate="false"
        android:max="7" />
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:weightSum="1">
        android:orientation="vertical">
        <SeekBar
            android:id="@+id/BidSlider"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:indeterminate="false"
            android:max="7" />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:weightSum="1">
            <TextView
                android:id="@+id/BidText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="0.25"
                android:text="0"
                android:textAlignment="center"
                android:textAppearance="?android:attr/textAppearanceLarge" />
            <ToggleButton
                android:id="@+id/MinorSuitsToggle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0.25"
                android:checked="true"
                android:text="@string/minor_suits"
                android:textOff="@string/minor_suits"
                android:textOn="@string/minor_suits" />
            <ToggleButton
                android:id="@+id/MajorSuitsToggle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0.25"
                android:checked="false"
                android:text="@string/major_suits"
                android:textOff="@string/major_suits"
                android:textOn="@string/major_suits" />
            <ToggleButton
                android:id="@+id/NoTrumpToggle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0.25"
                android:checked="false"
                android:text="@string/no_trump"
                android:textOff="@string/no_trump"
                android:textOn="@string/no_trump" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <ToggleButton
                android:id="@+id/ContractToggle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:checked="true"
                android:text="@string/bid_normal"
                android:textOff="@string/bid_normal"
                android:textOn="@string/bid_normal" />
            <ToggleButton
                android:id="@+id/DoubleToggle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:checked="false"
                android:text="@string/bid_double"
                android:textOff="@string/bid_double"
                android:textOn="@string/bid_double" />
            <ToggleButton
                android:id="@+id/RedoubleToggle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:checked="false"
                android:text="@string/bid_redouble"
                android:textOff="@string/bid_redouble"
                android:textOn="@string/bid_redouble" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <ToggleButton
                android:id="@+id/NNToggle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:checked="true"
                android:text="@string/non_non"
                android:textOff="@string/non_non"
                android:textOn="@string/non_non" />
            <ToggleButton
                android:id="@+id/NVToggle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:checked="false"
                android:text="@string/non_vul"
                android:textOff="@string/non_vul"
                android:textOn="@string/non_vul" />
            <ToggleButton
                android:id="@+id/VNToggle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:checked="false"
                android:text="@string/vul_non"
                android:textOff="@string/vul_non"
                android:textOn="@string/vul_non" />
            <ToggleButton
                android:id="@+id/VVToggle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:checked="false"
                android:text="@string/vul_vul"
                android:textOff="@string/vul_vul"
                android:textOn="@string/vul_vul" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/PCText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="10dp"
                android:layout_marginRight="10dp"
                android:labelFor="@+id/PCInput"
                android:text="@string/pc"
                android:textAppearance="?android:attr/textAppearanceLarge" />
            <EditText
                android:id="@+id/PCInput"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="4"
                android:inputType="number" />
            <TextView
                android:id="@+id/TricksText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="10dp"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="10dp"
                android:layout_marginStart="20dp"
                android:labelFor="@+id/TricksInput"
                android:text="@string/tricks"
                android:textAppearance="?android:attr/textAppearanceLarge" />
            <EditText
                android:id="@+id/TricksInput"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="4"
                android:inputType="number" />
        </LinearLayout>
        <TextView
            android:id="@+id/BidText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="0.25"
            android:text="0"
            android:textAlignment="gravity"
            android:textAppearance="?android:attr/textAppearanceLarge" />
        <ToggleButton
            android:id="@+id/MinorSuitsToggle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"
            android:checked="true"
            android:text="@string/minor_suits"
            android:textOff="@string/minor_suits"
            android:textOn="@string/minor_suits" />
        <ToggleButton
            android:id="@+id/MajorSuitsToggle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"
            android:checked="false"
            android:text="@string/major_suits"
            android:textOff="@string/major_suits"
            android:textOn="@string/major_suits" />
        <ToggleButton
            android:id="@+id/NoTrumpToggle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"
            android:checked="false"
            android:text="@string/no_trump"
            android:textOff="@string/no_trump"
            android:textOn="@string/no_trump" />
            android:id="@+id/ResultsText"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="10dp"
            android:text="@string/enter_data"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <ToggleButton
            android:id="@+id/ContractToggle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="true"
            android:text="@string/bid_normal"
            android:textOff="@string/bid_normal"
            android:textOn="@string/bid_normal" />
        <ToggleButton
            android:id="@+id/DoubleToggle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="false"
            android:text="@string/bid_double"
            android:textOff="@string/bid_double"
            android:textOn="@string/bid_double" />
        <ToggleButton
            android:id="@+id/RedoubleToggle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="false"
            android:text="@string/bid_redouble"
            android:textOff="@string/bid_redouble"
            android:textOn="@string/bid_redouble" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <ToggleButton
            android:id="@+id/NNToggle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="true"
            android:text="@string/before_before"
            android:textOff="@string/before_before"
            android:textOn="@string/before_before" />
        <ToggleButton
            android:id="@+id/NVToggle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="false"
            android:text="@string/before_after"
            android:textOff="@string/before_after"
            android:textOn="@string/before_after" />
        <ToggleButton
            android:id="@+id/VNToggle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="false"
            android:text="@string/after_before"
            android:textOff="@string/after_before"
            android:textOn="@string/after_before" />
        <ToggleButton
            android:id="@+id/VVToggle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="false"
            android:text="@string/after_after"
            android:textOff="@string/after_after"
            android:textOn="@string/after_after" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/PCText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:labelFor="@+id/PCInput"
            android:text="@string/pc"
            android:textAppearance="?android:attr/textAppearanceLarge" />
        <EditText
            android:id="@+id/PCInput"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="4"
            android:inputType="number" />
        <Space
            android:layout_width="20dp"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/TricksText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:labelFor="@+id/TricksInput"
            android:text="@string/tricks"
            android:textAppearance="?android:attr/textAppearanceLarge" />
        <EditText
            android:id="@+id/TricksInput"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="4"
            android:inputType="number" />
    </LinearLayout>
    <TextView
        android:id="@+id/ResultsText"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp"
        android:text="@string/enter_data"
        android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
</ScrollView>
app/src/main/res/menu/main.xml
New file
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/main_action_reset"
        android:icon="@android:drawable/ic_menu_revert"
        android:title="@string/reset"
        android:showAsAction="ifRoom"/>
    <item
        android:id="@+id/main_action_about"
        android:icon="@android:drawable/ic_menu_info_details"
        android:title="@string/about"
        android:showAsAction="ifRoom" />
</menu>
app/src/main/res/values-pl/strings.xml
@@ -2,14 +2,51 @@
<resources>
    <string name="app_name">Obliczenia brydżowe</string>
    <string name="reset">Wyczyść</string>
    <string name="about">O programie</string>
    <string name="about_title">Obliczenia brydżowe - O programie</string>
    <string name="about_version">Wersja</string>
    <string name="about_author">Autor</string>
    <string name="about_author_contents">Jacek Kowalski</string>
    <string name="about_url">WWW</string>
    <string name="about_url_contents">https://dev.jacekk.net/brydz</string>
    <string name="about_license">Licencja</string>
    <string name="about_license_contents">Trzyklauzulowa licencja BSD</string>
    <string name="about_license_full">Copyright © 2012-2015 Jacek Kowalski\n
Wszystkie prawa zastrzeżone.\n
\n
Rozpowszechnianie i używanie oprogramowania, czy to w formie kodu źródłowego, czy w formie kodu
        wykonywalnego, są dozwolone pod warunkiem spełnienia poniższych warunków:\n
1. Rozpowszechniany kod źródłowy musi zawierać powyższą notę dotyczącą praw autorskich,
        niniejszą listę warunków oraz poniższe oświadczenie o wyłączeniu odpowiedzialności.\n
2. Rozpowszechniany kod wykonywalny musi zawierać powyższą notę dotyczącą praw autorskich,
        niniejszą listę warunków oraz poniższe oświadczenie o wyłączeniu odpowiedzialności
        w dokumentacji i/lub w innych materiałach dostarczanych wraz z kopią oprogramowania.\n
3. Ani nazwa Jacekk.info, ani nazwa Jacekk.net, ani nazwiska twórców i współpracowników nie mogą
        być użyte dla ukazania ich aprobaty dla prac pochodnych od tego oprogramowania lub ich
        promowania bez szczególnego, wyrażonego na piśmie zezwolenia danej osoby lub organizacji.\n
\n
To oprogramowanie jest dostarczone przez właścicieli praw autorskich "takim, jakie jest". Wszelkie
        dorozumiane lub bezpośrednio wyrażone gwarancje, nie wyłączając gwarancji przydatności
        handlowej i przydatności do określonego zastosowania, są wyłączone. W żadnym wypadku
        posiadacze praw autorskich oraz współtwórcy nie mogą być odpowiedzialni za jakiekolwiek
        bezpośrednie, pośrednie, przypadkowe, specjalne, uboczne lub wtórne szkody (w tym obowiązek
        dostarczenia produktu zastępczego lub serwisu, utratę danych lub korzyści, a także przerwę
        w pracy przedsiębiorstwa) spowodowane w jakikolwiek sposób i niezależnie od przyczyn
        odpowiedzialności, takich jak: teoretyczna odpowiedzialność kontraktowa lub deliktowa
        (wynikła zarówno z niedbalstwa, jak i z innych przyczyn), powstałe w jakikolwiek sposób
        w wyniku używania lub mające związek z używaniem oprogramowania, nawet jeśli o możliwości
        powstania takich szkód ostrzeżono.</string>
    <string name="minor_suits">♣ / ♦</string>
    <string name="major_suits">♥ / ♠</string>
    <string name="no_trump">NT</string>
    <string name="before_before">przed/przed</string>
    <string name="before_after">przed/po</string>
    <string name="after_before">po/przed</string>
    <string name="after_after">po/po</string>
    <string name="non_non">przed/przed</string>
    <string name="non_vul">przed/po</string>
    <string name="vul_non">po/przed</string>
    <string name="vul_vul">po/po</string>
    <string name="bid_normal">norm.</string>
    <string name="bid_double">ktr.</string>
@@ -22,14 +59,12 @@
    <string name="invalid_level">Niepoprawny kontrakt.</string>
    <string name="invalid_color">Niepoprawny kolor kontraktu.</string>
    <string name="invalid_contract">Niepoprawna informacja o kontrze.</string>
    <string name="invalid_vulnerability">Niepoprawna informacja o partii.</string>
    <string name="invalid_pc">Niepoprawna ilość punktów.</string>
    <string name="invalid_tricks">Niepoprawna ilość wziętych lew.</string>
    <string name="invalid_passes">Przy czterech pasach podaj większą liczę punktów.</string>
    <string name="result_for_us">Zapis dla rozgrywających.</string>
    <string name="result_for_them">Zapis dla przeciwników.</string>
    <string name="result_pts_wo_pc">Punktów (bez PC):</string>
    <string name="result_pts">Punktów (z PC):</string>
    <string name="result_imps">IMP-ów:</string>
app/src/main/res/values-w820dp/dimens.xml
New file
@@ -0,0 +1,6 @@
<resources>
    <!-- Example customization of dimensions originally defined in res/values/dimens.xml
         (such as screen margins) for screens with more than 820dp of available width. This
         would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
    <dimen name="activity_horizontal_margin">64dp</dimen>
</resources>
app/src/main/res/values/dimens.xml
New file
@@ -0,0 +1,5 @@
<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
</resources>
app/src/main/res/values/strings.xml
@@ -2,14 +2,49 @@
<resources>
    <string name="app_name">Bridge scoring</string>
    <string name="reset">Reset</string>
    <string name="about">About</string>
    <string name="about_title">Bridge scoring - About</string>
    <string name="about_version">Version</string>
    <string name="about_author">Author</string>
    <string name="about_author_contents">Jacek Kowalski</string>
    <string name="about_url">WWW</string>
    <string name="about_url_contents">https://dev.jacekk.net/brydz</string>
    <string name="about_license">License</string>
    <string name="about_license_contents">BSD 3-clause license</string>
    <string name="about_license_full">Copyright © 2012-2015 Jacek Kowalski\n
All rights reserved.\n
\n
Redistribution and use in source and binary forms, with or without modification, are permitted
        provided that the following conditions are met:\n
1. Redistributions of source code must retain the above copyright notice, this list of conditions
        and the following disclaimer.\n
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
        and the following disclaimer in the documentation and/or other materials provided with the
        distribution.\n
3. Neither the name Jacekk.info, nor Jacekk.net, nor the names of its contributors may be used to
        endorse or promote products derived from this software without specific prior written
        permission.\n
\n
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
        IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
        AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
        OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
        SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
        OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        POSSIBILITY OF SUCH DAMAGE.</string>
    <string name="minor_suits">♣ / ♦</string>
    <string name="major_suits">♥ / ♠</string>
    <string name="no_trump">NT</string>
    <string name="before_before">non./non</string>
    <string name="before_after">non./vuln.</string>
    <string name="after_before">vuln./non.</string>
    <string name="after_after">vuln./vuln.</string>
    <string name="non_non">non./non.</string>
    <string name="non_vul">non./vuln.</string>
    <string name="vul_non">vuln./non.</string>
    <string name="vul_vul">vuln./vuln.</string>
    <string name="bid_normal">norm.</string>
    <string name="bid_double">dbl.</string>
@@ -22,14 +57,12 @@
    <string name="invalid_level">Invalid contract level.</string>
    <string name="invalid_color">Invalid contract color.</string>
    <string name="invalid_contract">Invalid information about doubling/redoubling.</string>
    <string name="invalid_vulnerability">Invalid information about vulnerability.</string>
    <string name="invalid_pc">Invalid number for Milton Work Point Count.</string>
    <string name="invalid_tricks">Invalid number of tricks taken.</string>
    <string name="invalid_passes">For four passes enter data for side with more PCs.</string>
    <string name="result_for_us">Score for declaring side.</string>
    <string name="result_for_them">Score for defending side.</string>
    <string name="result_pts_wo_pc">Points (excl. PC):</string>
    <string name="result_pts">Points (incl. PC):</string>
    <string name="result_imps">IMPs:</string>