Implement failover case for not connecting to OsMo service
This commit is contained in:
parent
aab93f0a81
commit
cde7f0c868
4 changed files with 78 additions and 2 deletions
|
@ -9,6 +9,10 @@
|
|||
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
|
||||
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
|
||||
-->
|
||||
<string name="osmo_auth_error_short">Authorization failed</string>
|
||||
<string name="osmo_auth_error">OsMo authorization error encountered : %1$s.\n
|
||||
It could be a temporary service down or your registration expired.\n
|
||||
Do you want to proceed with new registration.</string>
|
||||
<string name="osmo_group_by_invite">Enter by invite</string>
|
||||
<string name="osmo_group_information_desc">
|
||||
- All created groups are public! If you want to be anonymous, connect devices directly via Tracker ids.\n
|
||||
|
|
|
@ -304,6 +304,7 @@ public class OsMoGroupsActivity extends OsmandExpandableListActivity implements
|
|||
return path;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
|
|
@ -27,9 +27,17 @@ import org.json.JSONArray;
|
|||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.provider.Settings.Secure;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
|
||||
public class OsMoService implements OsMoReactor {
|
||||
public static final String REGENERATE_CMD = "TRACKER_REGENERATE_ID";
|
||||
|
@ -46,13 +54,44 @@ public class OsMoService implements OsMoReactor {
|
|||
private String lastRegistrationError = null;
|
||||
private OsMoPlugin plugin;
|
||||
private boolean enabled = false;
|
||||
private BroadcastReceiver broadcastReceiver;
|
||||
private Notification notification;
|
||||
public final static String OSMO_REGISTER_AGAIN = "OSMO_REGISTER_AGAIN"; //$NON-NLS-1$
|
||||
private final static int SIMPLE_NOTFICATION_ID = 5;
|
||||
|
||||
|
||||
|
||||
public OsMoService(OsmandApplication app, OsMoPlugin plugin) {
|
||||
public OsMoService(final OsmandApplication app, OsMoPlugin plugin) {
|
||||
this.app = app;
|
||||
this.plugin = plugin;
|
||||
listReactors.add(this);
|
||||
broadcastReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
notification = null;
|
||||
NotificationManager mNotificationManager = (NotificationManager) app
|
||||
.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
|
||||
registerAsync();
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
app.registerReceiver(broadcastReceiver, new IntentFilter(OSMO_REGISTER_AGAIN));
|
||||
}
|
||||
|
||||
private void registerAsync() {
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
public Void doInBackground(Void... voids ) {
|
||||
try {
|
||||
registerOsmoDeviceKey();
|
||||
reconnect();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}.execute((Void)null);
|
||||
}
|
||||
|
||||
public boolean isConnected() {
|
||||
|
@ -226,7 +265,8 @@ public class OsMoService implements OsMoReactor {
|
|||
final JSONObject obj = new JSONObject(r);
|
||||
if(obj.has("error")) {
|
||||
lastRegistrationError = obj.getString("error");
|
||||
throw new RuntimeException(obj.getString("error"));
|
||||
runNotification(lastRegistrationError);
|
||||
return null;
|
||||
}
|
||||
if(!obj.has("address")) {
|
||||
lastRegistrationError = "Host name not specified";
|
||||
|
@ -259,6 +299,31 @@ public class OsMoService implements OsMoReactor {
|
|||
}
|
||||
}
|
||||
|
||||
private void runNotification(String error) {
|
||||
if (notification == null) {
|
||||
Intent notificationIntent = new Intent(OSMO_REGISTER_AGAIN);
|
||||
PendingIntent intent = PendingIntent.getBroadcast(app, 0, notificationIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
android.support.v4.app.NotificationCompat.Builder bld = new NotificationCompat.Builder(app);
|
||||
bld.setContentInfo(app.getString(R.string.osmo_auth_error, error));
|
||||
bld.setContentIntent(intent);
|
||||
bld.setContentTitle(app.getString(R.string.osmo_auth_error_short));
|
||||
bld.setSmallIcon(R.drawable.bgs_icon);
|
||||
|
||||
NotificationManager mNotificationManager = (NotificationManager) app
|
||||
.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notification = bld.getNotification();
|
||||
mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notification);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void showDialogAskToReregister(String error) {
|
||||
// Builder bld = new AlertDialog.Builder(this);
|
||||
// bld.setMessage(app.getString(R.string.osmo_io_error) + error);
|
||||
// bld.show();
|
||||
}
|
||||
|
||||
public void showErrorMessage(String string) {
|
||||
app.showToastMessage(app.getString(R.string.osmo_io_error) + string);
|
||||
}
|
||||
|
|
|
@ -89,6 +89,9 @@ public class OsMoThread {
|
|||
if (sessionInfo == null) {
|
||||
sessionInfo = service.prepareSessionToken();
|
||||
}
|
||||
if(sessionInfo == null) {
|
||||
return;
|
||||
}
|
||||
this.activeChannel = null;
|
||||
authorized = 0;
|
||||
reconnect = false;
|
||||
|
@ -154,6 +157,9 @@ public class OsMoThread {
|
|||
// stopThread = true;
|
||||
if(activeChannel == null || reconnect) {
|
||||
initConnection();
|
||||
if(activeChannel == null) {
|
||||
delay = HEARTBEAT_FAILED_DELAY;
|
||||
}
|
||||
} else {
|
||||
checkSelectedKeys();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue