Skip to content
Snippets Groups Projects
Commit d432dc26 authored by Adrien Béraud's avatar Adrien Béraud
Browse files

reload account list if state changed during loading

Tuleap: #468
Change-Id: Ife050404763c530b48fb857ccd3d2caba03a57c1
parent 7533977c
No related branches found
No related tags found
No related merge requests found
...@@ -45,6 +45,7 @@ import android.net.Uri; ...@@ -45,6 +45,7 @@ import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Binder; import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import android.os.OperationCanceledException;
import android.os.RemoteException; import android.os.RemoteException;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.provider.ContactsContract; import android.provider.ContactsContract;
...@@ -296,7 +297,7 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP ...@@ -296,7 +297,7 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP
@Override @Override
public void onCreate() { public void onCreate() {
Log.e(TAG, "onCreate"); Log.d(TAG, "onCreate");
super.onCreate(); super.onCreate();
mediaManager = new MediaManager(this); mediaManager = new MediaManager(this);
...@@ -356,6 +357,7 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP ...@@ -356,6 +357,7 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP
all_accounts = data; all_accounts = data;
accounts = all_accounts.subList(0,data.size()-1); accounts = all_accounts.subList(0,data.size()-1);
ip2ip_account = all_accounts.subList(data.size()-1,data.size()); ip2ip_account = all_accounts.subList(data.size()-1,data.size());
mAccountLoader.stopLoading();
boolean haveSipAccount = false; boolean haveSipAccount = false;
boolean haveRingAccount = false; boolean haveRingAccount = false;
for (Account acc : accounts) { for (Account acc : accounts) {
...@@ -415,7 +417,7 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP ...@@ -415,7 +417,7 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP
try { try {
if (mService.isStarted()) { if (mService.isStarted()) {
mAccountLoader.startLoading(); mAccountLoader.startLoading();
mAccountLoader.forceLoad(); mAccountLoader.onContentChanged();
} }
} catch (RemoteException e) { } catch (RemoteException e) {
e.printStackTrace(); e.printStackTrace();
...@@ -1034,18 +1036,34 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP ...@@ -1034,18 +1036,34 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP
super(context); super(context);
Log.w(TAG, "AccountsLoader constructor"); Log.w(TAG, "AccountsLoader constructor");
} }
private boolean checkCancel() {
if (isLoadInBackgroundCanceled()) {
Log.w(TAG, "AccountsLoader cancelled");
throw new OperationCanceledException();
}
if (isAbandoned()) {
Log.w(TAG, "AccountsLoader abandoned");
return true;
}
return false;
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public ArrayList<Account> loadInBackground() { public ArrayList<Account> loadInBackground() {
Log.w(TAG, "AccountsLoader loadInBackground"); Log.w(TAG, "AccountsLoader loadInBackground");
ArrayList<Account> accounts = new ArrayList<>(); ArrayList<Account> accounts = new ArrayList<>();
Account IP2IP = null; Account IP2IP = null;
if (checkCancel())
return null;
try { try {
ArrayList<String> accountIDs = (ArrayList<String>) mService.getAccountList(); ArrayList<String> accountIDs = (ArrayList<String>) mService.getAccountList();
Map<String, String> details; Map<String, String> details;
ArrayList<Map<String, String>> credentials; ArrayList<Map<String, String>> credentials;
Map<String, String> state; Map<String, String> state;
for (String id : accountIDs) { for (String id : accountIDs) {
if (checkCancel())
return null;
details = (Map<String, String>) mService.getAccountDetails(id); details = (Map<String, String>) mService.getAccountDetails(id);
state = (Map<String, String>) mService.getVolatileAccountDetails(id); state = (Map<String, String>) mService.getVolatileAccountDetails(id);
if (id.contentEquals(ACCOUNT_IP2IP)) { if (id.contentEquals(ACCOUNT_IP2IP)) {
...@@ -1065,8 +1083,14 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP ...@@ -1065,8 +1083,14 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP
Log.e(TAG, e.toString()); Log.e(TAG, e.toString());
} }
accounts.add(IP2IP); accounts.add(IP2IP);
if (checkCancel())
return null;
return accounts; return accounts;
} }
@Override protected void onStopLoading() {
cancelLoad();
}
} }
private void updateConnectivityState() { private void updateConnectivityState() {
...@@ -1186,9 +1210,8 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP ...@@ -1186,9 +1210,8 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP
case DRingService.DRING_CONNECTION_CHANGED: { case DRingService.DRING_CONNECTION_CHANGED: {
boolean connected = intent.getBooleanExtra("connected", false); boolean connected = intent.getBooleanExtra("connected", false);
if (connected) { if (connected) {
mAccountLoader.onContentChanged();
mAccountLoader.startLoading(); mAccountLoader.startLoading();
mAccountLoader.forceLoad(); mAccountLoader.onContentChanged();
} else { } else {
Log.w(TAG, "DRing connection lost "); Log.w(TAG, "DRing connection lost ");
} }
...@@ -1243,7 +1266,12 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP ...@@ -1243,7 +1266,12 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP
break; break;
case ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED: case ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED:
Log.w(TAG, "Received " + intent.getAction() + " " + intent.getStringExtra("account") + " " + intent.getStringExtra("state") + " " + intent.getIntExtra("code", 0)); Log.w(TAG, "Received " + intent.getAction() + " " + intent.getStringExtra("account") + " " + intent.getStringExtra("state") + " " + intent.getIntExtra("code", 0));
//accountStateChanged(intent.getStringExtra("Account"), intent.getStringExtra("State"), intent.getIntExtra("code", 0)); if (mAccountLoader.isStarted()) {
mAccountLoader.cancelLoad();
mAccountLoader.stopLoading();
mAccountLoader.startLoading();
mAccountLoader.onContentChanged();
} else {
for (Account a : accounts) { for (Account a : accounts) {
if (a.getAccountID().contentEquals(intent.getStringExtra("account"))) { if (a.getAccountID().contentEquals(intent.getStringExtra("account"))) {
a.setRegistrationState(intent.getStringExtra("state"), intent.getIntExtra("code", 0)); a.setRegistrationState(intent.getStringExtra("state"), intent.getIntExtra("code", 0));
...@@ -1251,11 +1279,11 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP ...@@ -1251,11 +1279,11 @@ public class LocalService extends Service implements SharedPreferences.OnSharedP
break; break;
} }
} }
}
break; break;
case ConfigurationManagerCallback.ACCOUNTS_CHANGED: case ConfigurationManagerCallback.ACCOUNTS_CHANGED:
mAccountLoader.onContentChanged();
mAccountLoader.startLoading(); mAccountLoader.startLoading();
mAccountLoader.forceLoad(); mAccountLoader.onContentChanged();
break; break;
case CallManagerCallBack.INCOMING_TEXT: case CallManagerCallBack.INCOMING_TEXT:
case ConfigurationManagerCallback.INCOMING_TEXT: { case ConfigurationManagerCallback.INCOMING_TEXT: {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment