Giter Club home page Giter Club logo

changedetection's Introduction

ChangeDetection

Change Detection

This app tracks changes on websites you otherwise would visit frequently to see if there is something new. Use cases:

  • Teacher says grades will be published "soon", but no one knows what "soon" means and you are tired of reloading.
  • You are working with a server and wants to know the result from a request, periodically.
  • You are waiting for updates on an Exam, like if something was postponed or updated.
  • You want to monitor the Dagger documentation to see when Thermosiphon's explanation improves.

This app also showcases all the Android Architecture Components working together: Room, ViewModels, LiveData, Paging, WorkManager and Navigation.

Get it on Google Play Get it on F-Droid

GIF

Screenshots

Main Screen Text Diff PDF Diff Settings
First Sec Third Fourth

Introduction

Features

This app contains the following screens:

  • A list of websites that are currently being tracked.
  • A text details view, that allows the user to compare the current website version with previous versions.
  • An image details view, that allows the user to compare images in a carousel.
  • A pdf details view, that allows the user to compare pdfs in a carousel, similar to the images.
  • A settings view, that allows user to toggle auto-sync on/off and configure what is required for a sync to occur.
  • An about screen, with contact information.

Presentation layer

This app is a Single-Activity app, with the following components:

  • A main activity that handles navigation.
  • A fragment to display the list of websites currently tracked.
  • A fragment to display the history of changes from the selected website, when changes are not an image or a pdf.
  • A fragment to display the history of changes from images in a carousel format.
  • A fragment to display the history of changes from pdfs in a carousel format.

The app uses a Model-View-ViewModel (MVVM) architecture for the presentation layer. Each of the fragments corresponds to a MVVM View. The View and ViewModel communicate using LiveData and general good principles.

Data layer

The database is created using Room and it has two entities: a Site and a Snap that generate corresponding SQLite tables at runtime. There is a one to many relationshiop between them. The id from Site is a foreign key on Snap. Snap only contains the snapshot metadata, all the data retrieved from the http request (body response) is stored in Android's own File storage.

To let other components know when the data has finished populating, the ViewModel exposes a LiveData object via callbacks using interfaces (inspired from this todo app). This could be, eventually, easily extended to work with server and sync. The app also makes use of Kotlin's Coroutines to deal with some callbacks.

Simple comparison process

The app works like this:

  1. Make http request and store the body response in a byteArray.
  2. Retrieve most recent stored file for that site, if any.
  3. Convert to string, clean up Jsoup and compare them. If same, don't do anything else. If different, add the new byteArray to storage and create a new entry on Snap table. When this happens in background, a notification is created to warn the user.
Inside the App Outside the App
inside outside

Diff Process for text files

After a change is detected and user taps to see it, a byte to byte comparision wouldn't be readable, so it makes sense to make a text comparison.

That's why this app makes extensive use from java-diff-utils. In fact, part of the library was converted to Kotlin and is now working perfectly on Java 6 (the original library makes use of Streams, which is only supported on Java 8). All the diff process is made using Myer's diff algorithm, and the result, for performance reasons, is put on a RecyclerView.

When this diff process happens, the app will use jsoup with a relaxed whitelist to remove all the useless tags from html to avoid pages that generate them at every request. Example: pages that make use of Google Analytics and pages that were made in WordPress. The app will also use jsoup to unescape "<" and ">" from html.

Diff Process for image and pdf files

It makes no sense to compare images and visual files using strings, so there is a carousel to compare them. PDF's are rendered to an imageView, while images are rendered with support for tiling, which is great for ultra-heavy pictures - in case user is tracking changes for a 20mb photo.

How each Architecture Component is used

  • Navigation: this is a single activity app. All fragment transactions (except one) are made using Navigation library.

  • WorkManager: responsible for automatically syncing when the app is in background. There are four constraints: battery not low, device on idle state (API 23+), device charging and wifi on. Wifi is currently not a constraint from WorkManager, so I implemented it myself to work together.

  • Paging: on details fragment. As time goes, it is possible for a website to receive hundreds of updates. To avoid OOM error once and for all, Paging was implemented. When visualizing PDF/Image changes (the carousel view), paging is implemented on the carousel, so that it doesn't loads all Files into memory at once.

  • LiveData/ViewModel: written above.

  • Room: written above.

Third Party Libraries Used

  • Android-Iconics deal with icons without suffering.
  • Architecture Components all of them, as stated above.
  • Groupie for making RecyclerViews as simple as possible.
  • java-diff-utils generate the difference between two strings.
  • Logger logs that are useful and disabled on release.
  • material-about-library create an about page without suffering.
  • Material Dialogs show dialogs in a simple and easy way.
  • Notify create notifications without effort.
  • ok-http fetch the webpages.
  • Stetho debug the database easily.
  • ThreeTenABP for dealing with time in a Java 8 way.
  • timeago makes it easy display relative dates (i.e. 1 day ago).
  • RxJava responsible for coordinating the reload button animation and updating the text on main screen cards periodically.
  • jsoup cleaning up html files.
  • Dagger 2 dependency injection for sharedPreferences with application Context, provides singleton database instances.
  • Alerter show beautiful notifications when some site was updated while the user is browsing the main fragment.

Reporting Issues

Issues and Pull Requests are welcome. You can report here.

License

Copyright 2018 Bernardo Ferrari.

Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

changedetection's People

Contributors

9034725985 avatar bernaferrari avatar familqasimov avatar poussinou avatar sguinetti avatar supercilex 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  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  avatar  avatar  avatar  avatar

Watchers

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

changedetection's Issues

Is the app still maintained?

Hi, I have seen various comments from a year ago talking about testing v2.3, but having just downloaded and built it it seems to crash as soon as you try to open the sync settings

Dismiss Alert on diff view

This is more a refinement than an issue, you should call Alerted.dismiss() when opening a page, to avoid having the view intrused

Custom alerting alarm

An annoying alarm instead of a notification would be nice. I cannot change the notification sound on Android for this app? I also want this app to re-notify me constantly (every minute or so) until I open the app.

