Code Monkey home page Code Monkey logo

updatechecker's People

Contributors

bjorncs avatar cutmail avatar favasconcelos avatar francisboys avatar gsdstr avatar istvangal avatar jerson avatar joakimsa avatar lmbd avatar lpradel avatar megamegax avatar nhaarman avatar nikwen avatar pietrorampini avatar pylersm avatar rino0601 avatar slawekkrol avatar yazeed44 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

updatechecker's Issues

Option to specify a custom version comparator.

I would like to be able to specify when UpdateChecker should notify the user based on the actual version string fetched from Google Play Store. A typical use case is when I or some beta tester are running a newer version of the app than the one published. The current version of UpdateChecker will notify about "new version", even though the version on Play Store is older.

Here is one way it could be implemented:
Let UpdateChecker.showDialog be overloaded with an extra argument, an instance of VersionComparator. The instance may be stored in the argument bundle using Bundle.putSerializable as it is implementing the Serializable interface.

public interface VersionComparator extends Serializable {
    boolean isNewer(String googlePlayVersion, String installedVersion);
}

I could then make my own subclass of VersionComparator, crafted for my version names, and pass it to showDialog:

private class MyVersionComparator implements VersionComparator {

    @Override
    public boolean isNewer(String googlePlayVersion, String installedVersion) {
        // Assumes that version strings are on format 'x.xx', eg '2.12'
        String[] split = googlePlayVersion.split("\\.");
        int googleMajor = Integer.parseInt(split[0]);
        int googleMinor = Integer.parseInt(split[1]);
        split = installedVersion.split("\\.");
        int installedMajor = Integer.parseInt(split[0]);
        int installedMinor = Integer.parseInt(split[1]);
        return googleMajor > installedMajor || (googleMajor == installedMajor && googleMinor > installedMinor);
    }
}

UpdateChecker.checkForDialog(this, 15, new MyVersionComparator());

Errors in the Russian language

Проверьте новое обновление для %1$s!\nДоступное в настоящее время в Google Play.
Найдено новое обновление

Crashlytics reports that the UpdateChecker crashes

Hi,

thanks for writing this great update checker lib! It has been very useful in my apps.

There seems to be an issue that shows up every time there is a new release. For some reason I get these crash reports (from Crashlytics) in the logs (haven't been able to reproduce a crash on my own devices):

Error:
Dialog.java line 82
com.rampo.updatechecker.notice.Dialog.show

Logcat:
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@43347b38 is not valid; is your activity running? at android.view.ViewRootImpl.setView(ViewRootImpl.java:764) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:278) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.Dialog.show(Dialog.java:289) at com.rampo.updatechecker.notice.Dialog.show(Dialog.java:82) at com.rampo.updatechecker.UpdateChecker.showDialog(UpdateChecker.java:289) at com.rampo.updatechecker.UpdateChecker.foundUpdateAndShowIt(UpdateChecker.java:198) at com.rampo.updatechecker.UpdateChecker.versionDownloadableFound(UpdateChecker.java:141) at com.rampo.updatechecker.ASyncCheck.onPostExecute(ASyncCheck.java:137) at com.rampo.updatechecker.ASyncCheck.onPostExecute(ASyncCheck.java:44) at android.os.AsyncTask.finish(AsyncTask.java:632) at android.os.AsyncTask.access$600(AsyncTask.java:177) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5579) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) at dalvik.system.NativeStart.main(NativeStart.java)

Screenshot:
fabric-2 1 6

Used version:
UpdateChecker 2.1.6

Implementation:
The updater code is placed in a Activity/onCreate like this:

UpdateChecker checker = new UpdateChecker(this);
checker.start();

NullPointerException in UpdateChecker

we have found error logs about NullPointerException in the method containsNumber(String) in the UpdateChecker class in our app the other day.

Our app has been using your library for ages, and it worked fine until Augst 28th 2015.
But suddenly, it starts crashing when we launch the our app, and saw the logs.

As temporary fixing, we just remove the checker process from our app, and now it started to working fine.

Have you ever heard similar issue, or any updates in playstore/google side around Augst 28th?

Only PlayStore downloadable?

Can i use the Lib aswell for non-PlayStore applications? (So that its downloading and installing the new apk)

StackOverflowError when multiple apks are published

I am receiving severals crashes , i am using crashlytics for log my crashes , and i have a lot reports like this.

java.lang.StackOverflowError
at com.rampo.updatechecker.UpdateChecker.networkError(UpdateChecker.java:167)
at com.rampo.updatechecker.ASyncCheck.onPostExecute(ASyncCheck.java:139)
at com.rampo.updatechecker.ASyncCheck.onPostExecute(ASyncCheck.java:44)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5052)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(NativeStart.java)

IllegalStateException: Can not perform this action after onSaveInstanceState

The looks like the Dialog class does not play well with its parent activity's life-cycle. I got following crash when the UpdateChecker tried to open a dialog in an activity that was already closed:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1343)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1361)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
at android.support.v4.app.DialogFragment.show(DialogFragment.java:127)
at com.rampo.updatechecker.UpdateChecker.showDialog(UpdateChecker.java:299)  

Code Cleanup

Make a Little Code Cleanup

  • use Enums instead of static final int
  • remove unnecessary Folder Structor for utils and store. There are only one Class inside. the Folders just obscure things.
  • remove static references to Activitys or Context.

There are more. Add them Please there. This tool is good but the code ist not the best.

