Use the screenShot method from the rule

This commit is contained in:
ligi 2016-11-25 04:47:58 +01:00
parent 3b83081419
commit 67727e9159
No known key found for this signature in database
GPG key ID: 8E81894010ABF23D
8 changed files with 99 additions and 119 deletions

View file

@ -3,7 +3,6 @@ package org.ligi.passandroid;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.widget.ImageView;
import com.squareup.spoon.Spoon;
import java.util.UUID;
import javax.inject.Inject;
import org.junit.Before;
@ -21,6 +20,11 @@ import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static org.assertj.core.api.Assertions.assertThat;
import static org.ligi.passandroid.model.pass.PassBarCodeFormat.AZTEC;
import static org.ligi.passandroid.model.pass.PassBarCodeFormat.CODE_128;
import static org.ligi.passandroid.model.pass.PassBarCodeFormat.CODE_39;
import static org.ligi.passandroid.model.pass.PassBarCodeFormat.PDF_417;
import static org.ligi.passandroid.model.pass.PassBarCodeFormat.QR_CODE;
public class TheFullscreenBarcodeActivity {
@ -39,39 +43,39 @@ public class TheFullscreenBarcodeActivity {
@Test
public void testPDF417BarcodeIsShown() {
testWithBarcodeFormat(PassBarCodeFormat.PDF_417);
testWithBarcodeFormat(PDF_417);
Spoon.screenshot(rule.getActivity(), "pdf417_barcode");
rule.screenShot("pdf417_barcode");
}
@Test
public void testAztecBarcodeIsShown() {
testWithBarcodeFormat(PassBarCodeFormat.AZTEC);
testWithBarcodeFormat(AZTEC);
Spoon.screenshot(rule.getActivity(), "aztec_barcode");
rule.screenShot("aztec_barcode");
}
@Test
public void testQRCodeIsShown() {
testWithBarcodeFormat(PassBarCodeFormat.QR_CODE);
testWithBarcodeFormat(QR_CODE);
Spoon.screenshot(rule.getActivity(), "qr_barcode");
rule.screenShot("qr_barcode");
}
@Test
public void testCode128CodeIsShown() {
testWithBarcodeFormat(PassBarCodeFormat.CODE_128);
testWithBarcodeFormat(CODE_128);
Spoon.screenshot(rule.getActivity(), "code128_barcode");
rule.screenShot("code128_barcode");
}
@Test
public void testCode39CodeIsShown() {
testWithBarcodeFormat(PassBarCodeFormat.CODE_39);
testWithBarcodeFormat(CODE_39);
Spoon.screenshot(rule.getActivity(), "code39_barcode");
rule.screenShot("code39_barcode");
}

View file

@ -39,11 +39,11 @@ public class ThePastLocationsStore {
public void testPastLocationsStoreShouldNeverContainMoreThanMaxElements() {
PastLocationsStore tested = new PastLocationsStore(sharedPreferences, tracker);
for (int i = 0; i < PastLocationsStore.MAX_ELEMENTS * 2; i++) {
for (int i = 0; i < PastLocationsStore.Companion.getMAX_ELEMENTS() * 2; i++) {
tested.putLocation("" + i);
}
assertThat(tested.getLocations().size()).isEqualTo(PastLocationsStore.MAX_ELEMENTS);
assertThat(tested.getLocations().size()).isEqualTo(PastLocationsStore.Companion.getMAX_ELEMENTS());
}

View file

@ -1,68 +0,0 @@
package org.ligi.passandroid.model;
import android.annotation.TargetApi;
import android.content.SharedPreferences;
import android.os.Build;
import android.preference.PreferenceManager;
import org.ligi.passandroid.Tracker;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
public class PastLocationsStore {
public static final String KEY_PAST_LOCATIONS = "past_locations";
public static final int MAX_ELEMENTS = 5;
private final SharedPreferences sharedPreferences;
private final Tracker tracker;
@Inject
public PastLocationsStore(SharedPreferences sharedPreferences, Tracker tracker) {
this.sharedPreferences = sharedPreferences;
this.tracker = tracker;
}
@TargetApi(11)
public void putLocation(final String path) {
if (Build.VERSION.SDK_INT < 11) {
// feature not available for these versions
return;
}
final Set<String> pastLocations = sharedPreferences.getStringSet(KEY_PAST_LOCATIONS, new HashSet<String>());
if (pastLocations.size() >= MAX_ELEMENTS) {
deleteOneElementFromSet(pastLocations);
}
if (!pastLocations.contains(path)) {
pastLocations.add(path);
}
tracker.trackEvent("scan", "put location", "count", (long) pastLocations.size());
sharedPreferences.edit().putStringSet(KEY_PAST_LOCATIONS, pastLocations).apply();
}
private void deleteOneElementFromSet(Set<String> pastLocations) {
final int deleteAtPosition = (int) (Math.random() * MAX_ELEMENTS);
int pos = 0;
for (String location : pastLocations) {
if (pos == deleteAtPosition) {
pastLocations.remove(location);
return;
}
pos++;
}
}
@TargetApi(11)
public Set<String> getLocations() {
if (Build.VERSION.SDK_INT < 11) {
// feature not available for these versions
return new HashSet<>();
}
return sharedPreferences.getStringSet(KEY_PAST_LOCATIONS, new HashSet<String>());
}
}

View file

@ -0,0 +1,59 @@
package org.ligi.passandroid.model
import android.annotation.TargetApi
import android.content.SharedPreferences
import android.os.Build
import org.ligi.passandroid.Tracker
import java.util.*
import javax.inject.Inject
class PastLocationsStore
@Inject
constructor(private val sharedPreferences: SharedPreferences, private val tracker: Tracker) {
@TargetApi(11)
fun putLocation(path: String) {
if (Build.VERSION.SDK_INT < 11) {
// feature not available for these versions
return
}
val pastLocations = sharedPreferences.getStringSet(KEY_PAST_LOCATIONS, HashSet<String>())
if (pastLocations!!.size >= MAX_ELEMENTS) {
deleteOneElementFromSet(pastLocations)
}
if (!pastLocations.contains(path)) {
pastLocations.add(path)
}
tracker.trackEvent("scan", "put location", "count", pastLocations.size.toLong())
sharedPreferences.edit().putStringSet(KEY_PAST_LOCATIONS, pastLocations).apply()
}
private fun deleteOneElementFromSet(pastLocations: MutableSet<String>) {
val deleteAtPosition = (Math.random() * MAX_ELEMENTS).toInt()
for ((pos, location) in pastLocations.withIndex()) {
if (pos == deleteAtPosition) {
pastLocations.remove(location)
return
}
}
}
// feature not available for these versions
val locations: Set<String>
@TargetApi(11)
get() {
if (Build.VERSION.SDK_INT < 11) {
return HashSet()
}
return sharedPreferences.getStringSet(KEY_PAST_LOCATIONS, HashSet<String>())
}
companion object {
val KEY_PAST_LOCATIONS = "past_locations"
val MAX_ELEMENTS = 5
}
}

View file

@ -1,19 +0,0 @@
package org.ligi.passandroid.printing;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.print.PrintManager;
import org.ligi.passandroid.R;
import org.ligi.passandroid.model.pass.Pass;
public class PrintHelper {
@TargetApi(Build.VERSION_CODES.KITKAT)
public static void doPrint(Context context, Pass pass) {
final PrintManager printManager = (PrintManager) context.getSystemService(Context.PRINT_SERVICE);
final String jobName = context.getString(R.string.app_name) + " print of " + pass.getDescription();
printManager.print(jobName, new PassPrintDocumentAdapter(context, pass, jobName), null);
}
}

View file

@ -0,0 +1,15 @@
package org.ligi.passandroid.printing
import android.annotation.TargetApi
import android.content.Context
import android.os.Build
import android.print.PrintManager
import org.ligi.passandroid.R
import org.ligi.passandroid.model.pass.Pass
@TargetApi(Build.VERSION_CODES.KITKAT)
fun doPrint(context: Context, pass: Pass) {
val printManager = context.getSystemService(Context.PRINT_SERVICE) as PrintManager
val jobName = context.getString(R.string.app_name) + " print of " + pass.description
printManager.print(jobName, PassPrintDocumentAdapter(context, pass, jobName), null)
}

View file

@ -15,7 +15,7 @@ import org.ligi.passandroid.maps.PassbookMapsFacade
import org.ligi.passandroid.model.PassStore
import org.ligi.passandroid.model.Settings
import org.ligi.passandroid.model.pass.Pass
import org.ligi.passandroid.printing.PrintHelper
import org.ligi.passandroid.printing.doPrint
import java.io.File
import javax.inject.Inject
@ -92,7 +92,7 @@ class PassMenuOptions(val activity: Activity, val pass: Pass) {
}
R.id.menu_print -> {
PrintHelper.doPrint(activity, pass)
doPrint(activity, pass)
return true
}
}

View file

@ -1,21 +1,15 @@
PassAndroid - Passbook для Android
Что это?
========
<b>Что это?</b>
Это приложение для просмотра файлов passbook. Это может быть посадочный талон на ваш следующий рейс, купон на бесплатный кофе в месте назначения, билет в кино, дисконтная карта - возможна масса вариантов.
Это замена кускам бумаги или пластика, которые приходится носить с собой а потом выбрасывать. Давайте спасем несколько деревьев и уменьшим количество мусора!
Кстати, это приложение бесплатно, свободно в духе концепции Ричарда Столлмана о бесплатном и открытом программном обеспечении на благо мира.
Как это работает?
==============
<b>Как это работает?</b>
Есть так называемые pkpass фалы, которые можно открыть в этом приложением, например когда вы получаете их по почте или загружаете с сайтов. Самое важное содержимое - это штрих-код (QR , AZTEC & PDF417), который обычно считывают на кассе или на стойке регистрации. Но в карточке может содержаться еще и детальное описание, а часто и время события (которое можно добавить в календарь), а также место (до которого проложить маршрут). Попробуйте, это удобно!
Карточки, сохраненные в приложении, можно использовать офлайн!
История создания
=====
<b>История создания</b>
Я наткнулся на файлы Passbook когда получил билет на конференцию "29C3" (ежегодные компьютерные конференции, эта проводилась в 2013г.), мне понравилась идея но не было приложения под Android которое меня бы устроило. Я увидел что технически реализация довольно проста: обычный zip архив со скриптом json и картинками. Первая версия приложения была создана очень быстро и сработала, меня пустили на конференцию. В течении следующего года я почти не занимался этим приложением, поскольку лично у меня оно не находило постоянного применения. Однако много людей скачали приложение и используют его, люди писали отзывы, присылали файлы passbook которые не открывались в приложении, пришлось поработать и добиться нормальной работы с файлами passbook, в которых json был просто "сломан", написан не по стандарту.
Годом позже - как раз перед конференцией "30C3" (2014г.) - я опять начал активно работать над этим приложением по двум причинам:
@ -23,8 +17,7 @@ PassAndroid - Passbook для Android
- я получил письмо от Luis Torrecilla - прекрасного дизайнера, который нарисовал новый дизайн приложения.
Все это привело к появлению следующей версии PassAndroid, полностью новой версии с новым функциональным интерфейсом.
Карточки которые работают с данным приложением
=============
<b>Карточки которые работают с данным приложением</b>
Air Berlin
Air Canada
@ -64,18 +57,14 @@ TAP (Portugal)
это только те карточки про которые я знаю, напишите мне или напишите в сообществе, какие еще карточки Passbook работают в данном приложении.
Исходный код / сообщения о проблемах в приложении
==================
<b>Исходный код / сообщения о проблемах в приложении</b>
все на github:
https://github.com/ligi/PassAndroid/
Лицензия
======
<b>Лицензия </b>
GPLv3
Ключевые слова: карточки подарочные карты лояльности билеты passbook qr-code qr-код qr-коды билет билеты лояльность passsource членство идентификация член конференция посадочный талон путешествия