I want this app to basically scream for attention when a website has changed, no matter what.

Bug in 2.2

When items are less than 5 them on remove it crash

Find some crashes!

APK Version : 2.3
AndroidOS Version = 6.0-9.0
Description information๏ผš
These crashes happened by accident when I was testing in different devices. I tried to reproduce them and found that they can't be reproduced, but they are real. I hope they can help you to debug.

Crash 1:
Long Msg: java.lang.IllegalStateException: kindPicker must not be null
at com.bernaferrari.changedetection.settings.DialogBackgroundSync.setUpViews(DialogBackgroundSync.kt:45)
at com.bernaferrari.changedetection.settings.DialogBackgroundSync.onCreateDialog(DialogBackgroundSync.kt:36)
at androidx.fragment.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:403)
at androidx.fragment.app.Fragment.performGetLayoutInflater(Fragment.java:1484)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:891)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:7539)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

Crash 2:
Long Msg: com.airbnb.epoxy.ImmutableModelException: The model was changed between being bound and when models were rebuilt Position: 6 Model: ColorPickerItemEpoxy_{switchIsOn=true, gradientColor=(-282565, -2878374), allowDeselection=false}ColorPickerItemEpoxy_{id=-4391967760750466383, viewType=2131558439, shown=true, addedToAdapter=false}

Epoxy attribute fields on a model cannot be changed once the model is added to a controller. Check that these fields are not updated, or that the assigned objects are not mutated, outside of the buildModels method. The only exception is if the change is made inside an Interceptor callback. Consider using an interceptor if you need to change a model after it is added to the controller and before it is set on the adapter. If the model is already set on the adapter then you must call requestModelBuild instead to recreate all models.
at com.airbnb.epoxy.EpoxyModel.validateStateHasNotChangedSinceAdded(EpoxyModel.java:466)
at com.airbnb.epoxy.EpoxyControllerAdapter.setModels(EpoxyControllerAdapter.java:67)
at com.airbnb.epoxy.EpoxyController$1.run(EpoxyController.java:294)
at android.os.Handler.handleCallback(Handler.java:891)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:7539)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

Aplication Force Close After Click Background Sync

2019-11-30 08:10:29.916 25008-25008/com.bernaferrari.changedetection D/Dialog: mIsSamsungBasicInteraction = false, isMetaDataInActivity = false
2019-11-30 08:10:30.027 25008-25027/com.bernaferrari.changedetection I/changedetectio: Background concurrent copying GC freed 60355(2MB) AllocSpace objects, 10(388KB) LOS objects, 49% free, 4MB/9MB, paused 5.492ms total 129.482ms
2019-11-30 08:10:30.113 25008-25008/com.bernaferrari.changedetection I/DecorView: mWindow.mActivityCurrentConfig is null.
2019-11-30 08:10:30.115 25008-25008/com.bernaferrari.changedetection I/DecorView: createDecorCaptionView >> DecorView@e0a5891[], isFloating: true, isApplication: true, hasWindowDecorCaption: false, hasWindowControllerCallback: false
2019-11-30 08:10:30.334 25008-25008/com.bernaferrari.changedetection D/AndroidRuntime: Shutting down VM

--------- beginning of crash

2019-11-30 08:10:30.338 25008-25008/com.bernaferrari.changedetection E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.bernaferrari.changedetection, PID: 25008
java.lang.IllegalStateException: kindPicker must not be null
at com.bernaferrari.changedetection.settings.DialogBackgroundSync.setUpViews(DialogBackgroundSync.kt:45)
at com.bernaferrari.changedetection.settings.DialogBackgroundSync.onCreateDialog(DialogBackgroundSync.kt:36)
at androidx.fragment.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:380)
at androidx.fragment.app.Fragment.performGetLayoutInflater(Fragment.java:1403)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2076)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1866)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1821)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7081)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

5min sync

Bro, Make a beta update channel with 5min sync ...
I already mailed you regarding this....

Dark theme

I think would be nice to have a nice dark theme, just switch from white background to dark and some dark fonts to light. The colors for the main cards could stay the same. I am focused on other tasks, and have no idea what people are using nowadays, if attr or AppCompat.DayNight, but this should be simple.

Making it animated, like Telegram X, Videoder and other apps is a plus.

F-Droid

Hi,

Since this app is Apache v2 licensed, are you considering the fact to add it to F-Droid? There is a strong community behind.

You can find some documentation here.

Otherwise, if you don't want to work on the inclusion of this app by yourself, would it be ok for you if someone else do it for you (we are busy at F-Droid, it can take a lot of time...)?

New feature : Checking if website is down

Nice app !
Is it possible to add this behaviour ? I manage several websites and want to check regularly the state of my websites.
I am developer also , I may give some help if needed....

Logo offer for Change Detector

Hi friend. Please me. I was a little late to answer you.
ฤฐ make a logo. If you still want a logo, I can give it to you with great pleasure

Best regard
Famil

Feature request: notify if there are no changes for a long time

Some people practice a method of information publishing called warrant canary: if some info is present and/or periodically updated, then everything is fine, but if it's not updating or even disappeared, it means that something bad happened.

Use case for websites:

  • website admin publishes a text file containing something like "2020-06-03 I'm alive, yay";

  • the admin updates this file everyday ("2020-06-04 I'm still alive");

  • if there are no updates for a few days (or the website has been simply disabled for non-payment), it means that something bad happened to the admin;

  • in this case, it would be good to be notified that something bad happened.

The Change Detection app has already implemented almost everything for this use case (it already checks files periodically); it remains only to add an option of the maximum permissible period of no change. Therefore, I leave this feature request here.

Callbacks and coroutines?

Is there a reason why you have callbacks in your repositories and data source classes and use coroutines in your ViewModel?

I suggest making all public fun of repositories suspended. See this example.

Broken "Open in browser"

The webview that should be hosting the new and old page changes doesn't render properly for websites like Google, and it is shown as a little popup, couldn't it be made bigger, or in something like a chrome custom tab, and working with every website?

App crashing on selection of invalid url

Hi,

