Commit c8c45cee authored by Bartek Fabiszewski's avatar Bartek Fabiszewski
Browse files

Warn user on changing server setup if track is open, closes #19

parent ad2b0fcb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ android {

    lintOptions {
        disable 'GoogleAppIndexingWarning'
        disable 'MissingTranslation'
    }
}

+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);
    }
}
+40 −53
Original line number Diff line number Diff line
@@ -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;
@@ -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
 *
@@ -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))) {
@@ -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)));
@@ -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();
            }
        });
    }

    /**
@@ -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();
        );
    }

    /**
@@ -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());
@@ -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() {
@@ -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;
@@ -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;
+22 −0
Original line number Diff line number Diff line
@@ -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
+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
  ~
@@ -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