GithubHelp home page GithubHelp logo

bartrunnerandroid's People

Contributors

cesquivias avatar dougkeen avatar loadedion avatar robertokl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bartrunnerandroid's Issues

Performance issue

Hello, we are working on a project called DiagDroid (http://www.cudroid.com/DiagDroid/) for detecting potential performance issues. Our tool could find performance degradation caused by improper usage of asynchronous executions.
We find that in some cases your app may suffer a long queuing/processing delay.

Case 1:
Related source code Class: EtdService Line 216
Circumstance The task would wait for a long time to get executed.
Problem I find that the execution of GetRealTimeDeparturesTask in this line often conflicts with GetRouteFareTask and GetRouteFareTask. This is because you invoke the AsyncTask via execute() method. This method executes the AsyncTasks in sequential which means all the scheduled tasks have to wait until the previous task finishes execution.
Suggested modification I suggest you use executeOnExecutor method with separate thread pool for different purposed AsyncTasks.

Case 2:
Related source code Class: GetRealTimeDeparturesTask Line: 64
Circumstance The task usually executes for a long time. During my test, it costs on average >1 second to finish. The cancellation of previous GetRealTimeDeparturesTask does not work properly.
Problem I think you have noticed to cancel the obsolete tasks. But you immediately go into the method getDeparturesFromNetwork which consumes most time of the task. If the cancel command is not issued as soon as the asynctask is executed (which is very likely to happen), you failed to cancel this task.
Suggested modification You may design an interrupt on cancelling the network request via utilizing the cancel() method of OkHttpClient (Call class).

Other AsyncTasks GetScheduleInformationTask and GetRouteFareTask which are separately invoked in Line 248 of EtdService and Line 217 of RoutesListActivity have similar issue.

ps. I will release my tool with a tutorial on how to use it about one week later (http://www.cudroid.com/DiagDroid/), welcome to have a try on it. Thanks.

No Notifications

Version 2.2.11 on Oreo has broken notifications. Selecting a specific train no longer pins a notification for that trip on the notification bar.

Build difficulty

I wonder if the project.properties file is correct as it only references ActionBarSherlock within HoloEverywhere when it seems to require Holo theme sherlock. At any rate I get a build failure with such an error at Release_2.1.1.

Notification doesn't show up on Android Wear

I've noticed that when I select a particular train, and an ongoing notification is created, the notification doesn't show up on Android Wear. Is there any chance you could fix that?

Unable to keep favorite route (S22 Ultra)

The app seems to unable to save favorite routes in S22 Ultra

Repro Steps:

  1. Add favorite routes (any number)
  2. Hard kill the app and reopen (same happens if OS kills it eventually; also with rebooting)
  3. No favorite routes

Info:
Version: 2.2.21
Phone: Samsung S22 Ultra
Android version: Android 12 (prior) and 13 (current)

Other: Clearing cache, uninstalling, etc; doesn't fix it.

Crashes on Marshmallow

Received several reports of crashing. Looks related to ActionBarSherlock/HoloEverywhere:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dougkeen.bart/com.dougkeen.bart.activities.RoutesListActivity_}: java.lang.RuntimeException: java.lang.IllegalAccessException: java.lang.Class<org.holoeverywhere.addon.AddonSherlock$HoloActionBarSherlockNative> is not accessible from java.lang.Class<com.actionbarsherlock.ActionBarSherlock>
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: java.lang.Class<org.holoeverywhere.addon.AddonSherlock$HoloActionBarSherlockNative> is not accessible from java.lang.Class<com.actionbarsherlock.ActionBarSherlock>
    at com.actionbarsherlock.ActionBarSherlock.wrap(ActionBarSherlock.java:239)
    at org.holoeverywhere.addon.AddonSherlock$AddonSherlockA.getSherlock(AddonSherlock.java:53)
    at org.holoeverywhere.addon.AddonSherlock$AddonSherlockA.installDecorView(AddonSherlock.java:60)
    at android.support.v4.app._HoloActivity$1.action(_HoloActivity.java:587)
    at android.support.v4.app._HoloActivity$1.action(_HoloActivity.java:1)
    at org.holoeverywhere.addon.IAddonBasicAttacher.performAddonAction(IAddonBasicAttacher.java:167)
    at org.holoeverywhere.app.Activity.performAddonAction(Activity.java:497)
    at android.support.v4.app._HoloActivity.requestDecorView(_HoloActivity.java:584)
    at android.support.v4.app._HoloActivity.setContentView(_HoloActivity.java:604)
    at com.dougkeen.bart.activities.RoutesListActivity_.setContentView(RoutesListActivity_.java:107)
    at com.dougkeen.bart.activities.RoutesListActivity_.onCreate(RoutesListActivity_.java:42)
    at android.app.Activity.performCreate(Activity.java:6237)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
    ... 9 more
Caused by: java.lang.IllegalAccessException: java.lang.Class<org.holoeverywhere.addon.AddonSherlock$HoloActionBarSherlockNative> is not accessible from java.lang.Class<com.actionbarsherlock.ActionBarSherlock>
    at java.lang.reflect.Constructor.newInstance(Native Method)
    at com.actionbarsherlock.ActionBarSherlock.wrap(ActionBarSherlock.java:231)
    ... 22 more

Trip selection issue

Starting with a recent update, when I select a trip from a list (favorites or quick lookup) the app goes back to the home screen instead of staying on the list screen and showing the trip at the top. When I navigate back to the screen, the trip is still selected and I can clear it without leaving the list. I'm using a Pixel 2 on Android version 9.

BART Runner crashes in airplane mode

=====STEPS TO REPRODUCE=====

  1. enter airplane mode
  2. open bart runner app
  3. tap quick departure lookup at bottom of screen, choose an origin and destination, hit ok

EXPECTED RESULTS:
I'm actually not sure if it has cached offline data or is supposed to pop up an error message of some sort

NUMBER OF TIMES YOU WERE ABLE TO REPRODUCE (e.g. 3/10): 10/10

DEVICES TESTED: Nexus 5X Android O preview, Pixel Android N

Issue is 100% reproducible with airplane mode.

Build: sailfish-userdebug 7.1.2 N2G48C 4104010 dev-keys

Package [com.dougkeen.bart] (a4f88e8):
versionCode=37 minSdk=14 targetSdk=25
versionName=2.2.10

java.lang.RuntimeException: An error occurred while executing doInBackground()
GMS RETRACE
at android.os.AsyncTask$3.done(AsyncTask.java:325)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.NullPointerException: application interceptor com.dougkeen.bart.networktasks.NetworkUtils$RetryInterceptor@3c77394 returned null
GMS RETRACE
at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:235)
at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:205)
at com.squareup.okhttp.Call.execute(Call.java:80)
at com.dougkeen.bart.networktasks.GetRealTimeDeparturesTask.getDeparturesFromNetwork(GetRealTimeDeparturesTask.java:94)
at com.dougkeen.bart.networktasks.GetRealTimeDeparturesTask.doInBackground(GetRealTimeDeparturesTask.java:65)
at com.dougkeen.bart.networktasks.GetRealTimeDeparturesTask.doInBackground(GetRealTimeDeparturesTask.java:20)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)

Undo delete of favorite route

I accidently swiped away a favorite route but I wanted to. Please have a way of undoing the deletion or maybe have a confirmation

The application crashes suddenly after selecting departures.

Hi @dougkeen

Expected behavior

The BART Runner users need to be able to use Favorite Routes -> Selecting any Departures action on this application.

Actual behavior

Firstly, I have chosen any route from Favorite Routes section, then I clicked on any Departures, The application crashes suddenly after selecting departures.

How to reproduce

  1. Open the BART Runner app.
  2. Click on the any Favorite Route.
  3. Then click on any Departures option.
  4. And you will see that the application crashes suddenly.

• App version: 2.2.17 (latest)
• Operating system: Android 9.0

Recording Of The Bug
bug

Logcat Report
java.lang.SecurityException: Permission Denial: startForeground from pid=31105, uid=10184 requires android.permission.FOREGROUND_SERVICE at android.os.Parcel.createException(Parcel.java:1953) at android.os.Parcel.readException(Parcel.java:1921) at android.os.Parcel.readException(Parcel.java:1871) at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5144) at android.app.Service.startForeground(Service.java:695) at com.dougkeen.bart.services.BoardedDepartureService.updateNotification(BoardedDepartureService.java:327) at com.dougkeen.bart.services.BoardedDepartureService.onHandleIntent(BoardedDepartureService.java:202) at com.dougkeen.bart.services.BoardedDepartureService$ServiceHandler.handleMessage(BoardedDepartureService.java:66) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.os.HandlerThread.run(HandlerThread.java:65) Caused by: android.os.RemoteException: Remote stack trace: at com.android.server.am.ActivityManagerService.enforcePermission(ActivityManagerService.java:9573) at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:1226) at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:901) at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:21069) at android.app.IActivityManager$Stub.onTransact$setServiceForeground$(IActivityManager.java:10581)