I just stumbled across this app through Reddit and found a bug you may want to be aware of:

The app crashes with the following dump if you select a list item with an invalid URL.

06-20 15:13:35.459 16265-16265/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.bernaferrari.changedetection, PID: 16265
    kotlin.KotlinNullPointerException
        at com.bernaferrari.changedetection.MainFragment$updateBottomSheet$1$1.doResume(MainFragment.kt:174)
        at kotlin.coroutines.experimental.jvm.internal.CoroutineImpl.resume(CoroutineImpl.kt:42)
        at kotlinx.coroutines.experimental.DispatchedTask$DefaultImpls.run(Dispatched.kt:162)
        at kotlinx.coroutines.experimental.DispatchedContinuation.run(Dispatched.kt:26)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6642)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Compiler error

Hi, I'm pretty new to Kotlin usage with Android. Found your app in a Reddit thread and decided to give it a try. I, unfortunately, can't seem to build it as I get a Kotlin compiler error every time I do.

e: [kapt] An exception occurred: java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open_utf8([BI)V

I have tried looking up resources online but can't seem to figure out what exactly is causing the compiler to issue this error. Any help will be appreciated, Thanks

Feature Request: Automatically jump to the location of the change

Description of the restriction

I am monitoring a few pages with change detection which are relatively long. (e.g. [https://kuketz-blog.de/empfehlungsecke]) If there is a change now, I have to scroll through the whole website.

Desired function

I would like to be able to jump from change to change in the diff view.

Allow "Open in Browser" from Notification

It would be nice if change-notifications would have an action that opens the changed site in a browser.

Currently one has to open the app, wait for it to redraw, find the changed item, open that item and only then open it in the browser. It would be nice to have a shortcut.

Thanks!

set a threshold for diff

Hi, I discovered this app a few days ago and it looks really great. Thank you for creating it!

I found myself puzzling with a page that will be updated 10 times a year, but using the app I found out that the current date is shown in the page and will update daily.

http://statistica.comune.genova.it/pubblicazioni/periodiche.php

The actual content does not change, only a single line in the HTML source corresponding to the date.

So I thought maybe there could be a threshold setting to ignore changes below a certain diff size. What do you think?

Tests needed

Tests were completely skipped during development.
Of course this should never happen, but happened. From simple stuff to WorkManager (which didn't even have official tests when this repository was released, but now has!), all help is appreciated.

Suggestions: Sync time reduction, Themes & custom settings for each webpage

I really like the the design and layout of the app. Here are a few suggestions I think will make the app even better!

  1. Add an option to reduce the interval between syncs from 15 minutes to 5 minutes. (5 - 10 - 15 - 30 - 60 and so on)

  2. Add a black/OLED friendly theme (i.e. pure black background) with an option to set solid colors for headers of the link

  3. Customizable background sync settings for each app. Letting the user choose which webpages teed to be synced less often or in what circumstances..

Thank you for your awesome app (:+1: )

Grid Layout on Main Screen

A Grid Layout would be awesome for landscape devices and tablets. The code for calculating the grid size is ready. What is not, however, is the way the app is calculating the padding dynamically, using ItemDecorators and adding padding to the first and last element. On a Grid Layout, it should add padding to the top and bottom row.

Make ProGuard work

I have no idea what is going on..
Execution failed for task ':app:transformClassesAndResourcesWithProguardForDebug

Full log:
w: Classpath entry points to a non-existent location: /Users/bernardoferrari/Documents/ChangeDetection/app/build/generated/source/aidl/debug
w: Classpath entry points to a non-existent location: /Users/bernardoferrari/Documents/ChangeDetection/app/src/debug/kotlin
w: Classpath entry points to a non-existent location: /Users/bernardoferrari/Documents/ChangeDetection/app/src/debug/java
w: Classpath entry points to a non-existent location: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/kotlin
w: Note: [1] Wrote GeneratedAppGlideModule with: []
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/SettingsFragment.kt: (38, 47): Unnecessary non-null assertion (!!) on a non-null receiver of type Application
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/ViewModelFactory.kt: (49, 15): Unchecked cast: MainViewModel to T
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/ViewModelFactory.kt: (53, 15): Unchecked cast: TextViewModel to T
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/ViewModelFactory.kt: (57, 15): Unchecked cast: PdfViewModel to T
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/ViewModelFactory.kt: (61, 15): Unchecked cast: ImageViewModel to T
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/detailsText/TextViewModel.kt: (228, 13): Condition 'original == null' is always 'false'
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/detailsText/TextViewModel.kt: (228, 33): Condition 'new == null' is always 'false'
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/ui/ElasticDragDismissFrameLayout.kt: (258, 13): Parameter 'elasticOffset' is never used
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/ui/ElasticDragDismissFrameLayout.kt: (258, 35): Parameter 'elasticOffsetPixels' is never used
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/ui/ElasticDragDismissFrameLayout.kt: (259, 13): Parameter 'rawOffset' is never used
w: /Users/bernardoferrari/Documents/ChangeDetection/app/src/main/java/com/bernaferrari/changedetection/ui/ElasticDragDismissFrameLayout.kt: (259, 31): Parameter 'rawOffsetPixels' is never used

Task :app:compileDebugJavaWithJavac
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
ProGuard, version 6.0.3
Reading input...
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/groupie-kotlin-android-extensions-2.1.0.aar/bd97255296a14b8d8f63ec2d05ab8393/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-android-extensions-runtime/1.2.50/79bd4544208d0758b9ed20cb1e40d42a5d4ded0d/kotlin-android-extensions-runtime-1.2.50.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/rxandroid-2.0.2.aar/e04b38026d20be130982bfc794f80847/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxjava/2.1.12/975d34a9f14da5b0aecffa603501e9716aae5aa4/rxjava-2.1.12.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-android/0.23.3/248df8cc22220f90c62fc22054a86d7a00edc03c/kotlinx-coroutines-android-0.23.3.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/0.23.3/c81f5ce66a33dab0a524aaae5313b0a7cb926b0e/kotlinx-coroutines-core-0.23.3.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/navigation-ui-1.0.0-alpha02.aar/00eb29fd1f200c6961a9ebb9f8ae5250/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/navigation-fragment-1.0.0-alpha02.aar/3400fbd42973a0bcdb4430764aae0b39/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/work-runtime-1.0.0-alpha02.aar/37ca17e3a99e76201b3c9308a955612d/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/extensions-1.1.1.aar/f851733f33b7d284fdd36f9b5c08c37b/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/runtime-1.1.0.aar/4439392fc21e9582f92664e3057a23a5/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/runtime-1.0.0.aar/c2279c385a940605c8b7ce6afb2b94cb/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/material-about-library-2.3.0.aar/1b58a4bfe6356693db528de5e8cf445c/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/design-27.1.1.aar/25b9828d41de51eceb26352cf0d9880e/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/support-v4-27.1.1.aar/87c9b7ea508143f61cb357cbbe7e02ac/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/cardview-v7-27.1.1.aar/6d17630fab32bcc36c5b0c652de07555/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/commons-0.9.6.0.aar/442e5a65e8e1279e8993e99990f25043/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/discrete-scrollview-1.4.7.aar/b51c736ed91faf66440e2098f524371c/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/core-0.9.6.0.aar/1774ff4e612ca78ad1ecce074536bac5/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/library-1.4.2.aar/c047f059284ec458ed74a583de888c37/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.1.aar/3862eae5b091cfc01efde1080ceb75a4/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/groupie-2.1.0.aar/22aa7e8e0c54b6392129ae321f8bdca1/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/recyclerview-v7-27.1.1.aar/8734d89814a6164f016074fc1386ccb4/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/recyclerview-integration-4.7.1.aar/f66edbb79f039e3a8b31225621232463/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/glide-4.7.1.aar/306f63c34c21ca00b012fda981e5194e/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/support-fragment-27.1.1.aar/74e349eead54b736778acfa9a7f9caba/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/animated-vector-drawable-27.1.1.aar/7b46432c4731b7c759bcad06ef37e472/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/support-core-ui-27.1.1.aar/078590394946db1352b7c14d8429e2d9/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/notify-1.0.0.aar/bde86f1c259d9cc010bf56d5f7400182/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/core-ktx-0.3.aar/b62d906af2f4e2db5a32cc61098151dd/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/transition-27.1.1.aar/77efa0229844ad7aaf68c5d87e0fabc4/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/navigation-runtime-1.0.0-alpha02.aar/e42a8569501a5037ec6634abf167f92d/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/support-core-utils-27.1.1.aar/c29b56553aff0c449445c9d4a11491fc/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/support-media-compat-27.1.1.aar/5841181b8df923adfb4d3e9b02970e67/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/support-vector-drawable-27.1.1.aar/9f362d89e948de9cba0e55b34518d0f3/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/navigation-common-1.0.0-alpha02.aar/b6fb3bacd9ba859604e6c05e0e94245b/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/support-compat-27.1.1.aar/f7a7bfbf658670d9bf31fa9401cdae1b/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/logger-2.2.0.aar/302352dd8a5e95f9aaba0b49a24d1e8a/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/subsampling-scale-image-view-3.10.0.aar/5f3d18f0843ac61bc9885500fd4f2b10/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/runtime-1.1.1.aar/23f7a36a95e95ac000585ac40a8ba4e4/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/livedata-1.1.1.aar/dac8b81ed28b8fdd12e37f91180c24d3/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/livedata-core-1.1.1.aar/8c14153bfee32ad01bbff3454222b61d/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/runtime-1.1.1.aar/a19811b56114473c4ad8d0373a66e9f5/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/android.arch.paging/common/1.0.0/9634a5f543f7cc5d97b62780fd1d5e9985fdb4b6/common-1.0.0.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/android.arch.core/common/1.1.1/e55b70d1f5620db124b3e85a7f4bdc7bd48d9f95/common-1.1.1.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/android.arch.lifecycle/common/1.1.1/207a6efae6a3555e326de41f76bdadd9a239cbce/common-1.1.1.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/viewmodel-1.1.1.aar/05febeb9a527666610dc39feb9c783ef/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/android.arch.persistence.room/common/1.1.0/6e749dde07b1f6fe13444c94befde3c28e700d5b/common-1.1.0.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/db-framework-1.1.0.aar/efa04112fe10268b0568c6e9fb3f8f62/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/db-1.1.0.aar/4e655c11675e647edf61c393a0e0ad2b/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/exifinterface-27.1.0.aar/b9f9113ca03f35a5f043924d385e01ea/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/gifdecoder-4.7.1.aar/10b4a3b64d220a21ae380cc9c024d450/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/27.1.1/39ded76b5e1ce1c5b2688e1d25cdc20ecee32007/support-annotations-27.1.1.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/Toasty-1.3.0.aar/19a6363876129d41535fe182fbf2fbc7/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/iconics-core-3.0.3.aar/06a17294bf77096b7b7ff0376f83afd8/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/community-material-typeface-2.0.46.1.aar/5333264917c1b838edfa6964da5ff3b2/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/google-material-typeface-3.0.1.2.original.aar/85bae8e321ae3de1bf9e2c187874ff8e/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/multidex-1.0.3.aar/84e63f6c78bba83db4344ba727ce1d11/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/constraint-layout-1.1.2.aar/8285770faabf78f59267011a2fce2a0d/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jsoup/jsoup/1.11.3/36da09a8f68484523fa2aaa100399d612b247d67/jsoup-1.11.3.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/stetho-1.5.0.aar/98a0d747c864f593d31afafa9fff192b/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.10.0/7ef0f1d95bf4c0b3ba30bbae25e0e562b05cf75e/okhttp-3.10.0.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.2.21/3159ff5936aa570a90050d385cb717fbb6c1723a/kotlin-reflect-1.2.21.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.2.41/d0cfb3ef897c00449e5e696355db9506225fb507/kotlin-stdlib-jdk7-1.2.41.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.2.50/66d47b004c5b8a1d2d1df9e463187390ed741316/kotlin-stdlib-1.2.50.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/transforms-1/files-1.1/threetenabp-1.1.0.aar/5ec0f1ed2422f51bc96f50e8cc3296fb/jars/classes.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/com.github.marlonlom/timeago/3.0.2/717bc96b0daeca67effb2081757574f48da66758/timeago-3.0.2.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.reactivestreams/reactive-streams/1.0.2/323964c36556eb0e6209f65c1cef72b53b461ab8/reactive-streams-1.0.2.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core-common/0.23.3/94ff949da32fa6a0f30aa2c92ba6bd6ca4e21896/kotlinx-coroutines-core-common-0.23.3.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/disklrucache/4.7.1/21e6054c134c7f5c435ab7635984f39c5375083e/disklrucache-4.7.1.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/annotations/4.7.1/796c0bf0a61141278c4bc32de2b92e6eb7fa8b1a/annotations-4.7.1.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/com.android.support.constraint/constraint-layout-solver/1.1.2/bfc967828daffc35ba01c9ee204d98b664930a0f/constraint-layout-solver-1.1.2.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.1/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.1.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.14.0/102d7be47241d781ef95f1581d414b0943053130/okio-1.14.0.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/atomicfu-common/0.10.3/95970a5b355bb19908bf8ee7380af7e40211de1a/atomicfu-common-0.10.3.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.2.50/6b19a2fcc29d34878b3aab33fd5fcf70458a73df/kotlin-stdlib-common-1.2.50.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar] (filtered)
Reading program jar [/Users/bernardoferrari/.gradle/caches/modules-2/files-2.1/org.threeten/threetenbp/1.3.6/f1e223783a2046337be2d9333c304522854fde9b/threetenbp-1.3.6-no-tzdb.jar] (filtered)
Reading program directory [/Users/bernardoferrari/Documents/ChangeDetection/app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes] (filtered)
Reading program directory [/Users/bernardoferrari/Documents/ChangeDetection/app/build/tmp/kotlin-classes/debug] (filtered)
Reading program directory [/Users/bernardoferrari/Documents/ChangeDetection/app/build/tmp/kapt3/classes/debug] (filtered)
Reading program jar [/Users/bernardoferrari/Documents/ChangeDetection/app/build/intermediates/transforms/mergeJavaRes/debug/0.jar] (filtered)
Reading library jar [/Users/bernardoferrari/Library/Android/sdk/platforms/android-27/android.jar]
Reading library jar [/Users/bernardoferrari/Library/Android/sdk/build-tools/27.0.3/core-lambda-stubs.jar]
Reading library jar [/Users/bernardoferrari/Library/Android/sdk/platforms/android-27/optional/org.apache.http.legacy.jar]
Initializing...
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.OpenSSLProvider
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.OpenSSLProvider
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.Conscrypt
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.Conscrypt
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.Conscrypt
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.Conscrypt
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.Conscrypt
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.Conscrypt
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.Conscrypt
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.Conscrypt
Warning: okhttp3.internal.platform.ConscryptPlatform: can't find referenced class org.conscrypt.Conscrypt
Warning: okio.DeflaterSink: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Warning: okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Warning: okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
Note: com.facebook.stetho.inspector.runtime.RhinoDetectingRuntimeReplFactory: can't find dynamically referenced class com.facebook.stetho.rhino.JsRuntimeReplFactoryBuilder
Note: com.mikepenz.iconics.Iconics calls '(com.mikepenz.iconics.typeface.ITypeface)Class.forName(variable).newInstance()'
Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.jdk8.JDK8PlatformImplementations
Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE8PlatformImplementations
Note: kotlin.internal.PlatformImplementationsKt: can't find dynamically referenced class kotlin.internal.JRE7PlatformImplementations
Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class com.android.org.conscrypt.SSLParametersImpl
Note: okhttp3.internal.platform.AndroidPlatform: can't find dynamically referenced class org.apache.harmony.xnet.provider.jsse.SSLParametersImpl
Note: okhttp3.internal.platform.AndroidPlatform$CloseGuard: can't find dynamically referenced class dalvik.system.CloseGuard
Note: okhttp3.internal.platform.ConscryptPlatform: can't find dynamically referenced class org.conscrypt.ConscryptEngineSocket
Note: okhttp3.internal.platform.Platform: can't find dynamically referenced class sun.security.ssl.SSLContextImpl

Task :app:transformClassesAndResourcesWithProguardForDebug
Request to incrementing alive workforce from 0. Current workforce (dead or alive) 4
thread-pool size=8

Note: the configuration keeps the entry point 'com.afollestad.materialdialogs.internal.MDButton { void setStackedGravity(com.afollestad.materialdialogs.GravityEnum); }', but not the descriptor class 'com.afollestad.materialdialogs.GravityEnum'
Note: the configuration keeps the entry point 'com.afollestad.materialdialogs.internal.MDRootLayout { void setStackingBehavior(com.afollestad.materialdialogs.StackingBehavior); }', but not the descriptor class 'com.afollestad.materialdialogs.StackingBehavior'
Note: the configuration keeps the entry point 'com.afollestad.materialdialogs.internal.MDRootLayout { void setButtonGravity(com.afollestad.materialdialogs.GravityEnum); }', but not the descriptor class 'com.afollestad.materialdialogs.GravityEnum'
Note: the configuration keeps the entry point 'com.afollestad.materialdialogs.internal.MDRootLayout { void setButtonStackedGravity(com.afollestad.materialdialogs.GravityEnum); }', but not the descriptor class 'com.afollestad.materialdialogs.GravityEnum'
Note: the configuration keeps the entry point 'com.bernaferrari.changedetection.ui.ColorPickerItem { void setColors(kotlin.Pair); }', but not the descriptor class 'kotlin.Pair'
Note: the configuration keeps the entry point 'com.bernaferrari.changedetection.ui.ColorPickerItem { ColorPickerItem(android.content.Context,android.util.AttributeSet,int,int,int,kotlin.jvm.internal.DefaultConstructorMarker); }', but not the descriptor class 'kotlin.jvm.internal.DefaultConstructorMarker'
Note: the configuration keeps the entry point 'com.bernaferrari.changedetection.ui.ControlBarItemToggleView { ControlBarItemToggleView(android.content.Context,android.util.AttributeSet,int,int,kotlin.jvm.internal.DefaultConstructorMarker); }', but not the descriptor class 'kotlin.jvm.internal.DefaultConstructorMarker'
Note: the configuration keeps the entry point 'com.bernaferrari.changedetection.ui.CustomWebView { CustomWebView(android.content.Context,android.util.AttributeSet,int,int,kotlin.jvm.internal.DefaultConstructorMarker); }', but not the descriptor class 'kotlin.jvm.internal.DefaultConstructorMarker'
Note: the configuration keeps the entry point 'com.bernaferrari.changedetection.ui.ElasticDragDismissFrameLayout { ElasticDragDismissFrameLayout(android.content.Context,android.util.AttributeSet,int,int,int,kotlin.jvm.internal.DefaultConstructorMarker); }', but not the descriptor class 'kotlin.jvm.internal.DefaultConstructorMarker'
Note: the configuration keeps the entry point 'com.bernaferrari.changedetection.ui.RecyclerViewWithEmptyState { RecyclerViewWithEmptyState(android.content.Context,android.util.AttributeSet,int,int,kotlin.jvm.internal.DefaultConstructorMarker); }', but not the descriptor class 'kotlin.jvm.internal.DefaultConstructorMarker'
Note: the configuration keeps the entry point 'com.facebook.stetho.dumpapp.Dumper { Dumper(java.lang.Iterable,org.apache.commons.cli.CommandLineParser); }', but not the descriptor class 'org.apache.commons.cli.CommandLineParser'
Note: the configuration keeps the entry point 'com.facebook.stetho.dumpapp.Dumper { void dumpPluginOutput(java.io.InputStream,java.io.PrintStream,java.io.PrintStream,org.apache.commons.cli.CommandLine); }', but not the descriptor class 'org.apache.commons.cli.CommandLine'
Note: the configuration keeps the entry point 'com.facebook.stetho.dumpapp.DumperContext { DumperContext(java.io.InputStream,java.io.PrintStream,java.io.PrintStream,org.apache.commons.cli.CommandLineParser,java.util.List); }', but not the descriptor class 'org.apache.commons.cli.CommandLineParser'
Note: the configuration keeps the entry point 'com.yarolegovich.discretescrollview.DiscreteScrollView { void setItemTransformer(com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer); }', but not the descriptor class 'com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer'
Note: the configuration keeps the entry point 'com.yarolegovich.discretescrollview.DiscreteScrollView { void setOrientation(com.yarolegovich.discretescrollview.DSVOrientation); }', but not the descriptor class 'com.yarolegovich.discretescrollview.DSVOrientation'
Note: the configuration keeps the entry point 'kotlin.coroutines.experimental.AbstractCoroutineContextElement { AbstractCoroutineContextElement(kotlin.coroutines.experimental.CoroutineContext$Key); }', but not the descriptor class 'kotlin.coroutines.experimental.CoroutineContext$Key'
Note: the configuration keeps the entry point 'kotlin.coroutines.experimental.AbstractCoroutineContextElement { kotlin.coroutines.experimental.CoroutineContext$Element get(kotlin.coroutines.experimental.CoroutineContext$Key); }', but not the descriptor class 'kotlin.coroutines.experimental.CoroutineContext$Key'
Note: the configuration keeps the entry point 'kotlin.coroutines.experimental.AbstractCoroutineContextElement { java.lang.Object fold(java.lang.Object,kotlin.jvm.functions.Function2); }', but not the descriptor class 'kotlin.jvm.functions.Function2'
Note: the configuration keeps the entry point 'kotlin.coroutines.experimental.AbstractCoroutineContextElement { kotlin.coroutines.experimental.CoroutineContext minusKey(kotlin.coroutines.experimental.CoroutineContext$Key); }', but not the descriptor class 'kotlin.coroutines.experimental.CoroutineContext$Key'
Note: the configuration keeps the entry point 'kotlin.coroutines.experimental.AbstractCoroutineContextElement { kotlin.coroutines.experimental.CoroutineContext plus(kotlin.coroutines.experimental.CoroutineContext); }', but not the descriptor class 'kotlin.coroutines.experimental.CoroutineContext'
Note: the configuration keeps the entry point 'kotlinx.coroutines.experimental.android.AndroidExceptionPreHandler { void handleException(kotlin.coroutines.experimental.CoroutineContext,java.lang.Throwable); }', but not the descriptor class 'kotlin.coroutines.experimental.CoroutineContext'
Note: there were 21 unkept descriptor classes in kept class members.
You should consider explicitly keeping the mentioned classes
(using '-keep').
(http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
Note: there were 9 unresolved dynamic references to classes or interfaces.
You should check if you need to specify additional program jars.
(http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
Note: there were 1 class casts of dynamically created class instances.
You might consider explicitly keeping the mentioned classes and/or
their implementations (using '-keep').
(http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclasscast)
Warning: there were 14 unresolved references to classes or interfaces.
You may need to add missing library jars or update their versions.
If your code works fine without the missing classes, you can suppress
the warnings with '-dontwarn' options.
(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
Warning: Exception while processing task java.io.IOException: Please correct the above warnings first.
Thread(Tasks limiter_5): destruction

Task :app:transformClassesAndResourcesWithProguardForDebug FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:transformClassesAndResourcesWithProguardForDebug'.

Job failed, see logs for details

  • Try:
    Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesAndResourcesWithProguardForDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:103)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73)
    at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
    at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:256)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:249)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:238)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:663)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:596)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    Caused by: java.lang.RuntimeException: Job failed, see logs for details
    at com.android.build.gradle.internal.transforms.ProGuardTransform.transform(ProGuardTransform.java:194)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:124)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:113)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:95)
    ... 29 more
    Caused by: java.io.IOException: Please correct the above warnings first.
    at proguard.Initializer.execute(Initializer.java:485)
    at proguard.ProGuard.initialize(ProGuard.java:271)
    at proguard.ProGuard.execute(ProGuard.java:113)
    at com.android.build.gradle.internal.transforms.BaseProguardAction.runProguard(BaseProguardAction.java:64)
    at com.android.build.gradle.internal.transforms.ProGuardTransform.doMinification(ProGuardTransform.java:249)
    at com.android.build.gradle.internal.transforms.ProGuardTransform.access$000(ProGuardTransform.java:63)
    at com.android.build.gradle.internal.transforms.ProGuardTransform$1.run(ProGuardTransform.java:171)
    at com.android.builder.tasks.Job.runTask(Job.java:47)
    at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41)
    at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:282)

  • Get more help at https://help.gradle.org

