mobile/android/base/sync/PrefsBackoffHandler.java

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 package org.mozilla.gecko.sync;
     7 import android.content.SharedPreferences;
     8 import android.content.SharedPreferences.Editor;
    10 public class PrefsBackoffHandler implements BackoffHandler {
    11   public static final String PREF_EARLIEST_NEXT = "earliestnext";
    13   private final SharedPreferences prefs;
    14   private final String prefEarliest;
    16   public PrefsBackoffHandler(final SharedPreferences prefs, final String prefSuffix) {
    17     if (prefs == null) {
    18       throw new IllegalArgumentException("prefs must not be null.");
    19     }
    20     this.prefs = prefs;
    21     this.prefEarliest = PREF_EARLIEST_NEXT + "." + prefSuffix;
    22   }
    24   @Override
    25   public synchronized long getEarliestNextRequest() {
    26     return prefs.getLong(prefEarliest, 0);
    27   }
    29   @Override
    30   public synchronized void setEarliestNextRequest(final long next) {
    31     final Editor edit = prefs.edit();
    32     edit.putLong(prefEarliest, next);
    33     edit.commit();
    34   }
    36   @Override
    37   public synchronized void extendEarliestNextRequest(final long next) {
    38     if (prefs.getLong(prefEarliest, 0) >= next) {
    39       return;
    40     }
    41     final Editor edit = prefs.edit();
    42     edit.putLong(prefEarliest, next);
    43     edit.commit();
    44   }
    46   /**
    47    * Return the number of milliseconds until we're allowed to touch the server again,
    48    * or 0 if now is fine.
    49    */
    50   @Override
    51   public long delayMilliseconds() {
    52     long earliestNextRequest = getEarliestNextRequest();
    53     if (earliestNextRequest <= 0) {
    54       return 0;
    55     }
    56     long now = System.currentTimeMillis();
    57     return Math.max(0, earliestNextRequest - now);
    58   }
    59 }

mercurial