From 6421f09eabfb90500feebac464ba9a30ea403c18 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sun, 18 Apr 2021 13:47:51 +0200 Subject: [PATCH] Implement multi-copy and multi-share --- .../card_locker/BarcodeSelectorActivity.java | 7 ++-- .../card_locker/BaseCursorAdapter.java | 1 + .../card_locker/CardShortcutConfigure.java | 12 ++---- .../java/protect/card_locker/DBHelper.java | 3 +- .../card_locker/ImportExportActivity.java | 17 ++++---- .../protect/card_locker/ImportExportTask.java | 1 - .../protect/card_locker/ImportURIHelper.java | 31 +++++++++++--- .../card_locker/LoyaltyCardEditActivity.java | 24 +++++------ .../LoyaltyCardLockerApplication.java | 2 +- .../card_locker/LoyaltyCardViewActivity.java | 23 +++++----- .../protect/card_locker/MainActivity.java | 42 ++++++++++--------- .../main/java/protect/card_locker/Utils.java | 17 ++++---- .../importexport/CsvDatabaseImporter.java | 6 --- .../importexport/DatabaseImporter.java | 2 - .../importexport/FidmeImporter.java | 12 ------ .../importexport/MultiFormatExporter.java | 2 - .../importexport/MultiFormatImporter.java | 3 -- .../card_locker/preferences/Settings.java | 4 +- .../preferences/SettingsActivity.java | 10 ++--- app/src/main/res/menu/card_add_menu.xml | 3 +- app/src/main/res/values/strings.xml | 1 + .../card_locker/ImportExportActivityTest.java | 7 ++-- .../protect/card_locker/ImportExportTest.java | 4 +- .../protect/card_locker/ImportURITest.java | 4 +- .../LoyaltyCardCursorAdapterTest.java | 8 ++-- .../LoyaltyCardViewActivityTest.java | 38 +++++++++-------- .../protect/card_locker/MainActivityTest.java | 29 +++++-------- .../java/protect/card_locker/UtilsTest.java | 2 - logo.svg | 19 ++------- 29 files changed, 149 insertions(+), 185 deletions(-) diff --git a/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java b/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java index 2c4b0c9cd..191a6e010 100644 --- a/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java +++ b/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java @@ -4,9 +4,6 @@ import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; @@ -28,6 +25,10 @@ import java.util.Collections; import java.util.LinkedList; import java.util.Map; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + /** * This activity is callable and will allow a user to enter * barcode data and generate all barcodes possible for diff --git a/app/src/main/java/protect/card_locker/BaseCursorAdapter.java b/app/src/main/java/protect/card_locker/BaseCursorAdapter.java index ee80b7c0c..a20041e1d 100644 --- a/app/src/main/java/protect/card_locker/BaseCursorAdapter.java +++ b/app/src/main/java/protect/card_locker/BaseCursorAdapter.java @@ -1,6 +1,7 @@ package protect.card_locker; import android.database.Cursor; + import androidx.recyclerview.widget.RecyclerView; public abstract class BaseCursorAdapter extends RecyclerView.Adapter diff --git a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java index e34ebccd9..c6a8cee52 100644 --- a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java +++ b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java @@ -2,22 +2,18 @@ package protect.card_locker; import android.content.Intent; import android.database.Cursor; -import android.graphics.Bitmap; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import androidx.core.content.pm.ShortcutInfoCompat; -import androidx.core.content.pm.ShortcutManagerCompat; -import androidx.core.graphics.drawable.IconCompat; - import android.os.Parcelable; import android.util.Log; import android.view.View; import android.widget.Toast; -import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.floatingactionbutton.FloatingActionButton; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.recyclerview.widget.RecyclerView; + /** * The configuration screen for creating a shortcut. */ diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index 140a786df..bf7ad087a 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -6,14 +6,13 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; -import android.graphics.Color; import com.google.zxing.BarcodeFormat; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Currency; import java.util.Date; -import java.util.ArrayList; import java.util.List; public class DBHelper extends SQLiteOpenHelper diff --git a/app/src/main/java/protect/card_locker/ImportExportActivity.java b/app/src/main/java/protect/card_locker/ImportExportActivity.java index 97b243b75..2445605a9 100644 --- a/app/src/main/java/protect/card_locker/ImportExportActivity.java +++ b/app/src/main/java/protect/card_locker/ImportExportActivity.java @@ -8,15 +8,6 @@ import android.content.pm.PackageManager; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; - -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; - -import android.provider.ContactsContract; import android.util.Log; import android.view.MenuItem; import android.view.View; @@ -29,7 +20,13 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; -import java.text.DateFormat; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; public class ImportExportActivity extends AppCompatActivity { diff --git a/app/src/main/java/protect/card_locker/ImportExportTask.java b/app/src/main/java/protect/card_locker/ImportExportTask.java index 9ea99c627..8e288b345 100644 --- a/app/src/main/java/protect/card_locker/ImportExportTask.java +++ b/app/src/main/java/protect/card_locker/ImportExportTask.java @@ -8,7 +8,6 @@ import android.util.Log; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; diff --git a/app/src/main/java/protect/card_locker/ImportURIHelper.java b/app/src/main/java/protect/card_locker/ImportURIHelper.java index ed2d7f1df..269e91a2e 100644 --- a/app/src/main/java/protect/card_locker/ImportURIHelper.java +++ b/app/src/main/java/protect/card_locker/ImportURIHelper.java @@ -10,6 +10,7 @@ import java.io.InvalidObjectException; import java.math.BigDecimal; import java.util.Currency; import java.util.Date; +import java.util.List; public class ImportURIHelper { private static final String STORE = DBHelper.LoyaltyCardDbIds.STORE; @@ -29,6 +30,7 @@ public class ImportURIHelper { private final String oldHost; private final String oldPath; private final String shareText; + private final String shareMultipleText; public ImportURIHelper(Context context) { this.context = context; @@ -37,6 +39,7 @@ public class ImportURIHelper { oldHost = "brarcher.github.io"; oldPath = "/loyalty-card-locker/share"; shareText = context.getResources().getString(R.string.intent_import_card_from_url_share_text); + shareMultipleText = context.getResources().getString(R.string.intent_import_card_from_url_share_multiple_text); } private boolean isImportUri(Uri uri) { @@ -126,17 +129,33 @@ public class ImportURIHelper { return uriBuilder.build(); } - private void startShareIntent(Uri uri) { + public void startShareIntent(List loyaltyCards) { + int loyaltyCardCount = loyaltyCards.size(); + + StringBuilder text = new StringBuilder(); + if (loyaltyCardCount == 1) { + text.append(shareText); + } else { + text.append(shareMultipleText); + } + text.append("\n\n"); + + for (int i = 0; i < loyaltyCardCount; i++) { + LoyaltyCard loyaltyCard = loyaltyCards.get(i); + + text.append(loyaltyCard.store + ": " + toUri(loyaltyCard)); + + if (i < (loyaltyCardCount - 1)) { + text.append("\n"); + } + } + Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); - sendIntent.putExtra(Intent.EXTRA_TEXT, shareText + "\n" + uri.toString()); + sendIntent.putExtra(Intent.EXTRA_TEXT, text.toString()); sendIntent.setType("text/plain"); Intent shareIntent = Intent.createChooser(sendIntent, null); context.startActivity(shareIntent); } - - public void startShareIntent(LoyaltyCard loyaltyCard) { - startShareIntent(toUri(loyaltyCard)); - } } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 7d1430fb8..39ef4424d 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -6,22 +6,10 @@ import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.content.res.TypedArray; -import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.os.Build; import android.os.Bundle; - -import com.google.android.material.chip.Chip; -import com.google.android.material.chip.ChipGroup; -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.google.android.material.snackbar.Snackbar; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import androidx.fragment.app.DialogFragment; - import android.os.LocaleList; import android.text.Editable; import android.text.InputType; @@ -29,7 +17,6 @@ import android.text.TextWatcher; import android.util.Log; import android.view.Menu; import android.view.MenuItem; -import android.view.MotionEvent; import android.view.View; import android.view.ViewTreeObserver; import android.view.WindowManager; @@ -42,6 +29,10 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import com.google.android.material.chip.Chip; +import com.google.android.material.chip.ChipGroup; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; import com.google.android.material.tabs.TabLayout; import com.google.zxing.BarcodeFormat; import com.jaredrummler.android.colorpicker.ColorPickerDialog; @@ -50,7 +41,6 @@ import com.jaredrummler.android.colorpicker.ColorPickerDialogListener; import java.io.InvalidObjectException; import java.math.BigDecimal; import java.text.DateFormat; -import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; @@ -60,6 +50,12 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.DialogFragment; + public class LoyaltyCardEditActivity extends AppCompatActivity { private static final String TAG = "Catima"; diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java b/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java index 0705435fc..43d950cc0 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java @@ -1,8 +1,8 @@ package protect.card_locker; import android.app.Application; -import androidx.appcompat.app.AppCompatDelegate; +import androidx.appcompat.app.AppCompatDelegate; import protect.card_locker.preferences.Settings; public class LoyaltyCardLockerApplication extends Application { diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 308151e51..28eb59169 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -7,24 +7,12 @@ import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.constraintlayout.widget.Guideline; -import androidx.core.graphics.drawable.DrawableCompat; -import androidx.core.widget.TextViewCompat; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.content.res.AppCompatResources; -import androidx.appcompat.widget.Toolbar; - import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.Window; import android.view.WindowManager; @@ -41,8 +29,17 @@ import com.google.zxing.BarcodeFormat; import java.math.BigDecimal; import java.text.DateFormat; +import java.util.Arrays; import java.util.List; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.content.res.AppCompatResources; +import androidx.appcompat.widget.Toolbar; +import androidx.constraintlayout.widget.Guideline; +import androidx.core.graphics.drawable.DrawableCompat; +import androidx.core.widget.TextViewCompat; import protect.card_locker.preferences.Settings; public class LoyaltyCardViewActivity extends AppCompatActivity @@ -491,7 +488,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity break; case R.id.action_share: - importURIHelper.startShareIntent(loyaltyCard); + importURIHelper.startShareIntent(Arrays.asList(loyaltyCard)); return true; case R.id.action_lock_unlock: diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index 6278ce259..edb945e3d 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -10,31 +10,27 @@ import android.content.res.Configuration; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.SearchView; -import androidx.appcompat.widget.Toolbar; import android.util.Log; import android.view.GestureDetector; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; -import android.widget.AdapterView; -import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.tabs.TabLayout; + +import java.util.List; + +import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.view.ActionMode; import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.Toolbar; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.google.android.material.tabs.TabLayout; -import java.util.List; - import protect.card_locker.preferences.SettingsActivity; public class MainActivity extends AppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener, GestureDetector.OnGestureListener @@ -80,12 +76,11 @@ public class MainActivity extends AppCompatActivity implements LoyaltyCardCursor } else { StringBuilder cardIds = new StringBuilder(); - - for (int i = 0; i < cardCount - 1; i++) { + for (int i = 0; i < cardCount; i++) { LoyaltyCard loyaltyCard = mAdapter.getSelectedItems().get(i); cardIds.append(loyaltyCard.store + ": " + loyaltyCard.cardId); - if (i != (cardCount - 1)) { + if (i < (cardCount - 1)) { cardIds.append("\n"); } } @@ -101,8 +96,8 @@ public class MainActivity extends AppCompatActivity implements LoyaltyCardCursor } else if (inputItem.getItemId() == R.id.action_share) { -// final ImportURIHelper importURIHelper = new ImportURIHelper(MainActivity.this); -// importURIHelper.startShareIntent(mCard); + final ImportURIHelper importURIHelper = new ImportURIHelper(MainActivity.this); + importURIHelper.startShareIntent(mAdapter.getSelectedItems()); inputMode.finish(); return true; } @@ -618,13 +613,20 @@ public class MainActivity extends AppCompatActivity implements LoyaltyCardCursor mAdapter.toggleSelection(inputPosition); int count = mAdapter.getSelectedItemCount(); - if (count == 0) - { + if (count == 0) { mCurrentActionMode.finish(); - } else - { + } else { mCurrentActionMode.setTitle("Selected: " + count + " Cards"); + MenuItem editItem = mCurrentActionMode.getMenu().findItem(R.id.action_edit); + if (count == 1) { + editItem.setVisible(true); + editItem.setEnabled(true); + } else { + editItem.setVisible(false); + editItem.setEnabled(false); + } + mCurrentActionMode.invalidate(); } } diff --git a/app/src/main/java/protect/card_locker/Utils.java b/app/src/main/java/protect/card_locker/Utils.java index 9f7a91f3b..23690cd00 100644 --- a/app/src/main/java/protect/card_locker/Utils.java +++ b/app/src/main/java/protect/card_locker/Utils.java @@ -9,6 +9,14 @@ import android.provider.MediaStore; import android.util.Log; import android.widget.Toast; +import com.google.zxing.BinaryBitmap; +import com.google.zxing.LuminanceSource; +import com.google.zxing.MultiFormatReader; +import com.google.zxing.NotFoundException; +import com.google.zxing.RGBLuminanceSource; +import com.google.zxing.Result; +import com.google.zxing.common.HybridBinarizer; + import java.io.IOException; import java.math.BigDecimal; import java.text.NumberFormat; @@ -19,15 +27,6 @@ import java.util.GregorianCalendar; import androidx.core.graphics.ColorUtils; -import com.google.zxing.BarcodeFormat; -import com.google.zxing.BinaryBitmap; -import com.google.zxing.LuminanceSource; -import com.google.zxing.MultiFormatReader; -import com.google.zxing.NotFoundException; -import com.google.zxing.RGBLuminanceSource; -import com.google.zxing.Result; -import com.google.zxing.common.HybridBinarizer; - public class Utils { private static final String TAG = "Catima"; diff --git a/app/src/main/java/protect/card_locker/importexport/CsvDatabaseImporter.java b/app/src/main/java/protect/card_locker/importexport/CsvDatabaseImporter.java index f1aa773e2..6836cb5eb 100644 --- a/app/src/main/java/protect/card_locker/importexport/CsvDatabaseImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/CsvDatabaseImporter.java @@ -7,23 +7,17 @@ import com.google.zxing.BarcodeFormat; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; -import org.json.JSONException; import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import java.math.BigDecimal; -import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import java.text.ParseException; import java.util.Currency; import java.util.Date; import java.util.List; -import java.util.zip.ZipFile; import protect.card_locker.DBHelper; import protect.card_locker.FormatException; diff --git a/app/src/main/java/protect/card_locker/importexport/DatabaseImporter.java b/app/src/main/java/protect/card_locker/importexport/DatabaseImporter.java index afb320eda..427b56535 100644 --- a/app/src/main/java/protect/card_locker/importexport/DatabaseImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/DatabaseImporter.java @@ -2,10 +2,8 @@ package protect.card_locker.importexport; import org.json.JSONException; -import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.text.ParseException; import protect.card_locker.DBHelper; diff --git a/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java b/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java index 05fa9051e..d7a1b84bf 100644 --- a/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/FidmeImporter.java @@ -1,33 +1,21 @@ package protect.card_locker.importexport; -import android.annotation.SuppressLint; import android.database.sqlite.SQLiteDatabase; -import android.graphics.Color; import com.google.zxing.BarcodeFormat; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; -import org.json.JSONArray; import org.json.JSONException; -import org.json.JSONObject; -import java.io.BufferedReader; -import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.StringReader; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Currency; -import java.util.Date; -import java.util.TimeZone; import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; import protect.card_locker.DBHelper; diff --git a/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java b/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java index fedc446e7..ed0ee525b 100644 --- a/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java +++ b/app/src/main/java/protect/card_locker/importexport/MultiFormatExporter.java @@ -7,8 +7,6 @@ import java.io.OutputStreamWriter; import protect.card_locker.DBHelper; import protect.card_locker.DataFormat; -import protect.card_locker.importexport.CsvDatabaseExporter; -import protect.card_locker.importexport.DatabaseExporter; public class MultiFormatExporter { diff --git a/app/src/main/java/protect/card_locker/importexport/MultiFormatImporter.java b/app/src/main/java/protect/card_locker/importexport/MultiFormatImporter.java index 4d5324521..187ee03fb 100644 --- a/app/src/main/java/protect/card_locker/importexport/MultiFormatImporter.java +++ b/app/src/main/java/protect/card_locker/importexport/MultiFormatImporter.java @@ -6,14 +6,11 @@ import org.json.JSONException; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.text.ParseException; import protect.card_locker.DBHelper; import protect.card_locker.DataFormat; import protect.card_locker.FormatException; -import protect.card_locker.importexport.CsvDatabaseImporter; -import protect.card_locker.importexport.DatabaseImporter; public class MultiFormatImporter { diff --git a/app/src/main/java/protect/card_locker/preferences/Settings.java b/app/src/main/java/protect/card_locker/preferences/Settings.java index 19836fa59..ede946634 100644 --- a/app/src/main/java/protect/card_locker/preferences/Settings.java +++ b/app/src/main/java/protect/card_locker/preferences/Settings.java @@ -2,11 +2,11 @@ package protect.card_locker.preferences; import android.content.Context; import android.content.SharedPreferences; -import androidx.preference.PreferenceManager; + import androidx.annotation.IntegerRes; import androidx.annotation.StringRes; import androidx.appcompat.app.AppCompatDelegate; - +import androidx.preference.PreferenceManager; import protect.card_locker.R; public class Settings diff --git a/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java b/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java index 9280f8d5f..c6f7fb776 100644 --- a/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java +++ b/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java @@ -1,15 +1,15 @@ package protect.card_locker.preferences; import android.os.Bundle; +import android.view.MenuItem; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentActivity; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.app.AppCompatDelegate; -import android.view.MenuItem; - import nl.invissvenska.numberpickerpreference.NumberDialogPreference; import nl.invissvenska.numberpickerpreference.NumberPickerPreferenceDialogFragment; import protect.card_locker.R; diff --git a/app/src/main/res/menu/card_add_menu.xml b/app/src/main/res/menu/card_add_menu.xml index 9eb7100fa..4159f22dd 100644 --- a/app/src/main/res/menu/card_add_menu.xml +++ b/app/src/main/res/menu/card_add_menu.xml @@ -1,4 +1,3 @@ - + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 85902a053..545fad587 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -176,4 +176,5 @@ This barcode type can\'t yet be displayed. It may be supported in a newer version of the app. The value is not valid for the selected barcode type Copied card IDs to clipboard + I want to share some cards with you diff --git a/app/src/test/java/protect/card_locker/ImportExportActivityTest.java b/app/src/test/java/protect/card_locker/ImportExportActivityTest.java index ed75cf130..7b08ccbb7 100644 --- a/app/src/test/java/protect/card_locker/ImportExportActivityTest.java +++ b/app/src/test/java/protect/card_locker/ImportExportActivityTest.java @@ -1,8 +1,5 @@ package protect.card_locker; -import static org.junit.Assert.assertEquals; -import static org.robolectric.Shadows.shadowOf; - import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; @@ -10,6 +7,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.view.View; + import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; @@ -17,6 +15,9 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import static org.junit.Assert.assertEquals; +import static org.robolectric.Shadows.shadowOf; + @RunWith(RobolectricTestRunner.class) @Config(sdk = 23) public class ImportExportActivityTest diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java index f2ef6f387..23c8d3689 100644 --- a/app/src/test/java/protect/card_locker/ImportExportTest.java +++ b/app/src/test/java/protect/card_locker/ImportExportTest.java @@ -17,7 +17,6 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.robolectric.annotation.LooperMode; -import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; @@ -25,13 +24,12 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.text.ParseException; -import java.util.Arrays; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Currency; import java.util.Date; diff --git a/app/src/test/java/protect/card_locker/ImportURITest.java b/app/src/test/java/protect/card_locker/ImportURITest.java index 93f41ec25..03a259a70 100644 --- a/app/src/test/java/protect/card_locker/ImportURITest.java +++ b/app/src/test/java/protect/card_locker/ImportURITest.java @@ -3,13 +3,16 @@ package protect.card_locker; import android.app.Activity; import android.graphics.Color; import android.net.Uri; + import com.google.zxing.BarcodeFormat; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; + import java.io.InvalidObjectException; import java.math.BigDecimal; import java.util.Currency; @@ -18,7 +21,6 @@ import java.util.Date; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static protect.card_locker.DBHelper.LoyaltyCardDbIds; @RunWith(RobolectricTestRunner.class) @Config(sdk = 23) diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java index ebf6c89d1..6729c43d6 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java @@ -5,10 +5,6 @@ import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.Color; -import androidx.preference.PreferenceManager; -import androidx.test.core.app.ApplicationProvider; -import protect.card_locker.preferences.Settings; - import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -27,6 +23,10 @@ import java.text.DateFormat; import java.util.Currency; import java.util.Date; +import androidx.preference.PreferenceManager; +import androidx.test.core.app.ApplicationProvider; +import protect.card_locker.preferences.Settings; + import static org.junit.Assert.assertEquals; @RunWith(RobolectricTestRunner.class) diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index d4761358a..30ecf35f3 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -1,26 +1,18 @@ package protect.card_locker; -import static android.os.Looper.getMainLooper; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.robolectric.Shadows.shadowOf; - import android.app.Activity; import android.app.DatePickerDialog; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Bundle; -import androidx.preference.PreferenceManager; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -30,20 +22,13 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.TextView; -import androidx.core.widget.TextViewCompat; -import androidx.test.core.app.ApplicationProvider; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.textfield.MaterialAutoCompleteTextView; import com.google.android.material.textfield.TextInputLayout; import com.google.zxing.BarcodeFormat; import com.google.zxing.client.android.Intents; -import java.io.IOException; -import java.math.BigDecimal; -import java.text.DateFormat; -import java.text.ParseException; -import java.util.Currency; -import java.util.Date; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -53,10 +38,27 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.android.controller.ActivityController; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowActivity; -import org.robolectric.shadows.ShadowAlertDialog; import org.robolectric.shadows.ShadowDialog; import org.robolectric.shadows.ShadowLog; +import java.io.IOException; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.ParseException; +import java.util.Currency; +import java.util.Date; + +import androidx.core.widget.TextViewCompat; +import androidx.preference.PreferenceManager; +import androidx.test.core.app.ApplicationProvider; + +import static android.os.Looper.getMainLooper; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.robolectric.Shadows.shadowOf; + @RunWith(RobolectricTestRunner.class) @Config(sdk = 23) public class LoyaltyCardViewActivityTest diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index 641330c58..62bfdd000 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -2,10 +2,6 @@ package protect.card_locker; import android.app.Activity; import android.content.ComponentName; -<<<<<<< HEAD -======= -import android.content.Intent; ->>>>>>> cdd9472 (WIP Issue #14 (and #65)) import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.Color; @@ -13,21 +9,16 @@ import android.view.Menu; import android.view.View; import android.widget.ListView; import android.widget.TextView; -<<<<<<< HEAD import com.google.android.material.tabs.TabLayout; import com.google.zxing.BarcodeFormat; -======= -import com.google.zxing.BarcodeFormat; ->>>>>>> cdd9472 (WIP Issue #14 (and #65)) import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; -<<<<<<< HEAD -import org.robolectric.annotation.Config; import org.robolectric.android.controller.ActivityController; +import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowActivity; import java.math.BigDecimal; @@ -36,16 +27,18 @@ import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -======= -import org.robolectric.android.controller.ActivityController; -import org.robolectric.annotation.Config; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; ->>>>>>> cdd9472 (WIP Issue #14 (and #65)) import static org.robolectric.Shadows.shadowOf; +<<<<<<>>>>>>cdd9472(WIP Issue #14(and #65)) + <<<<<<>>>>>>cdd9472(WIP Issue #14(and #65)) + <<<<<<>>>>>>cdd9472(WIP Issue #14(and #65)) + @RunWith(RobolectricTestRunner.class) @Config(sdk = 23) public class MainActivityTest diff --git a/app/src/test/java/protect/card_locker/UtilsTest.java b/app/src/test/java/protect/card_locker/UtilsTest.java index 761633feb..e12ab9133 100644 --- a/app/src/test/java/protect/card_locker/UtilsTest.java +++ b/app/src/test/java/protect/card_locker/UtilsTest.java @@ -5,13 +5,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import org.robolectric.util.Util; import java.math.BigDecimal; import java.util.Currency; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; @RunWith(RobolectricTestRunner.class) @Config(sdk = 23) diff --git a/logo.svg b/logo.svg index 9501e0fc3..26ab5100d 100644 --- a/logo.svg +++ b/logo.svg @@ -1,19 +1,8 @@ - +