BUILD FAILED in 35s
25 actionable tasks: 8 executed, 17 up-to-date

( BUG ChangeDetection Current Version 2.2 ) The application crashes when I click on the refresh icon or click on the last sync

Project Information

Expected behavior

The update should be refresh when I click the refresh icon And when I click on the last sync, the application should not crash

Actual behavior

The application crashes when I click on the refresh icon or click on the last sync

How to reproduce

  • Download the application

  • create the New Tracking ( type the title facebook and type the URL www.facebook.com)

  • After creating new tracking, click Refresh Icon

  • Note the Error

  • Browser/App version: 2.2

  • Operating system: 6.0

Recording Of The Bug

20190709_155553

Logcat

E/AndroidRuntime(11946): FATAL EXCEPTION: main

E/AndroidRuntime(11946): Process: com.bernaferrari.changedetection, PID: 11946

E/AndroidRuntime(11946): android.view.InflateException: Binary XML file line #36: Error inflating class androidx.appcompat.widget.AppCompatImageView

E/AndroidRuntime(11946): 	at android.view.LayoutInflater.createView(LayoutInflater.java:633)

E/AndroidRuntime(11946): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)

E/AndroidRuntime(11946): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)

E/AndroidRuntime(11946): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)

E/AndroidRuntime(11946): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)