v2.2.19 to F-Droid

Thank you for Bart Runner.

Will you be able to update v2.2.20 to F-Droid?

NullPointerException

//package name: com.dougkeen.bart
//version: 2.2.6
//target sdk version: android-18
java.lang.NullPointerException
at com.dougkeen.bart.data.DepartureArrayAdapter.getView(DepartureArrayAdapter.java:56)
at android.widget.AbsListView.obtainView(AbsListView.java:2177)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1247)
at android.widget.ListView.onMeasure(ListView.java:1159)
at android.view.View.measure(View.java:15848)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:15848)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:15848)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393)
at android.view.View.measure(View.java:15848)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15848)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:15848)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2189)
at android.view.View.measure(View.java:15848)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1905)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1284)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
at android.view.Choreographer.doCallbacks(Choreographer.java:562)
at android.view.Choreographer.doFrame(Choreographer.java:532)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

App shows cancelled trains

At some point recently Bart made a semantic change to their API to make it also return cancelled trips alongside real ones.

From http://api.bart.gov/docs/etd/etd.aspx

<cancelflag> indicates a scheduled ETD that has been cancelled and is not in service.
<dynamicflag> indicates an unscheduled ETD that has been added to service.

The Bart runner app doesn't know about this new field, so it shows the cancelled trains alongside real ones.

I could probably implement a PR which filters them out of the API response entirely. A better solution would probably be to show them in strikethrough, but that's not something I have a clear idea how to do.

Lock the list of favorite routes

I was getting used of "pull to refresh" and frequently use pull trying to refresh the list, only to find some favorite routes get swiped away.

It will be good if the list is locked by default and can only be swiped away by unlocking first.

NullPointerException

//package name: com.dougkeen.bart
//version: 2.2.6
//target sdk version: android-18
java.lang.NullPointerException
at com.dougkeen.bart.services.EtdService$EtdServiceEngine.applyScheduleInformation(EtdService.java:285)
at com.dougkeen.bart.services.EtdService$EtdServiceEngine$2.onResult(EtdService.java:233)
at com.dougkeen.bart.networktasks.GetScheduleInformationTask.onPostExecute(GetScheduleInformationTask.java:104)
at com.dougkeen.bart.networktasks.GetScheduleInformationTask.onPostExecute(GetScheduleInformationTask.java:20)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

one API used in okhttp package may affect your app!

Hi, We find "<java.util.zip.Deflater: int deflate(byte[],int,int,int)>" called in "<okio.DeflaterSink: void deflate(boolean)>" on line 94 are actually added in SDK since level 19, but your minSdkVersion is only 14.
Though this API is in external library, it seems to be reachable from your APP. please help to check whether it may cause problem to your app.

there are several possible path to that API, we list them here to facilitate your checking.

