1
0
mirror of https://github.com/etesync/android synced 2024-12-23 23:18:46 +00:00

Fix crash bug caused by leaking OnAccountsUpdateListener

This commit is contained in:
Ricki Hirner 2016-02-19 14:15:07 +01:00
parent 940d622402
commit 3ca063416e
4 changed files with 25 additions and 19 deletions

View File

@ -72,5 +72,5 @@ dependencies {
androidTestCompile 'com.squareup.okhttp3:mockwebserver:3.1.2' androidTestCompile 'com.squareup.okhttp3:mockwebserver:3.1.2'
compile 'dnsjava:dnsjava:2.1.7' compile 'dnsjava:dnsjava:2.1.7'
compile 'org.apache.commons:commons-lang3:3.4' compile 'org.apache.commons:commons-lang3:3.4'
compile 'org.slf4j:slf4j-android:1.7.13' compile 'org.slf4j:slf4j-android:1.7.14'
} }

View File

@ -144,21 +144,6 @@
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".ui.settings.SettingsActivity"
android:label="@string/settings_title">
<intent-filter>
<action android:name="android.intent.action.MANAGE_NETWORK_USAGE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity
android:name=".ui.settings.AccountActivity"
android:label="@string/settings_title"
android:parentActivityName=".ui.settings.SettingsActivity"
tools:ignore="UnusedAttribute">
</activity>
<!-- MemorizingTrustManager --> <!-- MemorizingTrustManager -->
<activity <activity

View File

@ -8,17 +8,38 @@
package at.bitfire.davdroid; package at.bitfire.davdroid;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.OnAccountsUpdateListener;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import java.util.LinkedList;
import java.util.List;
public class AccountsChangedReceiver extends BroadcastReceiver { public class AccountsChangedReceiver extends BroadcastReceiver {
protected static final List<OnAccountsUpdateListener> listeners = new LinkedList<>();
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, DavService.class); Intent serviceIntent = new Intent(context, DavService.class);
serviceIntent.setAction(DavService.ACTION_ACCOUNTS_UPDATED); serviceIntent.setAction(DavService.ACTION_ACCOUNTS_UPDATED);
context.startService(serviceIntent); context.startService(serviceIntent);
for (OnAccountsUpdateListener listener : listeners)
listener.onAccountsUpdated(null);
}
public static void registerListener(OnAccountsUpdateListener listener, boolean callImmediately) {
listeners.add(listener);
if (callImmediately)
listener.onAccountsUpdated(null);
}
public static void unregisterListener(OnAccountsUpdateListener listener) {
listeners.remove(listener);
} }
} }

View File

@ -35,6 +35,7 @@ import android.widget.TextView;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import at.bitfire.davdroid.AccountsChangedReceiver;
import at.bitfire.davdroid.Constants; import at.bitfire.davdroid.Constants;
import at.bitfire.davdroid.DavService; import at.bitfire.davdroid.DavService;
import at.bitfire.davdroid.R; import at.bitfire.davdroid.R;
@ -131,13 +132,12 @@ public class AccountListFragment extends ListFragment implements LoaderManager.L
@Override @Override
protected void onStartLoading() { protected void onStartLoading() {
Constants.log.debug("AccountListFragment: Start loading"); AccountsChangedReceiver.registerListener(this, true);
accountManager.addOnAccountsUpdatedListener(this, null, true);
} }
@Override @Override
protected void onStopLoading() { protected void onStopLoading() {
accountManager.removeOnAccountsUpdatedListener(this); AccountsChangedReceiver.unregisterListener(this);
} }
@Override @Override