E/AndroidRuntime(11946): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)

E/AndroidRuntime(11946): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:504)

E/AndroidRuntime(11946): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:414)

E/AndroidRuntime(11946): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:365)

E/AndroidRuntime(11946): 	at android.view.View.inflate(View.java:18945)

E/AndroidRuntime(11946): 	at b.j.a.a.()

E/AndroidRuntime(11946): 	at b.j.a.a.()

E/AndroidRuntime(11946): 	at b.j.a.f$a.b()

E/AndroidRuntime(11946): 	at com.bernaferrari.changedetection.Y.a()

E/AndroidRuntime(11946): 	at com.bernaferrari.changedetection.Y.a()

E/AndroidRuntime(11946): 	at androidx.lifecycle.LiveData.b()

E/AndroidRuntime(11946): 	at androidx.lifecycle.LiveData.a()

E/AndroidRuntime(11946): 	at androidx.lifecycle.LiveData.b()

E/AndroidRuntime(11946): 	at androidx.lifecycle.x.b()

E/AndroidRuntime(11946): 	at com.bernaferrari.changedetection.da.invokeSuspend()

E/AndroidRuntime(11946): 	at f.c.b.a.a.resumeWith()

E/AndroidRuntime(11946): 	at kotlinx.coroutines.DispatchedTask.run()

