try updating widget several times if no network connection detected
This commit is contained in:
parent
d61c4c815c
commit
1fc24f1e37
@ -4,6 +4,8 @@ import android.app.Service;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.NetworkInfo;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
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_RESULT_ERROR_NEED_CONF = 3;
|
||||||
public static final int UPDATE_IN_PROGRESS = 4;
|
public static final int UPDATE_IN_PROGRESS = 4;
|
||||||
|
|
||||||
private int m_updateFailures = 0;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBinder onBind(Intent intent) {
|
public IBinder onBind(Intent intent) {
|
||||||
Log.d(TAG, "onBind");
|
Log.d(TAG, "onBind");
|
||||||
@ -38,21 +38,49 @@ public class WidgetUpdateService extends Service {
|
|||||||
return null;
|
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
|
@Override
|
||||||
public void onStart(Intent intent, int startId) {
|
public void onStart(Intent intent, int startId) {
|
||||||
Log.d(TAG, "onStart");
|
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 {
|
try {
|
||||||
sendResultIntent(-1, UPDATE_IN_PROGRESS);
|
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
|
m_prefs = PreferenceManager
|
||||||
.getDefaultSharedPreferences(getApplicationContext());
|
.getDefaultSharedPreferences(getApplicationContext());
|
||||||
|
|
||||||
@ -77,7 +105,6 @@ public class WidgetUpdateService extends Service {
|
|||||||
JsonObject content = result.getAsJsonObject();
|
JsonObject content = result.getAsJsonObject();
|
||||||
|
|
||||||
if (content != null) {
|
if (content != null) {
|
||||||
m_updateFailures = 0;
|
|
||||||
|
|
||||||
int unread = content.get("unread").getAsInt();
|
int unread = content.get("unread").getAsInt();
|
||||||
sendResultIntent(unread, UPDATE_RESULT_OK);
|
sendResultIntent(unread, UPDATE_RESULT_OK);
|
||||||
@ -91,7 +118,6 @@ public class WidgetUpdateService extends Service {
|
|||||||
Log.d(TAG, "request failed: " + getErrorMessage());
|
Log.d(TAG, "request failed: " + getErrorMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
++m_updateFailures;
|
|
||||||
sendResultIntent(-1, UPDATE_RESULT_ERROR_OTHER);
|
sendResultIntent(-1, UPDATE_RESULT_ERROR_OTHER);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -113,7 +139,6 @@ public class WidgetUpdateService extends Service {
|
|||||||
protected void onLoginFailed(int requestId, ApiRequest ar) {
|
protected void onLoginFailed(int requestId, ApiRequest ar) {
|
||||||
Log.d(TAG, "login failed: " + getString(ar.getErrorMessage()));
|
Log.d(TAG, "login failed: " + getString(ar.getErrorMessage()));
|
||||||
|
|
||||||
++m_updateFailures;
|
|
||||||
sendResultIntent(-1, UPDATE_RESULT_ERROR_LOGIN);
|
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 login = m_prefs.getString("login", "").trim();
|
||||||
String password = m_prefs.getString("password", "").trim();
|
String password = m_prefs.getString("password", "").trim();
|
||||||
|
|
||||||
loginManager.logIn(getApplicationContext(), 1, login, password);
|
loginManager.logIn(getApplicationContext(), 1, login, password);
|
||||||
}
|
|
||||||
}, 2 * 1000);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
||||||
++m_updateFailures;
|
|
||||||
sendResultIntent(-1, UPDATE_RESULT_ERROR_OTHER);
|
sendResultIntent(-1, UPDATE_RESULT_ERROR_OTHER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,7 +171,6 @@ public class WidgetUpdateService extends Service {
|
|||||||
intent.setAction(SmallWidgetProvider.ACTION_UPDATE_RESULT);
|
intent.setAction(SmallWidgetProvider.ACTION_UPDATE_RESULT);
|
||||||
intent.putExtra("resultCode", resultCode);
|
intent.putExtra("resultCode", resultCode);
|
||||||
intent.putExtra("unread", unread);
|
intent.putExtra("unread", unread);
|
||||||
intent.putExtra("failures", m_updateFailures);
|
|
||||||
|
|
||||||
sendBroadcast(intent);
|
sendBroadcast(intent);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user