Loading app/build.gradle +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ android { lintOptions { disable 'GoogleAppIndexingWarning' disable 'MissingTranslation' } } Loading app/src/main/java/net/fabiszewski/ulogger/Alert.java 0 → 100644 +103 −0 Original line number Diff line number Diff line /* * Copyright (c) 2017 Bartek Fabiszewski * http://www.fabiszewski.net * * This file is part of μlogger-android. * Licensed under GPL, either version 3, or any later. * See <http://www.gnu.org/licenses/> */ package net.fabiszewski.ulogger; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.view.View; class Alert { /** * Show confirmation dialog, OK and Cancel buttons * @param context Context * @param title Title * @param message Message * @param yesCallback Positive button callback */ static void showConfirm(Context context, CharSequence title, CharSequence message, DialogInterface.OnClickListener yesCallback) { AlertDialog alertDialog = initDialog(context, title, message); alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, context.getString(R.string.ok), yesCallback); alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, context.getString(R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); } /** * Show information dialog with OK button * @param context Context * @param title Title * @param message Message */ static void showInfo(Context context, CharSequence title, CharSequence message) { AlertDialog alertDialog = initDialog(context, title, message); alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, context.getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); } /** * Set up basic dialog * @param context Context * @param title Title * @param message Message * @return AlertDialog Dialog */ private static AlertDialog initDialog(Context context, CharSequence title, CharSequence message) { AlertDialog alertDialog = new AlertDialog.Builder(context).create(); alertDialog.setTitle(title); alertDialog.setMessage(message); return alertDialog; } /** * Show dialog * @param context Context * @param title Title * @param layoutResource Layout resource id * @param iconResource Icon resource id * @return AlertDialog Dialog */ static AlertDialog showAlert(Context context, CharSequence title, int layoutResource, int iconResource) { @SuppressLint("InflateParams") View view = ((Activity) context).getLayoutInflater().inflate(layoutResource, null, false); AlertDialog alertDialog = new AlertDialog.Builder(context).create(); alertDialog.setTitle(title); alertDialog.setView(view); if (iconResource > 0) { alertDialog.setIcon(iconResource); } alertDialog.show(); return alertDialog; } /** * Show dialog * @param context Context * @param title Title * @param layoutResource Layout resource id * @return AlertDialog Dialog */ static AlertDialog showAlert(Context context, CharSequence title, int layoutResource) { return showAlert(context, title, layoutResource, 0); } } app/src/main/java/net/fabiszewski/ulogger/MainActivity.java +40 −53 Original line number Diff line number Diff line Loading @@ -10,9 +10,7 @@ package net.fabiszewski.ulogger; import android.Manifest; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; Loading Loading @@ -48,6 +46,8 @@ import java.util.Date; import java.util.Locale; import java.util.TimeZone; import static net.fabiszewski.ulogger.Alert.*; /** * Main activity of ulogger * Loading Loading @@ -345,23 +345,20 @@ public class MainActivity extends AppCompatActivity { return; } @SuppressLint("InflateParams") View summaryView = getLayoutInflater().inflate(R.layout.summary, null, false); AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); alertDialog.setTitle(getString(R.string.track_summary)); alertDialog.setView(summaryView); alertDialog.setIcon(R.drawable.ic_equalizer_white_24dp); alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { final AlertDialog dialog = showAlert(MainActivity.this, getString(R.string.track_summary), R.layout.summary, R.drawable.ic_equalizer_white_24dp); final Button okButton = (Button) dialog.findViewById(R.id.summary_button_ok); okButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); alertDialog.show(); final TextView summaryDistance = (TextView) alertDialog.findViewById(R.id.summary_distance); final TextView summaryDuration = (TextView) alertDialog.findViewById(R.id.summary_duration); final TextView summaryPositions = (TextView) alertDialog.findViewById(R.id.summary_positions); final TextView summaryDistance = (TextView) dialog.findViewById(R.id.summary_distance); final TextView summaryDuration = (TextView) dialog.findViewById(R.id.summary_duration); final TextView summaryPositions = (TextView) dialog.findViewById(R.id.summary_positions); double distance = (double) summary.getDistance() / 1000; String unitName = getString(R.string.unit_kilometer); if (pref_units.equals(getString(R.string.pref_units_imperial))) { Loading Loading @@ -406,23 +403,14 @@ public class MainActivity extends AppCompatActivity { * Display About dialog */ private void showAbout() { @SuppressLint("InflateParams") View view = getLayoutInflater().inflate(R.layout.about, null, false); AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); alertDialog.setTitle(getString(R.string.app_name)); alertDialog.setView(view); alertDialog.setIcon(R.drawable.ic_ulogger_logo_24dp); alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); final TextView versionLabel = (TextView) alertDialog.findViewById(R.id.about_version); final AlertDialog dialog = showAlert(MainActivity.this, getString(R.string.app_name), R.layout.about, R.drawable.ic_ulogger_logo_24dp); final TextView versionLabel = (TextView) dialog.findViewById(R.id.about_version); versionLabel.setText(getString(R.string.about_version, BuildConfig.VERSION_NAME)); final TextView descriptionLabel = (TextView) alertDialog.findViewById(R.id.about_description); final TextView description2Label = (TextView) alertDialog.findViewById(R.id.about_description2); final TextView descriptionLabel = (TextView) dialog.findViewById(R.id.about_description); final TextView description2Label = (TextView) dialog.findViewById(R.id.about_description2); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { descriptionLabel.setText(fromHtmlDepreciated(getString(R.string.about_description))); description2Label.setText(fromHtmlDepreciated(getString(R.string.about_description2))); Loading @@ -430,6 +418,13 @@ public class MainActivity extends AppCompatActivity { descriptionLabel.setText(Html.fromHtml(getString(R.string.about_description), android.text.Html.FROM_HTML_MODE_LEGACY)); description2Label.setText(Html.fromHtml(getString(R.string.about_description2), android.text.Html.FROM_HTML_MODE_LEGACY)); } final Button okButton = (Button) dialog.findViewById(R.id.about_button_ok); okButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); } /** Loading @@ -446,23 +441,16 @@ public class MainActivity extends AppCompatActivity { * Display warning before deleting not synchronized track */ private void showNotSyncedWarning() { AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); alertDialog.setTitle(getString(R.string.warning)); alertDialog.setMessage(getString(R.string.notsync_warning)); alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, getString(R.string.ok), showConfirm(MainActivity.this, getString(R.string.warning), getString(R.string.notsync_warning), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); showTrackDialog(); } }); alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); ); } /** Loading @@ -476,9 +464,9 @@ public class MainActivity extends AppCompatActivity { * Display track name dialog */ private void showTrackDialog() { final Dialog dialog = new Dialog(MainActivity.this); dialog.setTitle(R.string.title_newtrack); dialog.setContentView(R.layout.newtrack_dialog); final AlertDialog dialog = showAlert(MainActivity.this, getString(R.string.title_newtrack), R.layout.newtrack_dialog); final EditText editText = (EditText) dialog.findViewById(R.id.newtrack_edittext); final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd_HH.mm.ss", Locale.getDefault()); sdf.setTimeZone(TimeZone.getDefault()); Loading @@ -491,7 +479,6 @@ public class MainActivity extends AppCompatActivity { editText.selectAll(); } }); dialog.show(); final Button submit = (Button) dialog.findViewById(R.id.newtrack_button_submit); submit.setOnClickListener(new View.OnClickListener() { Loading Loading @@ -711,7 +698,7 @@ public class MainActivity extends AppCompatActivity { syncErrorLabel.setText(null); syncError = false; } // show message if manual uploading // showConfirm message if manual uploading if (isUploading && unsyncedCount == 0) { showToast(getString(R.string.uploading_done)); isUploading = false; Loading @@ -723,7 +710,7 @@ public class MainActivity extends AppCompatActivity { String message = intent.getStringExtra("message"); syncErrorLabel.setText(message); syncError = true; // show message if manual uploading // showConfirm message if manual uploading if (isUploading) { showToast(getString(R.string.uploading_failed) + "\n" + message, Toast.LENGTH_LONG); isUploading = false; Loading app/src/main/java/net/fabiszewski/ulogger/SettingsActivity.java +22 −0 Original line number Diff line number Diff line Loading @@ -137,6 +137,28 @@ public class SettingsActivity extends PreferenceActivity { }; /** * On click listener to warn if server setup has changed */ private final static Preference.OnPreferenceClickListener serverSetupClicked = new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { final Context context = preference.getContext(); DbAccess db = DbAccess.getInstance(); db.open(context); if (db.getTrackId() > 0) { // track saved on server Alert.showInfo(context, context.getString(R.string.warning), context.getString(R.string.track_server_setup_warning) ); } return true; } }; /** * Check whether server setup parameters are set * @param context Context Loading app/src/main/res/layout/about.xml +28 −13 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- <?xml version="1.0" encoding="utf-8"?><!-- ~ Copyright (c) 2017 Bartek Fabiszewski ~ http://www.fabiszewski.net ~ Loading @@ -9,41 +8,57 @@ --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="20dip"> <TextView android:id="@+id/about_description" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:text="@string/about_description" /> android:text="@string/about_description" android:textSize="16sp" /> <TextView android:id="@+id/about_description2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:textSize="16sp" android:text="@string/about_description2" /> android:text="@string/about_description2" android:textSize="16sp" /> <TextView android:id="@+id/about_version" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="15dip" android:textSize="16sp" android:text="@string/about_version"/> android:text="@string/about_version" android:textSize="16sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:text="@string/about_license"/> android:text="@string/about_license" android:textSize="16sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:autoLink="web" android:paddingTop="15dip" android:textSize="16sp" android:text="@string/about_credits" android:autoLink="web" /> android:textSize="16sp" /> <TableRow android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="30dip"> <Button android:id="@+id/about_button_ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/ok" /> </TableRow> </LinearLayout> No newline at end of file Loading
app/build.gradle +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ android { lintOptions { disable 'GoogleAppIndexingWarning' disable 'MissingTranslation' } } Loading
app/src/main/java/net/fabiszewski/ulogger/Alert.java 0 → 100644 +103 −0 Original line number Diff line number Diff line /* * Copyright (c) 2017 Bartek Fabiszewski * http://www.fabiszewski.net * * This file is part of μlogger-android. * Licensed under GPL, either version 3, or any later. * See <http://www.gnu.org/licenses/> */ package net.fabiszewski.ulogger; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.view.View; class Alert { /** * Show confirmation dialog, OK and Cancel buttons * @param context Context * @param title Title * @param message Message * @param yesCallback Positive button callback */ static void showConfirm(Context context, CharSequence title, CharSequence message, DialogInterface.OnClickListener yesCallback) { AlertDialog alertDialog = initDialog(context, title, message); alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, context.getString(R.string.ok), yesCallback); alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, context.getString(R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); } /** * Show information dialog with OK button * @param context Context * @param title Title * @param message Message */ static void showInfo(Context context, CharSequence title, CharSequence message) { AlertDialog alertDialog = initDialog(context, title, message); alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, context.getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); } /** * Set up basic dialog * @param context Context * @param title Title * @param message Message * @return AlertDialog Dialog */ private static AlertDialog initDialog(Context context, CharSequence title, CharSequence message) { AlertDialog alertDialog = new AlertDialog.Builder(context).create(); alertDialog.setTitle(title); alertDialog.setMessage(message); return alertDialog; } /** * Show dialog * @param context Context * @param title Title * @param layoutResource Layout resource id * @param iconResource Icon resource id * @return AlertDialog Dialog */ static AlertDialog showAlert(Context context, CharSequence title, int layoutResource, int iconResource) { @SuppressLint("InflateParams") View view = ((Activity) context).getLayoutInflater().inflate(layoutResource, null, false); AlertDialog alertDialog = new AlertDialog.Builder(context).create(); alertDialog.setTitle(title); alertDialog.setView(view); if (iconResource > 0) { alertDialog.setIcon(iconResource); } alertDialog.show(); return alertDialog; } /** * Show dialog * @param context Context * @param title Title * @param layoutResource Layout resource id * @return AlertDialog Dialog */ static AlertDialog showAlert(Context context, CharSequence title, int layoutResource) { return showAlert(context, title, layoutResource, 0); } }
app/src/main/java/net/fabiszewski/ulogger/MainActivity.java +40 −53 Original line number Diff line number Diff line Loading @@ -10,9 +10,7 @@ package net.fabiszewski.ulogger; import android.Manifest; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; Loading Loading @@ -48,6 +46,8 @@ import java.util.Date; import java.util.Locale; import java.util.TimeZone; import static net.fabiszewski.ulogger.Alert.*; /** * Main activity of ulogger * Loading Loading @@ -345,23 +345,20 @@ public class MainActivity extends AppCompatActivity { return; } @SuppressLint("InflateParams") View summaryView = getLayoutInflater().inflate(R.layout.summary, null, false); AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); alertDialog.setTitle(getString(R.string.track_summary)); alertDialog.setView(summaryView); alertDialog.setIcon(R.drawable.ic_equalizer_white_24dp); alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { final AlertDialog dialog = showAlert(MainActivity.this, getString(R.string.track_summary), R.layout.summary, R.drawable.ic_equalizer_white_24dp); final Button okButton = (Button) dialog.findViewById(R.id.summary_button_ok); okButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); alertDialog.show(); final TextView summaryDistance = (TextView) alertDialog.findViewById(R.id.summary_distance); final TextView summaryDuration = (TextView) alertDialog.findViewById(R.id.summary_duration); final TextView summaryPositions = (TextView) alertDialog.findViewById(R.id.summary_positions); final TextView summaryDistance = (TextView) dialog.findViewById(R.id.summary_distance); final TextView summaryDuration = (TextView) dialog.findViewById(R.id.summary_duration); final TextView summaryPositions = (TextView) dialog.findViewById(R.id.summary_positions); double distance = (double) summary.getDistance() / 1000; String unitName = getString(R.string.unit_kilometer); if (pref_units.equals(getString(R.string.pref_units_imperial))) { Loading Loading @@ -406,23 +403,14 @@ public class MainActivity extends AppCompatActivity { * Display About dialog */ private void showAbout() { @SuppressLint("InflateParams") View view = getLayoutInflater().inflate(R.layout.about, null, false); AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); alertDialog.setTitle(getString(R.string.app_name)); alertDialog.setView(view); alertDialog.setIcon(R.drawable.ic_ulogger_logo_24dp); alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); final TextView versionLabel = (TextView) alertDialog.findViewById(R.id.about_version); final AlertDialog dialog = showAlert(MainActivity.this, getString(R.string.app_name), R.layout.about, R.drawable.ic_ulogger_logo_24dp); final TextView versionLabel = (TextView) dialog.findViewById(R.id.about_version); versionLabel.setText(getString(R.string.about_version, BuildConfig.VERSION_NAME)); final TextView descriptionLabel = (TextView) alertDialog.findViewById(R.id.about_description); final TextView description2Label = (TextView) alertDialog.findViewById(R.id.about_description2); final TextView descriptionLabel = (TextView) dialog.findViewById(R.id.about_description); final TextView description2Label = (TextView) dialog.findViewById(R.id.about_description2); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { descriptionLabel.setText(fromHtmlDepreciated(getString(R.string.about_description))); description2Label.setText(fromHtmlDepreciated(getString(R.string.about_description2))); Loading @@ -430,6 +418,13 @@ public class MainActivity extends AppCompatActivity { descriptionLabel.setText(Html.fromHtml(getString(R.string.about_description), android.text.Html.FROM_HTML_MODE_LEGACY)); description2Label.setText(Html.fromHtml(getString(R.string.about_description2), android.text.Html.FROM_HTML_MODE_LEGACY)); } final Button okButton = (Button) dialog.findViewById(R.id.about_button_ok); okButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); } /** Loading @@ -446,23 +441,16 @@ public class MainActivity extends AppCompatActivity { * Display warning before deleting not synchronized track */ private void showNotSyncedWarning() { AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); alertDialog.setTitle(getString(R.string.warning)); alertDialog.setMessage(getString(R.string.notsync_warning)); alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, getString(R.string.ok), showConfirm(MainActivity.this, getString(R.string.warning), getString(R.string.notsync_warning), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); showTrackDialog(); } }); alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alertDialog.show(); ); } /** Loading @@ -476,9 +464,9 @@ public class MainActivity extends AppCompatActivity { * Display track name dialog */ private void showTrackDialog() { final Dialog dialog = new Dialog(MainActivity.this); dialog.setTitle(R.string.title_newtrack); dialog.setContentView(R.layout.newtrack_dialog); final AlertDialog dialog = showAlert(MainActivity.this, getString(R.string.title_newtrack), R.layout.newtrack_dialog); final EditText editText = (EditText) dialog.findViewById(R.id.newtrack_edittext); final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd_HH.mm.ss", Locale.getDefault()); sdf.setTimeZone(TimeZone.getDefault()); Loading @@ -491,7 +479,6 @@ public class MainActivity extends AppCompatActivity { editText.selectAll(); } }); dialog.show(); final Button submit = (Button) dialog.findViewById(R.id.newtrack_button_submit); submit.setOnClickListener(new View.OnClickListener() { Loading Loading @@ -711,7 +698,7 @@ public class MainActivity extends AppCompatActivity { syncErrorLabel.setText(null); syncError = false; } // show message if manual uploading // showConfirm message if manual uploading if (isUploading && unsyncedCount == 0) { showToast(getString(R.string.uploading_done)); isUploading = false; Loading @@ -723,7 +710,7 @@ public class MainActivity extends AppCompatActivity { String message = intent.getStringExtra("message"); syncErrorLabel.setText(message); syncError = true; // show message if manual uploading // showConfirm message if manual uploading if (isUploading) { showToast(getString(R.string.uploading_failed) + "\n" + message, Toast.LENGTH_LONG); isUploading = false; Loading
app/src/main/java/net/fabiszewski/ulogger/SettingsActivity.java +22 −0 Original line number Diff line number Diff line Loading @@ -137,6 +137,28 @@ public class SettingsActivity extends PreferenceActivity { }; /** * On click listener to warn if server setup has changed */ private final static Preference.OnPreferenceClickListener serverSetupClicked = new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { final Context context = preference.getContext(); DbAccess db = DbAccess.getInstance(); db.open(context); if (db.getTrackId() > 0) { // track saved on server Alert.showInfo(context, context.getString(R.string.warning), context.getString(R.string.track_server_setup_warning) ); } return true; } }; /** * Check whether server setup parameters are set * @param context Context Loading
app/src/main/res/layout/about.xml +28 −13 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- <?xml version="1.0" encoding="utf-8"?><!-- ~ Copyright (c) 2017 Bartek Fabiszewski ~ http://www.fabiszewski.net ~ Loading @@ -9,41 +8,57 @@ --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="20dip"> <TextView android:id="@+id/about_description" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:text="@string/about_description" /> android:text="@string/about_description" android:textSize="16sp" /> <TextView android:id="@+id/about_description2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:textSize="16sp" android:text="@string/about_description2" /> android:text="@string/about_description2" android:textSize="16sp" /> <TextView android:id="@+id/about_version" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="15dip" android:textSize="16sp" android:text="@string/about_version"/> android:text="@string/about_version" android:textSize="16sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:text="@string/about_license"/> android:text="@string/about_license" android:textSize="16sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:autoLink="web" android:paddingTop="15dip" android:textSize="16sp" android:text="@string/about_credits" android:autoLink="web" /> android:textSize="16sp" /> <TableRow android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="30dip"> <Button android:id="@+id/about_button_ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/ok" /> </TableRow> </LinearLayout> No newline at end of file