E/AndroidRuntime(11946): 	at android.os.Handler.handleCallback(Handler.java:739)

E/AndroidRuntime(11946): 	at android.os.Handler.dispatchMessage(Handler.java:95)

E/AndroidRuntime(11946): 	at android.os.Looper.loop(Looper.java:135)

E/AndroidRuntime(11946): 	at android.app.ActivityThread.main(ActivityThread.java:5910)

E/AndroidRuntime(11946): 	at java.lang.reflect.Method.invoke(Native Method)

E/AndroidRuntime(11946): 	at java.lang.reflect.Method.invoke(Method.java:372)

E/AndroidRuntime(11946): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)

E/AndroidRuntime(11946): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

E/AndroidRuntime(11946): Caused by: java.lang.reflect.InvocationTargetException

E/AndroidRuntime(11946): 	at java.lang.reflect.Constructor.newInstance(Native Method)

E/AndroidRuntime(11946): 	at java.lang.reflect.Constructor.newInstance(Constructor.java:288)

E/AndroidRuntime(11946): 	at android.view.LayoutInflater.createView(LayoutInflater.java:607)

E/AndroidRuntime(11946): 	... 29 more

E/AndroidRuntime(11946): Caused by: android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f070068

E/AndroidRuntime(11946): 	at android.content.res.Resources.getResourceName(Resources.java:2413)