all reachable paths:
reachable path 1:
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(android.view.View,android.view.ViewGroup$LayoutParams)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response execute()>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponseWithInterceptorChain(boolean)>
--><com.squareup.okhttp.Call$ApplicationInterceptorChain: com.squareup.okhttp.Response proceed(com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponse(com.squareup.okhttp.Request,boolean)>
--><com.squareup.okhttp.internal.http.HttpEngine: void sendRequest()>
--><com.squareup.okhttp.internal.http.HttpEngine: void connect()>
--><com.squareup.okhttp.OkHttpClient$1: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,com.squareup.okhttp.Connection,com.squareup.okhttp.internal.http.HttpEngine,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,java.lang.Object,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connect(int,int,int,com.squareup.okhttp.Request,java.util.List,boolean)>
--><com.squareup.okhttp.Connection: void connectSocket(int,int,int,com.squareup.okhttp.Request,com.squareup.okhttp.internal.ConnectionSpecSelector)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void sendConnectionPreface()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>
reachable path 2:
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(int)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response execute()>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponseWithInterceptorChain(boolean)>
--><com.squareup.okhttp.Call$ApplicationInterceptorChain: com.squareup.okhttp.Response proceed(com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponse(com.squareup.okhttp.Request,boolean)>
--><com.squareup.okhttp.internal.http.HttpEngine: void sendRequest()>
--><com.squareup.okhttp.internal.http.HttpEngine: void connect()>
--><com.squareup.okhttp.OkHttpClient$1: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,com.squareup.okhttp.Connection,com.squareup.okhttp.internal.http.HttpEngine,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,java.lang.Object,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connect(int,int,int,com.squareup.okhttp.Request,java.util.List,boolean)>
--><com.squareup.okhttp.Connection: void connectSocket(int,int,int,com.squareup.okhttp.Request,com.squareup.okhttp.internal.ConnectionSpecSelector)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void sendConnectionPreface()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>
reachable path 3:
--><com.dougkeen.bart.activities.RoutesListActivity_: void onCreate(android.os.Bundle)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(int)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response execute()>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponseWithInterceptorChain(boolean)>
--><com.squareup.okhttp.Call$ApplicationInterceptorChain: com.squareup.okhttp.Response proceed(com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponse(com.squareup.okhttp.Request,boolean)>
--><com.squareup.okhttp.internal.http.HttpEngine: void sendRequest()>
--><com.squareup.okhttp.internal.http.HttpEngine: void connect()>
--><com.squareup.okhttp.OkHttpClient$1: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,com.squareup.okhttp.Connection,com.squareup.okhttp.internal.http.HttpEngine,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,java.lang.Object,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connect(int,int,int,com.squareup.okhttp.Request,java.util.List,boolean)>
--><com.squareup.okhttp.Connection: void connectSocket(int,int,int,com.squareup.okhttp.Request,com.squareup.okhttp.internal.ConnectionSpecSelector)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void sendConnectionPreface()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>
reachable path 4:
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(android.view.View)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response execute()>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponseWithInterceptorChain(boolean)>
--><com.squareup.okhttp.Call$ApplicationInterceptorChain: com.squareup.okhttp.Response proceed(com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponse(com.squareup.okhttp.Request,boolean)>
--><com.squareup.okhttp.internal.http.HttpEngine: void sendRequest()>
--><com.squareup.okhttp.internal.http.HttpEngine: void connect()>
--><com.squareup.okhttp.OkHttpClient$1: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,com.squareup.okhttp.Connection,com.squareup.okhttp.internal.http.HttpEngine,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,java.lang.Object,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connect(int,int,int,com.squareup.okhttp.Request,java.util.List,boolean)>
--><com.squareup.okhttp.Connection: void connectSocket(int,int,int,com.squareup.okhttp.Request,com.squareup.okhttp.internal.ConnectionSpecSelector)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void sendConnectionPreface()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>
reachable path 5:
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(android.view.View,android.view.ViewGroup$LayoutParams)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response execute()>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponseWithInterceptorChain(boolean)>
--><com.squareup.okhttp.Call$ApplicationInterceptorChain: com.squareup.okhttp.Response proceed(com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponse(com.squareup.okhttp.Request,boolean)>
--><com.squareup.okhttp.internal.http.HttpEngine: void sendRequest()>
--><com.squareup.okhttp.internal.http.HttpEngine: void connect()>
--><com.squareup.okhttp.OkHttpClient$1: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,com.squareup.okhttp.Connection,com.squareup.okhttp.internal.http.HttpEngine,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,java.lang.Object,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connect(int,int,int,com.squareup.okhttp.Request,java.util.List,boolean)>
--><com.squareup.okhttp.Connection: void connectSocket(int,int,int,com.squareup.okhttp.Request,com.squareup.okhttp.internal.ConnectionSpecSelector)>
--><com.squareup.okhttp.internal.framed.FramedConnection$Builder: com.squareup.okhttp.internal.framed.FramedConnection build()>
--><com.squareup.okhttp.internal.framed.FramedConnection: void (com.squareup.okhttp.internal.framed.FramedConnection$Builder,com.squareup.okhttp.internal.framed.FramedConnection$1)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void (com.squareup.okhttp.internal.framed.FramedConnection$Builder)>
--><java.lang.Thread: void run()>
--><com.squareup.okhttp.internal.NamedRunnable: void run()>
--><com.squareup.okhttp.internal.framed.FramedConnection$2: void execute()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>
reachable path 6:
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(int)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response execute()>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponseWithInterceptorChain(boolean)>
--><com.squareup.okhttp.Call$ApplicationInterceptorChain: com.squareup.okhttp.Response proceed(com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponse(com.squareup.okhttp.Request,boolean)>
--><com.squareup.okhttp.internal.http.HttpEngine: void sendRequest()>
--><com.squareup.okhttp.internal.http.HttpEngine: void connect()>
--><com.squareup.okhttp.OkHttpClient$1: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,com.squareup.okhttp.Connection,com.squareup.okhttp.internal.http.HttpEngine,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,java.lang.Object,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connect(int,int,int,com.squareup.okhttp.Request,java.util.List,boolean)>
--><com.squareup.okhttp.Connection: void connectSocket(int,int,int,com.squareup.okhttp.Request,com.squareup.okhttp.internal.ConnectionSpecSelector)>
--><com.squareup.okhttp.internal.framed.FramedConnection$Builder: com.squareup.okhttp.internal.framed.FramedConnection build()>
--><com.squareup.okhttp.internal.framed.FramedConnection: void (com.squareup.okhttp.internal.framed.FramedConnection$Builder,com.squareup.okhttp.internal.framed.FramedConnection$1)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void (com.squareup.okhttp.internal.framed.FramedConnection$Builder)>
--><java.lang.Thread: void run()>
--><com.squareup.okhttp.internal.NamedRunnable: void run()>
--><com.squareup.okhttp.internal.framed.FramedConnection$2: void execute()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>
reachable path 7:
--><com.dougkeen.bart.activities.RoutesListActivity_: void onCreate(android.os.Bundle)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(int)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response execute()>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponseWithInterceptorChain(boolean)>
--><com.squareup.okhttp.Call$ApplicationInterceptorChain: com.squareup.okhttp.Response proceed(com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponse(com.squareup.okhttp.Request,boolean)>
--><com.squareup.okhttp.internal.http.HttpEngine: void sendRequest()>
--><com.squareup.okhttp.internal.http.HttpEngine: void connect()>
--><com.squareup.okhttp.OkHttpClient$1: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,com.squareup.okhttp.Connection,com.squareup.okhttp.internal.http.HttpEngine,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,java.lang.Object,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connect(int,int,int,com.squareup.okhttp.Request,java.util.List,boolean)>
--><com.squareup.okhttp.Connection: void connectSocket(int,int,int,com.squareup.okhttp.Request,com.squareup.okhttp.internal.ConnectionSpecSelector)>
--><com.squareup.okhttp.internal.framed.FramedConnection$Builder: com.squareup.okhttp.internal.framed.FramedConnection build()>
--><com.squareup.okhttp.internal.framed.FramedConnection: void (com.squareup.okhttp.internal.framed.FramedConnection$Builder,com.squareup.okhttp.internal.framed.FramedConnection$1)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void (com.squareup.okhttp.internal.framed.FramedConnection$Builder)>
--><java.lang.Thread: void run()>
--><com.squareup.okhttp.internal.NamedRunnable: void run()>
--><com.squareup.okhttp.internal.framed.FramedConnection$2: void execute()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>
reachable path 8:
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(android.view.View)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response execute()>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponseWithInterceptorChain(boolean)>
--><com.squareup.okhttp.Call$ApplicationInterceptorChain: com.squareup.okhttp.Response proceed(com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Call: com.squareup.okhttp.Response getResponse(com.squareup.okhttp.Request,boolean)>
--><com.squareup.okhttp.internal.http.HttpEngine: void sendRequest()>
--><com.squareup.okhttp.internal.http.HttpEngine: void connect()>
--><com.squareup.okhttp.OkHttpClient$1: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,com.squareup.okhttp.Connection,com.squareup.okhttp.internal.http.HttpEngine,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connectAndSetOwner(com.squareup.okhttp.OkHttpClient,java.lang.Object,com.squareup.okhttp.Request)>
--><com.squareup.okhttp.Connection: void connect(int,int,int,com.squareup.okhttp.Request,java.util.List,boolean)>
--><com.squareup.okhttp.Connection: void connectSocket(int,int,int,com.squareup.okhttp.Request,com.squareup.okhttp.internal.ConnectionSpecSelector)>
--><com.squareup.okhttp.internal.framed.FramedConnection$Builder: com.squareup.okhttp.internal.framed.FramedConnection build()>
--><com.squareup.okhttp.internal.framed.FramedConnection: void (com.squareup.okhttp.internal.framed.FramedConnection$Builder,com.squareup.okhttp.internal.framed.FramedConnection$1)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void (com.squareup.okhttp.internal.framed.FramedConnection$Builder)>
--><java.lang.Thread: void run()>
--><com.squareup.okhttp.internal.NamedRunnable: void run()>
--><com.squareup.okhttp.internal.framed.FramedConnection$2: void execute()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>
reachable path 9:
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(android.view.View,android.view.ViewGroup$LayoutParams)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.ResponseBody: java.lang.String string()>
--><com.squareup.okhttp.ResponseBody: byte[] bytes()>
--><okio.RealBufferedSource: byte[] readByteArray()>
--><okio.Buffer: long writeAll(okio.Source)>
--><com.squareup.okhttp.internal.framed.FramedStream$FramedDataSource: long read(okio.Buffer,long)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void writeWindowUpdateLater(int,long)>
--><com.squareup.okhttp.internal.NamedRunnable: void run()>
--><com.squareup.okhttp.internal.framed.FramedConnection$2: void execute()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>
reachable path 10:
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(int)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.ResponseBody: java.lang.String string()>
--><com.squareup.okhttp.ResponseBody: byte[] bytes()>
--><okio.RealBufferedSource: byte[] readByteArray()>
--><okio.Buffer: long writeAll(okio.Source)>
--><com.squareup.okhttp.internal.framed.FramedStream$FramedDataSource: long read(okio.Buffer,long)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void writeWindowUpdateLater(int,long)>
--><com.squareup.okhttp.internal.NamedRunnable: void run()>
--><com.squareup.okhttp.internal.framed.FramedConnection$2: void execute()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>
reachable path 11:
--><com.dougkeen.bart.activities.RoutesListActivity_: void onCreate(android.os.Bundle)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void setContentView(int)>
--><com.dougkeen.bart.activities.RoutesListActivity_: void afterSetContentView_()>
--><com.dougkeen.bart.activities.RoutesListActivity: void afterViews()>
--><com.dougkeen.bart.activities.RoutesListActivity: void refreshFares()>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.Object doInBackground(java.lang.Object[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String doInBackground(com.dougkeen.bart.networktasks.GetRouteFareTask$Params[])>
--><com.dougkeen.bart.networktasks.GetRouteFareTask: java.lang.String getFareFromNetwork(com.dougkeen.bart.networktasks.GetRouteFareTask$Params,int)>
--><com.squareup.okhttp.ResponseBody: java.lang.String string()>
--><com.squareup.okhttp.ResponseBody: byte[] bytes()>
--><okio.RealBufferedSource: byte[] readByteArray()>
--><okio.Buffer: long writeAll(okio.Source)>
--><com.squareup.okhttp.internal.framed.FramedStream$FramedDataSource: long read(okio.Buffer,long)>
--><com.squareup.okhttp.internal.framed.FramedConnection: void writeWindowUpdateLater(int,long)>
--><com.squareup.okhttp.internal.NamedRunnable: void run()>
--><com.squareup.okhttp.internal.framed.FramedConnection$2: void execute()>
--><com.squareup.okhttp.internal.framed.Http2$Writer: void windowUpdate(int,long)>
--><okio.RealBufferedSink: void flush()>
--><okio.DeflaterSink: void flush()>
--><okio.DeflaterSink: void deflate(boolean)>

Release tag for v2.2.21

Any chance a release tag could be added for the current build v2.2.21 so it can be built on F-Droid? The latest tagged release is v2.2.19. Thanks

Feature Request: Add station for Oakland International Airport

FWIW, I'm running version 2.2.8 on Android version 6.0.1.

Now that there's a connector running between the Coliseum Station and OAK, it would be great to have OAK added to the list of stations. Not sure if you've already looked into this, but is this just a matter of adding the new station in, or does BART's API not support this station?

Thanks for the app BTW! I'm a huge fan of it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.