Fix broadcast receiving of package updates
* It is PACKAGE_REPLACED, not PACKAGE_CHANGED: http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_CHANGED * REMOVED and then ADDED are fired as well as REPLACED when upgrading an application: http://stackoverflow.com/questions/5217237/package-removed-then-package-added-are-fired-along-with-package-replaced-inten
This commit is contained in:
parent
55acd955b9
commit
7a16bf4ce5
@ -291,7 +291,7 @@
|
|||||||
</receiver>
|
</receiver>
|
||||||
<receiver android:name=".PackageUpgradedReceiver" >
|
<receiver android:name=".PackageUpgradedReceiver" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.PACKAGE_CHANGED" />
|
<action android:name="android.intent.action.PACKAGE_REPLACED" />
|
||||||
|
|
||||||
<data android:scheme="package" />
|
<data android:scheme="package" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
@ -20,6 +20,7 @@ package org.fdroid.fdroid;
|
|||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -27,6 +28,15 @@ import org.fdroid.fdroid.data.InstalledAppProvider;
|
|||||||
|
|
||||||
public class PackageAddedReceiver extends PackageReceiver {
|
public class PackageAddedReceiver extends PackageReceiver {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean toDiscard(Intent intent) {
|
||||||
|
if (intent.hasExtra(Intent.EXTRA_REPLACING)) {
|
||||||
|
Log.d("FDroid", "Discarding since this PACKAGE_ADDED is just a PACKAGE_REPLACED");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handle(Context context, String appId) {
|
protected void handle(Context context, String appId) {
|
||||||
PackageInfo info = getPackageInfo(context, appId);
|
PackageInfo info = getPackageInfo(context, appId);
|
||||||
|
@ -29,6 +29,7 @@ import org.fdroid.fdroid.data.AppProvider;
|
|||||||
|
|
||||||
abstract class PackageReceiver extends BroadcastReceiver {
|
abstract class PackageReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
|
abstract protected boolean toDiscard(Intent intent);
|
||||||
abstract protected void handle(Context context, String appId);
|
abstract protected void handle(Context context, String appId);
|
||||||
|
|
||||||
protected PackageInfo getPackageInfo(Context context, String appId) {
|
protected PackageInfo getPackageInfo(Context context, String appId) {
|
||||||
@ -43,6 +44,9 @@ abstract class PackageReceiver extends BroadcastReceiver {
|
|||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
Log.d("FDroid", "PackageReceiver received [action = '" + intent.getAction() + "', data = '" + intent.getData() + "']");
|
Log.d("FDroid", "PackageReceiver received [action = '" + intent.getAction() + "', data = '" + intent.getData() + "']");
|
||||||
|
if (toDiscard(intent)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
String appId = intent.getData().getSchemeSpecificPart();
|
String appId = intent.getData().getSchemeSpecificPart();
|
||||||
handle(context, appId);
|
handle(context, appId);
|
||||||
context.getContentResolver().notifyChange(AppProvider.getContentUri(appId), null);
|
context.getContentResolver().notifyChange(AppProvider.getContentUri(appId), null);
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package org.fdroid.fdroid;
|
package org.fdroid.fdroid;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import org.fdroid.fdroid.data.AppProvider;
|
import org.fdroid.fdroid.data.AppProvider;
|
||||||
@ -26,6 +27,15 @@ import org.fdroid.fdroid.data.InstalledAppProvider;
|
|||||||
|
|
||||||
public class PackageRemovedReceiver extends PackageReceiver {
|
public class PackageRemovedReceiver extends PackageReceiver {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean toDiscard(Intent intent) {
|
||||||
|
if (intent.hasExtra(Intent.EXTRA_REPLACING)) {
|
||||||
|
Log.d("FDroid", "Discarding since this PACKAGE_REMOVED is just a PACKAGE_REPLACED");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handle(Context context, String appId) {
|
protected void handle(Context context, String appId) {
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ package org.fdroid.fdroid;
|
|||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -33,6 +34,11 @@ import org.fdroid.fdroid.data.InstalledAppProvider;
|
|||||||
*/
|
*/
|
||||||
public class PackageUpgradedReceiver extends PackageReceiver {
|
public class PackageUpgradedReceiver extends PackageReceiver {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean toDiscard(Intent intent) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handle(Context context, String appId) {
|
protected void handle(Context context, String appId) {
|
||||||
PackageInfo info = getPackageInfo(context, appId);
|
PackageInfo info = getPackageInfo(context, appId);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user