E/AndroidRuntime(11946): 	at android.content.res.Resources.loadDrawableForCookie(Resources.java:2908)

E/AndroidRuntime(11946): 	at android.content.res.Resources.loadDrawable(Resources.java:2821)

E/AndroidRuntime(11946): 	at android.content.res.Resources.loadDrawable(Resources.java:2670)

E/AndroidRuntime(11946): 	at android.content.res.TypedArray.getDrawable(TypedArray.java:761)

E/AndroidRuntime(11946): 	at android.widget.ImageView.(ImageView.java:146)

E/AndroidRuntime(11946): 	at android.widget.ImageView.(ImageView.java:135)

E/AndroidRuntime(11946): 	at androidx.appcompat.widget.AppCompatImageView.()

E/AndroidRuntime(11946): 	at androidx.appcompat.widget.AppCompatImageView.()

E/AndroidRuntime(11946): 	... 32 more

( BUG ChangeDetection Current Version 2.2 ) The application crashes when I click on the Settings button

Project Information

Expected behavior

When I click on the Settings button, all options in the Settings button should be displayed and the application should not be crashed.

Actual behavior

The application crashes when I click on the Settings button

How to reproduce

  • Download the application

  • cancel the NEW Tracking box

  • click on the seething button

  • Note the Error

  • Browser/App version: 2.2

  • Operating system: 6.0

Recording Of The Bug

20190709_150453

Logcat

E/AndroidRuntime(11280): FATAL EXCEPTION: main

