mirror of
https://github.com/CatimaLoyalty/Android.git
synced 2025-12-24 23:57:53 -05:00
Compare commits
13 Commits
v2.22.1
...
googleAndr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4fe43bccff | ||
|
|
3732f8483b | ||
|
|
2ff137ee04 | ||
|
|
3b45802a7f | ||
|
|
0de4847f6a | ||
|
|
47e2566043 | ||
|
|
18c17796b9 | ||
|
|
4b2b999653 | ||
|
|
3b51121c9e | ||
|
|
2fc9581643 | ||
|
|
68f3f37e23 | ||
|
|
38658d0aa7 | ||
|
|
339750e97c |
6
.github/workflows/android.yml
vendored
6
.github/workflows/android.yml
vendored
@@ -20,11 +20,11 @@ jobs:
|
||||
- name: Fail on bad translations
|
||||
run: if grep -ri "<xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
|
||||
- uses: gradle/wrapper-validation-action@v1
|
||||
- name: set up JDK 11
|
||||
- name: set up JDK 17
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
distribution: 'adopt'
|
||||
java-version: '11'
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
- name: Build
|
||||
run: ./gradlew assembleRelease
|
||||
- name: Check lint
|
||||
|
||||
@@ -100,7 +100,7 @@ dependencies {
|
||||
// Third-party
|
||||
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'
|
||||
implementation 'com.google.zxing:core:3.5.1'
|
||||
implementation 'org.apache.commons:commons-csv:1.9.0'
|
||||
implementation 'org.apache.commons:commons-csv:1.10.0'
|
||||
implementation 'com.jaredrummler:colorpicker:1.1.0'
|
||||
implementation 'com.github.invissvenska:NumberPickerPreference:1.0.4'
|
||||
implementation 'net.lingala.zip4j:zip4j:2.11.5'
|
||||
|
||||
@@ -141,7 +141,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
inputHolder.mCardIcon.setImageBitmap(Utils.generateIcon(mContext, loyaltyCard.store, loyaltyCard.headerColor).getLetterTile());
|
||||
inputHolder.mCardIcon.setScaleType(ImageView.ScaleType.FIT_CENTER);
|
||||
}
|
||||
inputHolder.setIconBackgroundColor(loyaltyCard.headerColor != null ? loyaltyCard.headerColor : R.attr.colorPrimary);
|
||||
inputHolder.setIconBackgroundColor(loyaltyCard.headerColor != null ? loyaltyCard.headerColor : androidx.appcompat.R.attr.colorPrimary);
|
||||
|
||||
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0, itemSelected(inputCursor.getPosition()));
|
||||
|
||||
@@ -290,7 +290,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
field.setVisibility(View.VISIBLE);
|
||||
field.setText(text);
|
||||
field.setTextSize(size);
|
||||
field.setTextColor(color != null ? color : MaterialColors.getColor(mContext, R.attr.colorSecondary, ContextCompat.getColor(mContext, mDarkModeEnabled ? R.color.md_theme_dark_secondary : R.color.md_theme_light_secondary)));
|
||||
field.setTextColor(color != null ? color : MaterialColors.getColor(mContext, com.google.android.material.R.attr.colorSecondary, ContextCompat.getColor(mContext, mDarkModeEnabled ? R.color.md_theme_dark_secondary : R.color.md_theme_light_secondary)));
|
||||
|
||||
int drawableSize = dpToPx((size * 24) / 14, mContext);
|
||||
mDivider.setVisibility(View.VISIBLE);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.DatePickerDialog;
|
||||
@@ -73,7 +72,6 @@ import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.AppCompatTextView;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
@@ -672,16 +670,16 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
}
|
||||
mCropperOptions.setAspectRatioOptions(selectedByDefault,
|
||||
new AspectRatio(null, 1, 1),
|
||||
new AspectRatio(getResources().getString(R.string.ucrop_label_original).toUpperCase(), sourceWidth, sourceHeight),
|
||||
new AspectRatio(getResources().getString(com.yalantis.ucrop.R.string.ucrop_label_original).toUpperCase(), sourceWidth, sourceHeight),
|
||||
new AspectRatio(getResources().getString(R.string.card).toUpperCase(), 85.6f, 53.98f)
|
||||
);
|
||||
|
||||
// Fix theming
|
||||
|
||||
int colorPrimary = MaterialColors.getColor(this, R.attr.colorPrimary, ContextCompat.getColor(this, R.color.md_theme_light_primary));
|
||||
int colorOnPrimary = MaterialColors.getColor(this, R.attr.colorOnPrimary, ContextCompat.getColor(this, R.color.md_theme_light_onPrimary));
|
||||
int colorSurface = MaterialColors.getColor(this, R.attr.colorSurface, ContextCompat.getColor(this, R.color.md_theme_light_surface));
|
||||
int colorOnSurface = MaterialColors.getColor(this, R.attr.colorOnSurface, ContextCompat.getColor(this, R.color.md_theme_light_onSurface));
|
||||
int colorPrimary = MaterialColors.getColor(this, androidx.appcompat.R.attr.colorPrimary, ContextCompat.getColor(this, R.color.md_theme_light_primary));
|
||||
int colorOnPrimary = MaterialColors.getColor(this, com.google.android.material.R.attr.colorOnPrimary, ContextCompat.getColor(this, R.color.md_theme_light_onPrimary));
|
||||
int colorSurface = MaterialColors.getColor(this, com.google.android.material.R.attr.colorSurface, ContextCompat.getColor(this, R.color.md_theme_light_surface));
|
||||
int colorOnSurface = MaterialColors.getColor(this, com.google.android.material.R.attr.colorOnSurface, ContextCompat.getColor(this, R.color.md_theme_light_onSurface));
|
||||
int colorBackground = MaterialColors.getColor(this, android.R.attr.colorBackground, ContextCompat.getColor(this, R.color.md_theme_light_onSurface));
|
||||
mCropperOptions.setToolbarColor(colorSurface);
|
||||
mCropperOptions.setStatusBarColor(colorSurface);
|
||||
@@ -913,7 +911,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
protected void setColorFromIcon() {
|
||||
Object icon = thumbnail.getTag();
|
||||
if (icon != null && (icon instanceof Bitmap)) {
|
||||
int headerColor = Utils.getHeaderColorFromImage((Bitmap) icon, tempLoyaltyCard.headerColor != null ? tempLoyaltyCard.headerColor : R.attr.colorPrimary);
|
||||
int headerColor = Utils.getHeaderColorFromImage((Bitmap) icon, tempLoyaltyCard.headerColor != null ? tempLoyaltyCard.headerColor : androidx.appcompat.R.attr.colorPrimary);
|
||||
|
||||
updateTempState(LoyaltyCardField.headerColor, headerColor);
|
||||
|
||||
|
||||
@@ -1209,6 +1209,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
getWindow().setDecorFitsSystemWindows(true);
|
||||
if (getWindow().getInsetsController() != null) {
|
||||
getWindow().getInsetsController().show(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars());
|
||||
getWindow().getInsetsController().setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_DEFAULT);
|
||||
}
|
||||
} else {
|
||||
unsetFullscreenModeSdkLessThan30();
|
||||
|
||||
@@ -21,7 +21,6 @@ import android.widget.Toast;
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
@@ -246,7 +245,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
|
||||
customBarcodeScannerBinding.cameraPermissionDeniedLayout.cameraPermissionDeniedClickableArea.setOnClickListener(show ? v -> {
|
||||
navigateToSystemPermissionSetting();
|
||||
} : null);
|
||||
customBarcodeScannerBinding.cardInputContainer.setBackgroundColor(show ? obtainThemeAttribute(R.attr.colorSurface) : Color.TRANSPARENT);
|
||||
customBarcodeScannerBinding.cardInputContainer.setBackgroundColor(show ? obtainThemeAttribute(com.google.android.material.R.attr.colorSurface) : Color.TRANSPARENT);
|
||||
customBarcodeScannerBinding.cameraPermissionDeniedLayout.getRoot().setVisibility(show ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
|
||||
@@ -53,8 +53,8 @@ public class UCropWrapper extends UCropActivity {
|
||||
AppCompatImageView controlsBackgroundImage = (AppCompatImageView) check;
|
||||
// everything gathered and are as expected, now perform color patching
|
||||
Utils.patchColors(this);
|
||||
int colorSurface = MaterialColors.getColor(this, R.attr.colorSurface, ContextCompat.getColor(this, R.color.md_theme_light_surface));
|
||||
int colorOnSurface = MaterialColors.getColor(this, R.attr.colorOnSurface, ContextCompat.getColor(this, R.color.md_theme_light_onSurface));
|
||||
int colorSurface = MaterialColors.getColor(this, com.google.android.material.R.attr.colorSurface, ContextCompat.getColor(this, R.color.md_theme_light_surface));
|
||||
int colorOnSurface = MaterialColors.getColor(this, com.google.android.material.R.attr.colorOnSurface, ContextCompat.getColor(this, R.color.md_theme_light_onSurface));
|
||||
|
||||
Drawable controlsBackgroundImageDrawable = controlsBackgroundImage.getBackground();
|
||||
controlsBackgroundImageDrawable.mutate();
|
||||
|
||||
@@ -15,7 +15,6 @@ import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.LocaleList;
|
||||
import android.provider.MediaStore;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.MenuItem;
|
||||
@@ -46,7 +45,6 @@ import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.StringWriter;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.NumberFormat;
|
||||
@@ -574,7 +572,7 @@ public class Utils {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
return new Palette.Builder(image).generate().getDominantColor(R.attr.colorPrimary);
|
||||
return new Palette.Builder(image).generate().getDominantColor(androidx.appcompat.R.attr.colorPrimary);
|
||||
}
|
||||
|
||||
public static int getRandomHeaderColor(Context context) {
|
||||
|
||||
@@ -17,6 +17,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.StringReader;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
@@ -100,7 +101,7 @@ public class CatimaImporter implements Importer {
|
||||
}
|
||||
|
||||
parser.close();
|
||||
} catch (IllegalArgumentException | IllegalStateException e) {
|
||||
} catch (UncheckedIOException e) {
|
||||
throw new FormatException("Issue parsing CSV data", e);
|
||||
}
|
||||
}
|
||||
@@ -182,7 +183,7 @@ public class CatimaImporter implements Importer {
|
||||
throw new InterruptedException();
|
||||
}
|
||||
}
|
||||
} catch (IllegalArgumentException | IllegalStateException e) {
|
||||
} catch (UncheckedIOException e) {
|
||||
throw new FormatException("Issue parsing CSV data", e);
|
||||
} finally {
|
||||
groupParser.close();
|
||||
@@ -207,7 +208,7 @@ public class CatimaImporter implements Importer {
|
||||
throw new InterruptedException();
|
||||
}
|
||||
}
|
||||
} catch (IllegalArgumentException | IllegalStateException e) {
|
||||
} catch (UncheckedIOException e) {
|
||||
throw new FormatException("Issue parsing CSV data", e);
|
||||
} finally {
|
||||
cardParser.close();
|
||||
@@ -232,7 +233,7 @@ public class CatimaImporter implements Importer {
|
||||
throw new InterruptedException();
|
||||
}
|
||||
}
|
||||
} catch (IllegalArgumentException | IllegalStateException e) {
|
||||
} catch (UncheckedIOException e) {
|
||||
throw new FormatException("Issue parsing CSV data", e);
|
||||
} finally {
|
||||
cardGroupParser.close();
|
||||
|
||||
@@ -16,8 +16,8 @@ Gediminas Murauskas
|
||||
Petr Novák
|
||||
Joel A
|
||||
Taco
|
||||
pfaffenrodt
|
||||
laralem
|
||||
pfaffenrodt
|
||||
Nyatsuki
|
||||
gallegonovato
|
||||
HudobniVolk
|
||||
@@ -43,6 +43,7 @@ Katarzyna
|
||||
echo r"0xX4H" | rev
|
||||
Magnitudee
|
||||
Olivia (Zoe)
|
||||
Projjal Moitra
|
||||
betsythefc
|
||||
waffshappen
|
||||
Robin
|
||||
@@ -153,6 +154,7 @@ Mattia
|
||||
Md. Al-Amin
|
||||
Michael Gangolf
|
||||
3DN1M
|
||||
Mobashir Raihan
|
||||
Moi Toi
|
||||
DivideEtImpera
|
||||
Nicolas
|
||||
@@ -175,7 +177,7 @@ Shailendra Maurya
|
||||
Simone Dotto
|
||||
Subhashish Anand
|
||||
SziaTomi
|
||||
TenTraicion
|
||||
Mehedi Hasan
|
||||
Titas Pažereckas
|
||||
atakujonc
|
||||
Tony C
|
||||
@@ -203,6 +205,7 @@ Truestorybaby
|
||||
tygyh
|
||||
unstartdev
|
||||
wmilan 17
|
||||
يوسف لطفي
|
||||
luoyang3
|
||||
JaeBeom An
|
||||
JungHee Lee
|
||||
|
||||
@@ -32,11 +32,11 @@
|
||||
<string name="importStocard">স্টো কার্ড আমদানি করুন</string>
|
||||
<string name="importVoucherVault">আমদানি ভাউচার ভল্ট</string>
|
||||
<string name="barcodeId">বারকোড আইডি</string>
|
||||
<string name="sameAsCardId">কার্ড আইডির মতো</string>
|
||||
<string name="sameAsCardId">আইডি আর এটা এক</string>
|
||||
<string name="setBarcodeId">বারকোড আইডি সেট করুন</string>
|
||||
<string name="unsupportedBarcodeType">এই বারকোডের টাইপটি এখন দেখানো যাচ্ছে না। অ্যাপের পরের সংস্করণে হয়ত এটি সমর্থন করা যেতে পারে।</string>
|
||||
<string name="wrongValueForBarcodeType">বারকোড টাইপের জন্য ভুল মান</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ক্লিপবোর্ড একাধিক টোস্টে অনুলিপি করুন</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">আইডিগুলি ক্লিপবোর্ডে কপি হল</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">url থেকে ইন্টেন্ট ইম্পোর্ট কার্ড একাধিক টেক্সট শেয়ার করে</string>
|
||||
<string name="frontImageDescription">সামনের চিত্র</string>
|
||||
<string name="backImageDescription">পিছনের চিত্র</string>
|
||||
@@ -65,11 +65,11 @@
|
||||
<string name="settings_green_theme">সবুজ থিম</string>
|
||||
<string name="settings_brown_theme">বাদামী থিম</string>
|
||||
<string name="sort">সাজান</string>
|
||||
<string name="swipeToSwitchImages">ছবি পরিবর্তন করতে সোয়াইপ করুন</string>
|
||||
<string name="swipeToSwitchImages">ছবি পাল্টানোর জন্য সোয়াইপ করুন, ছবিটি গ্যালারি অ্যাপে খোলার জন্য টিপে ধড়ে থাকুন</string>
|
||||
<string name="sort_by_name">নামের দ্বারা সাজান</string>
|
||||
<string name="sort_by_most_recently_used">সর্বাধিক সম্প্রতি ব্যবহৃত দ্বারা সাজান</string>
|
||||
<string name="sort_by_expiry">মেয়াদ শেষ করে সাজান</string>
|
||||
<string name="reverse">বিপরীত</string>
|
||||
<string name="reverse">...উল্টো ক্রমে</string>
|
||||
<string name="sort_by">ক্রমানুসার</string>
|
||||
<string name="noCardExistsError">কার্ডটি পাওয়া যায়নি</string>
|
||||
<string name="noStoreError">স্টোরেজ ত্রুটি নেই</string>
|
||||
@@ -186,4 +186,15 @@
|
||||
<string name="chooseExpiryDate">মেয়াদ শেষ হওয়ার তারিখ মনোনীত করুন</string>
|
||||
<string name="moveBarcodeToTopOfScreen">বারকোডটি স্ক্রিনের উপরে উঠিয়ে দিন</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">বারকোডটি স্ক্রিনের কেন্দ্রে সরিয়ে দিন</string>
|
||||
<string name="errorReadingImage">ছবিটি স্ক্যান করা যাচ্ছে না</string>
|
||||
<string name="privacy_policy_popup_text">ব্যক্তিগত তথ্যের গোপনীয়তা নীতি নোটিশ (কিছু অ্যাপ স্টোরের এটি লাগে):
|
||||
\n
|
||||
\nকোন তথ্য একেবারেই সংগ্রহ করা হয় না, যা যে কেউ নিশ্চিত করতে পারবেন কারন আমাদের অ্যাপ মুক্ত সফটওয়্যার।</string>
|
||||
<string name="balance">ব্যালান্স</string>
|
||||
<string name="points">পয়েন্ট</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> কোনো বৈধ ব্যালান্স মনে হচ্ছে না।</string>
|
||||
<string name="chooseImportType">এখান থেকে তথ্য আমদানি করুন</string>
|
||||
<string name="app_loyalty_card_keychain">আনুগত্য কার্ড কীচেন</string>
|
||||
<string name="privacy_policy">ব্যক্তিগত তথ্যের গোপনীয়তা নীতি</string>
|
||||
<string name="accept">গ্রহণ</string>
|
||||
</resources>
|
||||
@@ -11,7 +11,6 @@ import org.junit.runner.RunWith;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.android.controller.ActivityController;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.shadows.ShadowLooper;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@@ -21,7 +20,6 @@ import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(sdk = 23)
|
||||
public class BarcodeSelectorActivityTest {
|
||||
@Test
|
||||
public void emptyStateTest() {
|
||||
|
||||
@@ -27,7 +27,6 @@ import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(sdk = 23)
|
||||
public class DatabaseTest {
|
||||
private SQLiteDatabase mDatabase;
|
||||
private Activity mActivity;
|
||||
|
||||
@@ -13,13 +13,11 @@ import org.junit.runner.RunWith;
|
||||
import org.robolectric.Robolectric;
|
||||
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 {
|
||||
private void registerIntentHandler(String handler) {
|
||||
// Add something that will 'handle' the given intent type
|
||||
|
||||
@@ -6,20 +6,16 @@ import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.os.Environment;
|
||||
import android.os.Looper;
|
||||
import android.util.DisplayMetrics;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
import org.json.JSONException;
|
||||
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 org.robolectric.annotation.LooperMode;
|
||||
import org.robolectric.shadows.ShadowLog;
|
||||
import org.robolectric.shadows.ShadowLooper;
|
||||
@@ -34,8 +30,6 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.ParseException;
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -44,7 +38,6 @@ import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.core.content.res.ResourcesCompat;
|
||||
import protect.card_locker.async.TaskHandler;
|
||||
import protect.card_locker.importexport.DataFormat;
|
||||
import protect.card_locker.importexport.ImportExportResult;
|
||||
@@ -59,7 +52,6 @@ import static org.junit.Assert.assertTrue;
|
||||
import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(sdk = 23)
|
||||
public class ImportExportTest {
|
||||
private Activity activity;
|
||||
private SQLiteDatabase mDatabase;
|
||||
@@ -517,7 +509,7 @@ public class ImportExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void corruptedImportNothingSaved() throws IOException {
|
||||
public void corruptedImportNothingSaved() {
|
||||
final int NUM_CARDS = 10;
|
||||
|
||||
for (DataFormat format : DataFormat.values()) {
|
||||
@@ -538,7 +530,7 @@ public class ImportExportTest {
|
||||
// ^ after the quote there should only be a , \n or EOF
|
||||
String corruptEntry = "ThisStringIsLikelyNotPartOfAnyFormat,\"\"a";
|
||||
|
||||
ByteArrayInputStream inData = new ByteArrayInputStream((outData.toString() + corruptEntry).getBytes());
|
||||
ByteArrayInputStream inData = new ByteArrayInputStream((outData + corruptEntry).getBytes());
|
||||
|
||||
// Attempt to import the data
|
||||
result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inData, format, null);
|
||||
@@ -617,18 +609,8 @@ public class ImportExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importWithoutColorsV1() throws IOException {
|
||||
String csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n";
|
||||
|
||||
csvText += "1,store,note,12345,AZTEC,0";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
public void importWithoutColorsV1() {
|
||||
InputStream inputStream = getClass().getResourceAsStream("catima_v1_no_colors.csv");
|
||||
|
||||
// Import the CSV data
|
||||
ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null);
|
||||
@@ -653,20 +635,8 @@ public class ImportExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importWithoutNullColorsV1() throws IOException {
|
||||
String csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n";
|
||||
|
||||
csvText += "1,store,note,12345,AZTEC,,,0";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
public void importWithoutNullColorsV1() {
|
||||
InputStream inputStream = getClass().getResourceAsStream("catima_v1_empty_colors.csv");
|
||||
|
||||
// Import the CSV data
|
||||
ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null);
|
||||
@@ -691,20 +661,8 @@ public class ImportExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importWithoutInvalidColorsV1() throws IOException {
|
||||
String csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n";
|
||||
|
||||
csvText += "1,store,note,12345,type,not a number,invalid,0";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
public void importWithoutInvalidColorsV1() {
|
||||
InputStream inputStream = getClass().getResourceAsStream("catima_v1_invalid_colors.csv");
|
||||
|
||||
// Import the CSV data
|
||||
ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null);
|
||||
@@ -715,20 +673,8 @@ public class ImportExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importWithNoBarcodeTypeV1() throws IOException {
|
||||
String csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n";
|
||||
|
||||
csvText += "1,store,note,12345,,1,1,0";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
public void importWithNoBarcodeTypeV1() {
|
||||
InputStream inputStream = getClass().getResourceAsStream("catima_v1_no_barcode_type.csv");
|
||||
|
||||
// Import the CSV data
|
||||
ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null);
|
||||
@@ -753,20 +699,8 @@ public class ImportExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importWithStarredFieldV1() throws IOException {
|
||||
String csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n";
|
||||
|
||||
csvText += "1,store,note,12345,AZTEC,1,1,1";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
public void importWithStarredFieldV1() {
|
||||
InputStream inputStream = getClass().getResourceAsStream("catima_v1_starred_field.csv");
|
||||
|
||||
// Import the CSV data
|
||||
ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null);
|
||||
@@ -791,20 +725,8 @@ public class ImportExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importWithNoStarredFieldV1() throws IOException {
|
||||
String csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n";
|
||||
|
||||
csvText += "1,store,note,12345,AZTEC,1,1,";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
public void importWithNoStarredFieldV1() {
|
||||
InputStream inputStream = getClass().getResourceAsStream("catima_v1_no_starred_field.csv");
|
||||
|
||||
// Import the CSV data
|
||||
ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null);
|
||||
@@ -829,39 +751,15 @@ public class ImportExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importWithInvalidStarFieldV1() throws IOException {
|
||||
String csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n";
|
||||
|
||||
csvText += "1,store,note,12345,AZTEC,1,1,2";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
public void importWithInvalidStarFieldV1() {
|
||||
InputStream inputStream = getClass().getResourceAsStream("catima_v1_invalid_starred_field.csv");
|
||||
|
||||
// Import the CSV data
|
||||
ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null);
|
||||
assertEquals(ImportExportResultType.Success, result.resultType());
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
|
||||
csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS + "\n";
|
||||
|
||||
csvText += "1,store,note,12345,AZTEC,1,1,text";
|
||||
|
||||
inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
inputStream = getClass().getResourceAsStream("catima_v1_invalid_starred_field_2.csv");
|
||||
|
||||
// Import the CSV data
|
||||
result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null);
|
||||
@@ -888,11 +786,8 @@ public class ImportExportTest {
|
||||
@Test
|
||||
public void exportImportV2Zip() throws FileNotFoundException {
|
||||
// Prepare images
|
||||
BitmapDrawable launcher = (BitmapDrawable) ResourcesCompat.getDrawableForDensity(activity.getResources(), R.mipmap.ic_launcher, DisplayMetrics.DENSITY_XXXHIGH, activity.getTheme());
|
||||
BitmapDrawable roundLauncher = (BitmapDrawable) ResourcesCompat.getDrawableForDensity(activity.getResources(), R.mipmap.ic_launcher_round, DisplayMetrics.DENSITY_XXXHIGH, activity.getTheme());
|
||||
|
||||
Bitmap launcherBitmap = launcher.getBitmap();
|
||||
Bitmap roundLauncherBitmap = roundLauncher.getBitmap();
|
||||
Bitmap bitmap1 = new LetterBitmap(activity.getApplicationContext(), "1", "1", 12, 64, 64, Color.BLACK, Color.YELLOW).getLetterTile();
|
||||
Bitmap bitmap2 = new LetterBitmap(activity.getApplicationContext(), "2", "2", 12, 64, 64, Color.GREEN, Color.WHITE).getLetterTile();
|
||||
|
||||
// Set up cards and groups
|
||||
HashMap<Integer, LoyaltyCard> loyaltyCardHashMap = new HashMap<>();
|
||||
@@ -908,12 +803,12 @@ public class ImportExportTest {
|
||||
List<Group> groups = Arrays.asList(DBHelper.getGroup(mDatabase, "One"));
|
||||
DBHelper.setLoyaltyCardGroups(mDatabase, loyaltyCardId, groups);
|
||||
loyaltyCardGroups.put(loyaltyCardId, groups);
|
||||
Utils.saveCardImage(activity.getApplicationContext(), launcherBitmap, loyaltyCardId, ImageLocationType.front);
|
||||
Utils.saveCardImage(activity.getApplicationContext(), roundLauncherBitmap, loyaltyCardId, ImageLocationType.back);
|
||||
Utils.saveCardImage(activity.getApplicationContext(), launcherBitmap, loyaltyCardId, ImageLocationType.icon);
|
||||
loyaltyCardFrontImages.put(loyaltyCardId, launcherBitmap);
|
||||
loyaltyCardBackImages.put(loyaltyCardId, roundLauncherBitmap);
|
||||
loyaltyCardIconImages.put(loyaltyCardId, launcherBitmap);
|
||||
Utils.saveCardImage(activity.getApplicationContext(), bitmap1, loyaltyCardId, ImageLocationType.front);
|
||||
Utils.saveCardImage(activity.getApplicationContext(), bitmap2, loyaltyCardId, ImageLocationType.back);
|
||||
Utils.saveCardImage(activity.getApplicationContext(), bitmap1, loyaltyCardId, ImageLocationType.icon);
|
||||
loyaltyCardFrontImages.put(loyaltyCardId, bitmap1);
|
||||
loyaltyCardBackImages.put(loyaltyCardId, bitmap2);
|
||||
loyaltyCardIconImages.put(loyaltyCardId, bitmap1);
|
||||
|
||||
// Create card 2
|
||||
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, null, new BigDecimal(0), null, "123456", null, null, 2, 1, null,0);
|
||||
@@ -997,32 +892,7 @@ public class ImportExportTest {
|
||||
|
||||
@Test
|
||||
public void importV2CSV() {
|
||||
String csvText = "2\n" +
|
||||
"\n" +
|
||||
"_id\n" +
|
||||
"Health\n" +
|
||||
"Food\n" +
|
||||
"Fashion\n" +
|
||||
"\n" +
|
||||
"_id,store,note,validfrom,expiry,balance,balancetype,cardid,barcodeid,headercolor,barcodetype,starstatus\n" +
|
||||
"1,Card 1,Note 1,1601510400,1618053234,100,USD,1234,5432,1,QR_CODE,0,\r\n" +
|
||||
"8,Clothes Store,Note about store,,,0,,a,,-5317,,0,\n" +
|
||||
"2,Department Store,,,1618041729,0,,A,,-9977996,,0,\n" +
|
||||
"3,Grocery Store,\"Multiline note about grocery store\n" +
|
||||
"\n" +
|
||||
"with blank line\",,,150,,dhd,,-9977996,,0,\n" +
|
||||
"4,Pharmacy,,,,0,,dhshsvshs,,-10902850,,1,\n" +
|
||||
"5,Restaurant,Note about restaurant here,,,0,,98765432,23456,-10902850,CODE_128,0,\n" +
|
||||
"6,Shoe Store,,,,12.50,EUR,a,-5317,,AZTEC,0,\n" +
|
||||
"\n" +
|
||||
"cardId,groupId\n" +
|
||||
"8,Fashion\n" +
|
||||
"3,Food\n" +
|
||||
"4,Health\n" +
|
||||
"5,Food\n" +
|
||||
"6,Fashion\n";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
InputStream inputStream = getClass().getResourceAsStream("catima_v2.csv");
|
||||
|
||||
// Import the CSV data
|
||||
ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.Catima, null);
|
||||
@@ -1221,7 +1091,7 @@ public class ImportExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importStocard() throws IOException {
|
||||
public void importStocard() {
|
||||
// FIXME: The provided stocard.zip is a very old export (8 July 2021) manually edited to
|
||||
// look more like the Stocard files provided by users for #1242. It is not an up-to-date
|
||||
// export and the test is possibly unreliable. This should be replaced by an up-to-date
|
||||
@@ -1294,33 +1164,8 @@ public class ImportExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importVoucherVault() throws IOException, FormatException, JSONException, ParseException {
|
||||
String jsonText = "[\n" +
|
||||
" {\n" +
|
||||
" \"uuid\": \"ae1ae525-3f27-481e-853a-8c30b7fa12d8\",\n" +
|
||||
" \"description\": \"Clothes Store\",\n" +
|
||||
" \"code\": \"123456\",\n" +
|
||||
" \"codeType\": \"CODE128\",\n" +
|
||||
" \"expires\": null,\n" +
|
||||
" \"removeOnceExpired\": true,\n" +
|
||||
" \"balance\": null,\n" +
|
||||
" \"balanceMilliunits\": null,\n" +
|
||||
" \"color\": \"GREY\"\n" +
|
||||
" },\n" +
|
||||
" {\n" +
|
||||
" \"uuid\": \"29a5d3b3-eace-4311-a15c-4c7e6a010531\",\n" +
|
||||
" \"description\": \"Department Store\",\n" +
|
||||
" \"code\": \"26846363\",\n" +
|
||||
" \"codeType\": \"CODE39\",\n" +
|
||||
" \"expires\": \"2021-03-26T00:00:00.000\",\n" +
|
||||
" \"removeOnceExpired\": true,\n" +
|
||||
" \"balance\": null,\n" +
|
||||
" \"balanceMilliunits\": 3500,\n" +
|
||||
" \"color\": \"PURPLE\"\n" +
|
||||
" }\n" +
|
||||
"]";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(jsonText.getBytes(StandardCharsets.UTF_8));
|
||||
public void importVoucherVault() {
|
||||
InputStream inputStream = getClass().getResourceAsStream("vouchervault.json");
|
||||
|
||||
// Import the Voucher Vault data
|
||||
ImportExportResult result = MultiFormatImporter.importData(activity.getApplicationContext(), mDatabase, inputStream, DataFormat.VoucherVault, null);
|
||||
|
||||
@@ -12,7 +12,6 @@ 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.io.UnsupportedEncodingException;
|
||||
@@ -25,7 +24,6 @@ import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(sdk = 23)
|
||||
public class ImportURITest {
|
||||
private ImportURIHelper importURIHelper;
|
||||
private SQLiteDatabase mDatabase;
|
||||
|
||||
@@ -15,7 +15,6 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.shadows.ShadowLog;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -32,7 +31,6 @@ import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(sdk = 23)
|
||||
public class LoyaltyCardCursorAdapterTest {
|
||||
private Activity activity;
|
||||
private SQLiteDatabase mDatabase;
|
||||
|
||||
@@ -19,6 +19,8 @@ import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.View;
|
||||
import android.view.WindowInsets;
|
||||
import android.view.WindowInsetsController;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageButton;
|
||||
@@ -62,6 +64,7 @@ import androidx.preference.PreferenceManager;
|
||||
|
||||
import static android.os.Looper.getMainLooper;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
@@ -69,7 +72,6 @@ import static org.junit.Assert.assertTrue;
|
||||
import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(sdk = 23)
|
||||
public class LoyaltyCardViewActivityTest {
|
||||
private final String BARCODE_DATA = "428311627547";
|
||||
private final CatimaBarcode BARCODE_TYPE = CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A);
|
||||
@@ -1209,7 +1211,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
assertEquals(false, activity.isFinishing());
|
||||
assertFalse(activity.isFinishing());
|
||||
|
||||
View collapsingToolbarLayout = activity.findViewById(R.id.collapsingToolbarLayout);
|
||||
BottomAppBar bottomAppBar = activity.findViewById(R.id.bottom_app_bar);
|
||||
@@ -1220,9 +1222,9 @@ public class LoyaltyCardViewActivityTest {
|
||||
SeekBar barcodeScaler = activity.findViewById(R.id.barcodeScaler);
|
||||
|
||||
// Android should not be in fullscreen mode
|
||||
int uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility();
|
||||
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions);
|
||||
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions);
|
||||
assertTrue(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.statusBars()));
|
||||
assertTrue(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.navigationBars()));
|
||||
assertEquals(WindowInsetsController.BEHAVIOR_DEFAULT, activity.getWindow().getInsetsController().getSystemBarsBehavior());
|
||||
|
||||
// Elements should be visible (except minimize button and scaler)
|
||||
assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility());
|
||||
@@ -1238,9 +1240,9 @@ public class LoyaltyCardViewActivityTest {
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Android should be in fullscreen mode
|
||||
uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility();
|
||||
assertEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions);
|
||||
assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions);
|
||||
assertFalse(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.statusBars()));
|
||||
assertFalse(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.navigationBars()));
|
||||
assertEquals(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE, activity.getWindow().getInsetsController().getSystemBarsBehavior());
|
||||
|
||||
// Elements should not be visible (except minimize button and scaler)
|
||||
assertEquals(View.GONE, collapsingToolbarLayout.getVisibility());
|
||||
@@ -1254,9 +1256,11 @@ public class LoyaltyCardViewActivityTest {
|
||||
// Clicking minimize button should deactivate fullscreen mode
|
||||
minimizeButton.performClick();
|
||||
shadowOf(getMainLooper()).idle();
|
||||
uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility();
|
||||
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions);
|
||||
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions);
|
||||
|
||||
assertTrue(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.statusBars()));
|
||||
assertTrue(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.navigationBars()));
|
||||
assertEquals(WindowInsetsController.BEHAVIOR_DEFAULT, activity.getWindow().getInsetsController().getSystemBarsBehavior());
|
||||
|
||||
assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility());
|
||||
assertEquals(View.VISIBLE, bottomAppBar.getVisibility());
|
||||
assertEquals(View.VISIBLE, maximizeButton.getVisibility());
|
||||
@@ -1268,9 +1272,11 @@ public class LoyaltyCardViewActivityTest {
|
||||
// Another click back to fullscreen
|
||||
maximizeButton.performClick();
|
||||
shadowOf(getMainLooper()).idle();
|
||||
uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility();
|
||||
assertEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions);
|
||||
assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions);
|
||||
|
||||
assertFalse(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.statusBars()));
|
||||
assertFalse(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.navigationBars()));
|
||||
assertEquals(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE, activity.getWindow().getInsetsController().getSystemBarsBehavior());
|
||||
|
||||
assertEquals(View.GONE, collapsingToolbarLayout.getVisibility());
|
||||
assertEquals(View.GONE, bottomAppBar.getVisibility());
|
||||
assertEquals(View.GONE, maximizeButton.getVisibility());
|
||||
@@ -1282,9 +1288,11 @@ public class LoyaltyCardViewActivityTest {
|
||||
// In full screen mode, back button should disable fullscreen
|
||||
activity.onBackPressed();
|
||||
shadowOf(getMainLooper()).idle();
|
||||
uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility();
|
||||
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions);
|
||||
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions);
|
||||
|
||||
assertTrue(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.statusBars()));
|
||||
assertTrue(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.navigationBars()));
|
||||
assertEquals(WindowInsetsController.BEHAVIOR_DEFAULT, activity.getWindow().getInsetsController().getSystemBarsBehavior());
|
||||
|
||||
assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility());
|
||||
assertEquals(View.VISIBLE, bottomAppBar.getVisibility());
|
||||
assertEquals(View.VISIBLE, maximizeButton.getVisibility());
|
||||
@@ -1296,7 +1304,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
// Pressing back when not in full screen should finish activity
|
||||
activity.onBackPressed();
|
||||
shadowOf(getMainLooper()).idle();
|
||||
assertEquals(true, activity.isFinishing());
|
||||
assertTrue(activity.isFinishing());
|
||||
|
||||
database.close();
|
||||
}
|
||||
|
||||
@@ -33,7 +33,6 @@ import static org.junit.Assert.assertNotNull;
|
||||
import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(sdk = 23)
|
||||
public class MainActivityTest {
|
||||
private SharedPreferences prefs;
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
_id,store,note,cardid,barcodetype,headercolor,headertextcolor,starstatus
|
||||
1,store,note,12345,AZTEC,,,0
|
||||
|
@@ -0,0 +1,2 @@
|
||||
_id,store,note,cardid,barcodetype,headercolor,headertextcolor,starstatus
|
||||
1,store,note,12345,type,not a number,invalid,0
|
||||
|
@@ -0,0 +1,2 @@
|
||||
_id,store,note,cardid,barcodetype,headercolor,headertextcolor,starstatus
|
||||
1,store,note,12345,AZTEC,1,1,2
|
||||
|
@@ -0,0 +1,2 @@
|
||||
_id,store,note,cardid,barcodetype,headercolor,headertextcolor,starstatus
|
||||
1,store,note,12345,AZTEC,1,1,text
|
||||
|
@@ -0,0 +1,2 @@
|
||||
_id,store,note,cardid,barcodetype,headercolor,headertextcolor,starstatus
|
||||
1,store,note,12345,,1,1,0
|
||||
|
@@ -0,0 +1,2 @@
|
||||
_id,store,note,cardid,barcodetype,starstatus
|
||||
1,store,note,12345,AZTEC,0
|
||||
|
@@ -0,0 +1,2 @@
|
||||
_id,store,note,cardid,barcodetype,headercolor,headertextcolor,starstatus
|
||||
1,store,note,12345,AZTEC,1,1,
|
||||
|
@@ -0,0 +1,2 @@
|
||||
_id,store,note,cardid,barcodetype,headercolor,headertextcolor,starstatus
|
||||
1,store,note,12345,AZTEC,1,1,1
|
||||
|
24
app/src/test/res/protect/card_locker/catima_v2.csv
Normal file
24
app/src/test/res/protect/card_locker/catima_v2.csv
Normal file
@@ -0,0 +1,24 @@
|
||||
2
|
||||
|
||||
_id
|
||||
Health
|
||||
Food
|
||||
Fashion
|
||||
|
||||
_id,store,note,validfrom,expiry,balance,balancetype,cardid,barcodeid,headercolor,barcodetype,starstatus
|
||||
1,Card 1,Note 1,1601510400,1618053234,100,USD,1234,5432,1,QR_CODE,0,
|
||||
8,Clothes Store,Note about store,,,0,,a,,-5317,,0,
|
||||
2,Department Store,,,1618041729,0,,A,,-9977996,,0,
|
||||
3,Grocery Store,"Multiline note about grocery store
|
||||
|
||||
with blank line",,,150,,dhd,,-9977996,,0,
|
||||
4,Pharmacy,,,,0,,dhshsvshs,,-10902850,,1,
|
||||
5,Restaurant,Note about restaurant here,,,0,,98765432,23456,-10902850,CODE_128,0,
|
||||
6,Shoe Store,,,,12.50,EUR,a,-5317,,AZTEC,0,
|
||||
|
||||
cardId,groupId
|
||||
8,Fashion
|
||||
3,Food
|
||||
4,Health
|
||||
5,Food
|
||||
6,Fashion
|
||||
|
24
app/src/test/res/protect/card_locker/vouchervault.json
Normal file
24
app/src/test/res/protect/card_locker/vouchervault.json
Normal file
@@ -0,0 +1,24 @@
|
||||
[
|
||||
{
|
||||
"uuid": "ae1ae525-3f27-481e-853a-8c30b7fa12d8",
|
||||
"description": "Clothes Store",
|
||||
"code": "123456",
|
||||
"codeType": "CODE128",
|
||||
"expires": null,
|
||||
"removeOnceExpired": true,
|
||||
"balance": null,
|
||||
"balanceMilliunits": null,
|
||||
"color": "GREY"
|
||||
},
|
||||
{
|
||||
"uuid": "29a5d3b3-eace-4311-a15c-4c7e6a010531",
|
||||
"description": "Department Store",
|
||||
"code": "26846363",
|
||||
"codeType": "CODE39",
|
||||
"expires": "2021-03-26T00:00:00.000",
|
||||
"removeOnceExpired": true,
|
||||
"balance": null,
|
||||
"balanceMilliunits": 3500,
|
||||
"color": "PURPLE"
|
||||
}
|
||||
]
|
||||
@@ -1,7 +1,7 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
plugins {
|
||||
id 'com.android.application' version '7.4.2' apply false
|
||||
id 'com.android.application' version '8.0.0' apply false
|
||||
id 'com.github.spotbugs' version "5.0.14" apply false
|
||||
}
|
||||
|
||||
|
||||
10
build.sh
10
build.sh
@@ -11,13 +11,13 @@ if [ -z "${ANDROID_SDK_ROOT:-}" ]; then
|
||||
fi
|
||||
|
||||
if [ -z "${JAVA_HOME:-}" ]; then
|
||||
echo "JAVA_HOME is not set, setting to Java 11 (like F-Droid)"
|
||||
echo "JAVA_HOME is not set, setting to Java 17"
|
||||
if [ -f "/etc/debian_version" ]; then
|
||||
echo "Debian-based distro, Java 11 is /usr/lib/jvm/java-11-openjdk-amd64"
|
||||
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
|
||||
echo "Debian-based distro, Java 17 is /usr/lib/jvm/java-17-openjdk-amd64"
|
||||
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
|
||||
else
|
||||
echo "Not Debian-based, assuming Fedora and setting Java 11 as /usr/lib/jvm/java-11-openjdk"
|
||||
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
|
||||
echo "Not Debian-based, assuming Fedora and setting Java 17 as /usr/lib/jvm/java-17-openjdk"
|
||||
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -16,4 +16,7 @@
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
# org.gradle.parallel=true
|
||||
android.defaults.buildfeatures.buildconfig=true
|
||||
android.nonFinalResIds=true
|
||||
android.nonTransitiveRClass=true
|
||||
android.useAndroidX=true
|
||||
|
||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
||||
#Sun Jul 25 20:59:51 CEST 2021
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
Reference in New Issue
Block a user