ligi / passandroid Goto Github PK
View Code? Open in Web Editor NEWAndroid App to view passes
License: GNU General Public License v3.0
Android App to view passes
License: GNU General Public License v3.0
Support for Android Wear-watches would be very nice.
So you wouldn't have to pull out your phone, while you have your luggage in your hands.
Example: https://play.google.com/store/apps/details?id=com.delta.mobile.android
A dark theme would be nice, especially when you are on a plane at night. So you don't have to look at a too bright screen.
It'd be neat if I could specify where to look for pkpass files - right now searching for passes takes a long time.
It would be great if you could go to the next/previous pass with a swipe gesture, like in the Gmail app.
The QR code is broken in the detailed view on Android 4.2.1. Only a part of the code is shown since the new zoom feature has been added. Full screen mode is working. On Android 5.1.1, it works. We can send a screenshot, if needed.
I am using PassAndroid
version 2.5.5
via F-Droid since a few days and I ❤️ it (thank you!).
One nice thing would be, if imported boarding passes could be manually renamed in the menu's listing.
In my case, after clicking and importing the URL in the Turkish Airlines SMS, I got the following two menu entries, which I would like to have renamed myself to something more explicit :)
currently when trying to import a pass and the id exists an error message is given and we quit - UX wise it would be better if we open the corresponding pass instead of quitting
Hello, I'm doing research on Android async programming. I see in PassAndroid
, you use IntentService
at some places (SearchPassesIntentService
) while use AsyncTask
at other places (such as in ExtractURLAsIphoneActivity
). I'm wondering how do you choose between AsyncTask
and IntentService
? because both are used to execute background tasks.
As far as I know, some articles (for example this article) mention that AsyncTask leads to memory leak and losing task result when there's a configuration change (such as orientation change). But using IntentService
or AsyncTaskLoader
can avoid such problems.
The 'pull to refresh' mechanism doesn't work when the "No passes yet" message is shown. In my opinion it should.
I've imported all jars listed in your code but still having build path issues. Would be nice if you could give a brief step by step install and run in README.
Please add support for linear barcodes. There are royalty cards that use them.
at the moment we get a generic message that the pass is not valid - might be useful to redirect to website
URLRewrite could call PassImport with forResult
at the moment passandroid serializes the pass-POJOs to binary files - the main issue is that parsing Apples passbook format can take time ( e.g. to work around all the vendor-specific quirks )
Sometimes we want to load a lot of passbooks at once - e.g. to sort them
But the binary dump makes things complicated ( e.g. for #50 ) - removing the binary caching first and load intermediary json
is now on maven-central - check if the problem still exists zxing/zxing#165
if not take the version
Include a Changelog Link, within the F-Droid App', on Info' Page. Current, 2.7.0, which does not have one.
In the screen to create a passbook file when you scroll over to color/bar code, the app crashes . Useful infos:
file: /data/data/org.ligi.passandroid/files/2.5.3-1429054498204.tracedroid
Android Version: 5.0.2
Phone Model: Moto G 2014
TraceDroid Version: 1.1
TraceDroid extra:
Stacktrace:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.ligi.passandroid.model.BarCode.getMessage()' on a null object reference
at org.ligi.passandroid.ui.edit_fragments.BarcodeEditFragment.onCreateView(BarcodeEditFragment.java:111)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:488)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:555)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495)
at com.viewpagerindicator.TitlePageIndicator.onTouchEvent(TitlePageIndicator.java:614)
at android.view.View.dispatchTouchEvent(View.java:8388)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2569)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1743)
at android.app.Activity.dispatchTouchEvent(Activity.java:2739)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2530)
at android.view.View.dispatchPointerEvent(View.java:8578)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4028)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3894)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3456)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3509)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3475)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3585)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3483)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3642)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3456)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3509)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3475)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3483)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3456)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5708)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5682)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5653)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5798)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:143)
at android.os.Looper.loop(Looper.java:122)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
Log:
0 D: Writing unhandled exception to: /data/data/org.ligi.passandroid/files/2.5.3-1429054498204.tracedroid
1 D: Searching Exceptions in: /data/data/org.ligi.passandroid/files
2 I: PassParse Exception org.json.JSONException: No value for description
3 I: Passbook cache miss
4 D: current handler class=com.android.internal.os.RuntimeInit$UncaughtHandler
file: /data/data/org.ligi.passandroid/files/2.5.3-1429054646177.tracedroid
Android Version: 5.0.2
Phone Model: Moto G 2014
TraceDroid Version: 1.1
TraceDroid extra:
Stacktrace:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.ligi.passandroid.model.BarCode.getMessage()' on a null object reference
at org.ligi.passandroid.ui.edit_fragments.BarcodeEditFragment.onCreateView(BarcodeEditFragment.java:111)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:488)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
at android.support.v4.view.ViewPager$3.run(ViewPager.java:249)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:549)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
Log:
0 D: Writing unhandled exception to: /data/data/org.ligi.passandroid/files/2.5.3-1429054646177.tracedroid
1 I: PassParse Exception org.json.JSONException: No value for description
2 I: Passbook cache miss
3 D: current handler class=com.android.internal.os.RuntimeInit$UncaughtHandler
Firstly, thanks for your work.
Please, could you add support to add passbook from QR, maybe via Barcode Scanner.
Thanks again.
Feature request: backup and restore your passes using the storage access framework, or Google Drive / Dropbox directly.
I would like to save old or used passbook files, for example to know in which date I traveled, I think that is useful (other apps like this one has it).
com.squareup.otto.Bus
scenario:
the user has several copies of the same pass
the user tries to delete the pass with source
next scan -> the pass is still popping up - even though it was deleted
I can't go back to the top after scrolling down.
PassAndroid version: 243. Android 4.1.2.
Got a mail from a user that the time for the calendar is wrong - when looking into the problem I noticed the time is correct - but it is the expiry-date which was not useful for the user. Unfortunately it is the only parseable date in the pass. Removing this date ( or removing the option to add it to calendar ) has some UX issues - so I tend to just add a warning in form of an alert after clicking "add to calendar"
If I try to open a .pkpass attached to an email directly from the Gmail client, I receive a message saying 'You don't have an app that can open this file (.pkpass)...' Would be great if you could register PassAndroid as .pkpass file handler in one of the next versions. Many thanks!
Most passcards and iBeacons are used together a lot, would be great to have support for iBeacons
As a user I want to have the option to create a pass without a barcode
At the moment the button does nothing when clicked and no barcode is selected
see: scans forever
expected: should pick up where it was
attach notes to passes - got the idea from a user .
On my Galaxy S4 (1080*1920 AFAIK), the rendered bar codes are tiny and won't scan.
there is a workaround:
that can be removed when this limitation of SwipeRefreshLayout is no longer there
context:
after #43 passandroid supports displaying 1D barcodes in passes - but we also need them in editing.
I am just unsure UX wise - 3 is max in the width IMHO for barcodes - I liked the feature of previewing all barcodes - but have the feeling that 4 is too much for this
searching passes take a long time - I recently attacked this problem from one side ( doing downloads first ) - but there is more room for improvement. When PassAndroid finds a file it should remember the path and search there next time first.
I had an interesting situation in the last days with turkish airlines.
They send out AZTEC based electronic tickets (which are imported fine and work great!) but not all the gates on airports they use can read AZTEC.
So what I thought is: since the AZTEC is already imported (and the data within it known) - could one also add a PDF417 version of it as an alternative, e.g., while sliding to the right in code-full-screen mode?
This would basically imitate a full (printed) boarding pass (that only has PDF417 on it) and is well supported even by scanners at older gates.
Since I got still additionally my boarding passes printed during drop off, I can also give examples of printed boarding passes and electronic versions I got (via private mail).
This is a request for enhancement.
Rather than only be able to import passbook files, why not also just scan the barcode of any ticket? For example the Droidcon ticket, there is no passbook for that.
Of course it would be important that the barcodes are displayed in the same format as they were recorded.
something on top of design lib - e.g.: https://github.com/konifar
Hi,
I have used this app last about a year ago. Now I installed the current version 2.7.0 from F-droid and launched the app to look for enhancements. But the app only opens a white window and then stops.
I have a Samsung Note 10' Tablet with the old Android 4.1.2
Newly tested: previous version 2.6.4 works correctly.
Regards
Add a LockScreen widget. Need to decide first if there is only one pass in there all the time ( perhaps a Switch on the pass ) - or some way to switch between certain passes in the lockscreen. Also what should be displayed there ( only BarCode and title or anything more)
Hi,
thanks for your great app! I used it on my last flight and found it to be very useful. I only had one issue: When displaying the QR code in full size the display brightness was to low to scan the code. It would be great if the display was turned to maximum brightness when the QR code is displayed.
Cheers,
deboerk
passes need to be able to contain directories
Hi, I noticed, that there is an option to add the time/date of a boarding pass to the phones calender.
The same would be nice for (cinema) tickets.
i think Apple's Passbook does this and i think is't very handy...
Some minutes before the time of the Pass/Ticket/... is happening the app could display a notification with a quick link to the Pass. So you don't have to search for the App itself and the right Pass in the App (if you have a lot).
When on the detail view of the pass, it is not possible to rotate. I'm not sure, maybe this is meant to be a feature, and I totally understand that no rotation is allowed when having the barcode fullscreen, but on the details page it would make sense.
Other funny thing is, that if you rotate on the overview (which works), and then go to the details-view you stay rotated, but can't rotate back :)
From the Virgin Australia check in link (Email / SMS), if you choose open in PassAndroid, it will not add the pass into PassAndroid.
You have to save it (from example, open in Chrome in desktop, simulate as IPhone 6, add to passbook to get the pkpass file (to Google Drive)) and than can add into the app.
The pass was able to add into the app directly last year by opening the check in link
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.