package org.mtransit.android.receiver; import org.mtransit.android.commons.MTLog; import org.mtransit.android.commons.PackageManagerUtils; import org.mtransit.android.data.DataSourceManager; import org.mtransit.android.data.DataSourceProvider; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.pm.ProviderInfo; public class ModulesReceiver extends BroadcastReceiver implements MTLog.Loggable { private static final String TAG = ModulesReceiver.class.getSimpleName(); @Override public String getLogTag() { return TAG; } @Override public void onReceive(Context context, Intent intent) { String pkg = intent.getData().getSchemeSpecificPart(); if (DataSourceProvider.isSet()) { if (DataSourceProvider.isProvider(context, pkg)) { boolean reseted = DataSourceProvider.resetIfNecessary(context); if (!reseted) { ping(context, pkg); } } else if (Intent.ACTION_PACKAGE_FULLY_REMOVED.equals(intent.getAction()) || Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) { DataSourceProvider.resetIfNecessary(context); } } else { ping(context, pkg); } } private void ping(Context context, String pkg) { ProviderInfo[] providers = PackageManagerUtils.findContentProvidersWithMetaData(context, pkg); if (providers != null) { String agencyProviderMetaData = DataSourceProvider.getAgencyProviderMetaData(context); for (ProviderInfo provider : providers) { if (provider.metaData != null) { if (agencyProviderMetaData.equals(provider.metaData.getString(agencyProviderMetaData))) { DataSourceManager.ping(context, provider.authority); } } } } } }