try updating widget several times if no network connection detected

This commit is contained in:
Andrew Dolgov 2017-05-30 13:59:55 +03:00
parent d61c4c815c
commit 1fc24f1e37
1 changed files with 41 additions and 23 deletions

View File

@ -4,6 +4,8 @@ import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
@ -29,8 +31,6 @@ public class WidgetUpdateService extends Service {
public static final int UPDATE_RESULT_ERROR_NEED_CONF = 3;
public static final int UPDATE_IN_PROGRESS = 4;
private int m_updateFailures = 0;
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "onBind");
@ -38,21 +38,49 @@ public class WidgetUpdateService extends Service {
return null;
}
protected boolean isNetworkAvailable() {
ConnectivityManager cm = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
// if no network is available networkInfo will be null
// otherwise check if we are connected
if (networkInfo != null && networkInfo.isConnected()) {
return true;
}
return false;
}
@Override
public void onStart(Intent intent, int startId) {
Log.d(TAG, "onStart");
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (pm.isDeviceIdleMode()) {
Log.d(TAG, "device in idle mode, bailing out");
return;
}
}
try {
sendResultIntent(-1, UPDATE_IN_PROGRESS);
if (!isNetworkAvailable()) {
final int retryCount = intent.getIntExtra("retryCount", 0);
Log.d(TAG, "service update requested but network is not available, try: " + retryCount);
if (retryCount < 10) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent serviceIntent = new Intent(getApplicationContext(), WidgetUpdateService.class);
serviceIntent.putExtra("retryCount", retryCount + 1);
startService(serviceIntent);
}
}, 3 * 1000);
} else {
sendResultIntent(-1, UPDATE_RESULT_ERROR_OTHER);
}
stopSelf();
return;
}
m_prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
@ -77,7 +105,6 @@ public class WidgetUpdateService extends Service {
JsonObject content = result.getAsJsonObject();
if (content != null) {
m_updateFailures = 0;
int unread = content.get("unread").getAsInt();
sendResultIntent(unread, UPDATE_RESULT_OK);
@ -91,7 +118,6 @@ public class WidgetUpdateService extends Service {
Log.d(TAG, "request failed: " + getErrorMessage());
}
++m_updateFailures;
sendResultIntent(-1, UPDATE_RESULT_ERROR_OTHER);
}
};
@ -113,7 +139,6 @@ public class WidgetUpdateService extends Service {
protected void onLoginFailed(int requestId, ApiRequest ar) {
Log.d(TAG, "login failed: " + getString(ar.getErrorMessage()));
++m_updateFailures;
sendResultIntent(-1, UPDATE_RESULT_ERROR_LOGIN);
}
@ -124,21 +149,15 @@ public class WidgetUpdateService extends Service {
}
};
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
String login = m_prefs.getString("login", "").trim();
String password = m_prefs.getString("password", "").trim();
String login = m_prefs.getString("login", "").trim();
String password = m_prefs.getString("password", "").trim();
loginManager.logIn(getApplicationContext(), 1, login, password);
}
}, 2 * 1000);
loginManager.logIn(getApplicationContext(), 1, login, password);
}
} catch (Exception e) {
e.printStackTrace();
++m_updateFailures;
sendResultIntent(-1, UPDATE_RESULT_ERROR_OTHER);
}
@ -152,7 +171,6 @@ public class WidgetUpdateService extends Service {
intent.setAction(SmallWidgetProvider.ACTION_UPDATE_RESULT);
intent.putExtra("resultCode", resultCode);
intent.putExtra("unread", unread);
intent.putExtra("failures", m_updateFailures);
sendBroadcast(intent);