E/AndroidRuntime(11280): Process: com.bernaferrari.changedetection, PID: 11280

E/AndroidRuntime(11280): android.view.InflateException: Binary XML file line #35: Error inflating class androidx.appcompat.widget.SwitchCompat

E/AndroidRuntime(11280): 	at android.view.LayoutInflater.createView(LayoutInflater.java:633)

E/AndroidRuntime(11280): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)

E/AndroidRuntime(11280): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)

E/AndroidRuntime(11280): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:504)

E/AndroidRuntime(11280): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:414)

E/AndroidRuntime(11280): 	at b.k.a.e.b()

E/AndroidRuntime(11280): 	at b.k.a.e.b()

E/AndroidRuntime(11280): 	at androidx.recyclerview.widget.RecyclerView$a.a()

E/AndroidRuntime(11280): 	at androidx.recyclerview.widget.RecyclerView$p.a()

E/AndroidRuntime(11280): 	at androidx.recyclerview.widget.RecyclerView$p.b()

E/AndroidRuntime(11280): 	at androidx.recyclerview.widget.RecyclerView$p.d()

E/AndroidRuntime(11280): 	at androidx.recyclerview.widget.LinearLayoutManager$c.a()

E/AndroidRuntime(11280): 	at androidx.recyclerview.widget.LinearLayoutManager.a()

E/AndroidRuntime(11280): 	at androidx.recyclerview.widget.LinearLayoutManager.a()

E/AndroidRuntime(11280): 	at androidx.recyclerview.widget.LinearLayoutManager.e()

E/AndroidRuntime(11280): 	at androidx.recyclerview.widget.RecyclerView.B()

E/AndroidRuntime(11280): 	at androidx.recyclerview.widget.RecyclerView.onMeasure()

E/AndroidRuntime(11280): 	at android.view.View.measure(View.java:17951)

E/AndroidRuntime(11280): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)

E/AndroidRuntime(11280): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)

E/AndroidRuntime(11280): 	at android.view.View.measure(View.java:17951)

E/AndroidRuntime(11280): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)

E/AndroidRuntime(11280): 	at androidx.coordinatorlayout.widget.CoordinatorLayout.a()

E/AndroidRuntime(11280): 	at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure()

E/AndroidRuntime(11280): 	at android.view.View.measure(View.java:17951)

E/AndroidRuntime(11280): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)

E/AndroidRuntime(11280): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)

E/AndroidRuntime(11280): 	at android.view.View.measure(View.java:17951)

E/AndroidRuntime(11280): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)

E/AndroidRuntime(11280): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)

E/AndroidRuntime(11280): 	at androidx.appcompat.widget.ContentFrameLayout.onMeasure()

E/AndroidRuntime(11280): 	at android.view.View.measure(View.java:17951)

E/AndroidRuntime(11280): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)

E/AndroidRuntime(11280): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)

E/AndroidRuntime(11280): 	at android.view.View.measure(View.java:17951)

E/AndroidRuntime(11280): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)

E/AndroidRuntime(11280): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)

E/AndroidRuntime(11280): 	at android.view.View.measure(View.java:17951)

E/AndroidRuntime(11280): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)

E/AndroidRuntime(11280): 	at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)

E/AndroidRuntime(11280): 	at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)

E/AndroidRuntime(11280): 	at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)

E/AndroidRuntime(11280): 	at android.view.View.measure(View.java:17951)

E/AndroidRuntime(11280): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)

E/AndroidRuntime(11280): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)

E/AndroidRuntime(11280): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2910)

E/AndroidRuntime(11280): 	at android.view.View.measure(View.java:17951)

E/AndroidRuntime(11280): 	at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2048)

E/AndroidRuntime(11280): 	at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1185)

E/AndroidRuntime(11280): 	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1406)

E/AndroidRuntime(11280): 	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1073)

E/AndroidRuntime(11280): 	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5988)

E/AndroidRuntime(11280): 	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)

E/AndroidRuntime(11280): 	at android.view.Choreographer.doCallbacks(Choreographer.java:580)

E/AndroidRuntime(11280): 	at android.view.Choreographer.doFrame(Choreographer.java:550)

E/AndroidRuntime(11280): 	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)

E/AndroidRuntime(11280): 	at android.os.Handler.handleCallback(Handler.java:739)

E/AndroidRuntime(11280): 	at android.os.Handler.dispatchMessage(Handler.java:95)

E/AndroidRuntime(11280): 	at android.os.Looper.loop(Looper.java:135)

E/AndroidRuntime(11280): 	at android.app.ActivityThread.main(ActivityThread.java:5910)

E/AndroidRuntime(11280): 	at java.lang.reflect.Method.invoke(Native Method)

E/AndroidRuntime(11280): 	at java.lang.reflect.Method.invoke(Method.java:372)

E/AndroidRuntime(11280): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)

E/AndroidRuntime(11280): 	at com.android.interna

Need bottom menu idea

Hi,

Can you tell me how you have implemented bottom setting menu dialog. Have you added any third party library/ dependency ??

Click on setting icon on tool bar and it is showing Sync optioning a dialog.

is this possible to track website that requires authorization?

hello dear bernaferrari,

i found your tool via reddit and wanted to thank you for this simple solution! Some sebsites I rely on require authorization before showing any content. For example I have to enter my student number or log in with my student account before i can see exam result online. Is there a way do this with your app? Or maybe there is a workaround?

Thank you for your time!

[Feature request] Selective detection

Awesome app!

It would be cool if you can select a part of the website that you would like to watch.
For example, if i would like to buy a product like this:

image

It would be awesome to set a check on the specific 'In stock' text.. or 'out of stock'

So you get a notification when that part of the website changes..

Make "Share" work with WhatsApp

Share button is disabled on ImageDetails view because it isn't working when sharing to WhatsApp, which should be a popular use case. I have no idea how to make it work, since it works fine on other apps. Pdf Details view has it enabled, but also doesn't work on WhatsApp.

If someone knows how to fix, please tell me or submit a PR and I'll happily accept.

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.