Without INTERNET permission, UpdateChecker crashes.

I have some annoying users who think its funny to remove INTERNET permission, UpdateChecker in this case crashes..

05-25 18:51:27.893    7632-8191/nz.org.winters.android.gnfastcharge E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: nz.org.winters.android.gnfastcharge, PID: 7632
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:304)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:451)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
            at java.net.InetAddress.getAllByName(InetAddress.java:215)
            at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:142)
            at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
            at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
            at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
            at com.rampo.updatechecker.ASyncCheck.doInBackground(ASyncCheck.java:81)
            at com.rampo.updatechecker.ASyncCheck.doInBackground(ASyncCheck.java:44)
            at android.os.AsyncTask$2.call(AsyncTask.java:292)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
            at libcore.io.Posix.android_getaddrinfo(Native Method)
            at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:438)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
            at java.net.InetAddress.getAllByName(InetAddress.java:215)
            at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:142)
            at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
            at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
            at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
            at com.rampo.updatechecker.ASyncCheck.doInBackground(ASyncCheck.java:81)
            at com.rampo.updatechecker.ASyncCheck.doInBackground(ASyncCheck.java:44)
            at android.os.AsyncTask$2.call(AsyncTask.java:292)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
            at libcore.io.Posix.android_getaddrinfo(Native Method)
            at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:438)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
            at java.net.InetAddress.getAllByName(InetAddress.java:215)
            at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:142)
            at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
            at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
            at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
            at com.rampo.updatechecker.ASyncCheck.doInBackground(ASyncCheck.java:81)
            at com.rampo.updatechecker.ASyncCheck.doInBackground(ASyncCheck.java:44)
            at android.os.AsyncTask$2.call(AsyncTask.java:292)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)

String in french translation invalidates XML

It's

<string name="downloadFor">Vérification d'une nouvelle mise à jour pour %1$s!\nDisponible dès maintenant sur %2$s.</string>

while it lacks escaping in d'un as it should be

<string name="downloadFor">Vérification d\'une nouvelle mise à jour pour %1$s!\nDisponible dès maintenant sur %2$s.</string>

Store page format error

Started getting the following error:

Store page format error

Was a great library, very useful. Would be great if the dev updated it to support Google Play's new html structure. Dev - please consider this :)

Thanks!

Managing play stages?

Is there or will there be a way to manage users who belong to different groups within the play store? Such as letting Alpha vs Beta vs Production users getting the notification for an update?

Null Pointer Exception in Async Task

Caused by: java.lang.NullPointerException
at om.rampo.updatechecker.ASyncCheck.containsNumber(ASyncCheck.java:152) at com.rampo.updatechecker.ASyncCheck.doInBackground(ASyncCheck.java:93) at com.rampo.updatechecker.ASyncCheck.doInBackground(ASyncCheck.java:42)

where to put the "new UpdateChecker(this)"?

very simple to use indeed!
However, little info on where to put the code might be helpful for beginners.

UpdateChecker checker = new UpdateChecker(this);
checker.start();

Besides,

dependencies { compile 'com.github.rampo.updatechecker:library:2.1.0' }

gives me an error

`Error:(11, 0) Build script error, unsupported Gradle DSL method found: 'compile()'!

Possible causes could be:

STORE ERROR

The library suddenly started throwing STORE Error. I have my app onto playstore and no update has been released. Can you please let me know why is STORE Error being throwing.

way to force update?

Is there a way to force the user to upgrade?

Some update is mandatory and user needs to update to use the app. Is there a way to enforce such a scheme?

org.apache.http within UpdateChecker lib doesn't support

I have followed githab description and have added permissions and link to gradle, but anyway when I made implementation to my activity it does't work. I checke I figured out that issue is in lib, because in class AssynkCheck next imports cannot be recognized

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;

App crashed on moving to production. Null pointer exception

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at com.rampo.updatechecker.ASyncCheck.containsNumber(ASyncCheck.java:152)
at com.rampo.updatechecker.ASyncCheck.doInBackground(ASyncCheck.java:93)
at com.rampo.updatechecker.ASyncCheck.doInBackground(ASyncCheck.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

Periodic check?

Does this library check periodically? Or is it just a one off event?

If not, is there a way I can make it check periodically, and update info on the UI?

Are you serious?

You keep an Activity in a static reference in UpdateChecker class - are you an Android developer really?

Dialog class is missing public no-argument constructor

The Dialog class does not have a public no-argument-constructor. This causes crashes under certain conditions, I have already received several crash reports for one of my apps where I am using UpdateChecker.

This is a general requirement for all subclasses of Fragment. The Android system will not be able to recreate it later on if there is no such constructor. You may supply constructor arguments using a combination setArgument() and a Bundle.

http://developer.android.com/reference/android/app/Fragment.html#Fragment()
http://stackoverflow.com/a/9245510/1615280

Swedish translation

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="library_name">Update Checker</string>
    <string name="downloadFor">Kolla in den senaste uppdateringen av %1$s!\nFinns tillgänglig på %2$s.</string>
    <string name="dialogPositiveButton">OK</string>
    <string name="dialogNeutralButton">Senare</string>
    <string name="dialogNegativeButton">Nej, tack</string>
    <string name="newUpdateAvailable">Ny uppdatering finns</string>
    <string name="googlePlay">Google Play</string>
    <string name="amazonStore">Amazon App Store</string>
</resources>

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.