Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9106c64b authored by Todd Kennedy's avatar Todd Kennedy
Browse files

Add API to track package changes

After any package install, removal or update, save the changed
package and update a global sequence number. At any point, apps
can query for the packages changed since a particular sequence
number.

If a package is changed multiple times, it is only included once
in the change list.

Bug: 33865505
Test: Create sample app to query for changes and see which packages are changed after performing certain operations
Change-Id: Ia4646035362b16a97110e05f3f909ce385b48428
parent 710a2851
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -9925,6 +9925,15 @@ package android.content.pm {
    method public final int compare(android.content.pm.ApplicationInfo, android.content.pm.ApplicationInfo);
  }
  public final class ChangedPackages implements android.os.Parcelable {
    ctor public ChangedPackages(int, java.util.List<java.lang.String>);
    method public int describeContents();
    method public java.util.List<java.lang.String> getPackageNames();
    method public int getSequenceNumber();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.content.pm.ChangedPackages> CREATOR;
  }
  public class ComponentInfo extends android.content.pm.PackageItemInfo {
    ctor public ComponentInfo();
    ctor public ComponentInfo(android.content.pm.ComponentInfo);
@@ -10271,6 +10280,7 @@ package android.content.pm {
    method public abstract java.lang.CharSequence getApplicationLabel(android.content.pm.ApplicationInfo);
    method public abstract android.graphics.drawable.Drawable getApplicationLogo(android.content.pm.ApplicationInfo);
    method public abstract android.graphics.drawable.Drawable getApplicationLogo(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract android.content.pm.ChangedPackages getChangedPackages(int);
    method public abstract int getComponentEnabledSetting(android.content.ComponentName);
    method public abstract android.graphics.drawable.Drawable getDefaultActivityIcon();
    method public abstract android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
@@ -40065,6 +40075,7 @@ package android.test.mock {
    method public java.lang.CharSequence getApplicationLabel(android.content.pm.ApplicationInfo);
    method public android.graphics.drawable.Drawable getApplicationLogo(android.content.pm.ApplicationInfo);
    method public android.graphics.drawable.Drawable getApplicationLogo(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
    method public android.content.pm.ChangedPackages getChangedPackages(int);
    method public int getComponentEnabledSetting(android.content.ComponentName);
    method public android.graphics.drawable.Drawable getDefaultActivityIcon();
    method public android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
@@ -47318,7 +47329,7 @@ package android.view.textclassifier {
  public final class TextClassificationManager {
    method public java.util.List<android.view.textclassifier.TextLanguage> detectLanguages(java.lang.CharSequence);
    method public android.view.textclassifier.TextClassifier getDefaultTextClassifier();
    method public synchronized android.view.textclassifier.TextClassifier getDefaultTextClassifier();
  }
  public final class TextClassificationResult {
+12 −1
Original line number Diff line number Diff line
@@ -10373,6 +10373,15 @@ package android.content.pm {
    method public final int compare(android.content.pm.ApplicationInfo, android.content.pm.ApplicationInfo);
  }
  public final class ChangedPackages implements android.os.Parcelable {
    ctor public ChangedPackages(int, java.util.List<java.lang.String>);
    method public int describeContents();
    method public java.util.List<java.lang.String> getPackageNames();
    method public int getSequenceNumber();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.content.pm.ChangedPackages> CREATOR;
  }
  public class ComponentInfo extends android.content.pm.PackageItemInfo {
    ctor public ComponentInfo();
    ctor public ComponentInfo(android.content.pm.ComponentInfo);
@@ -10770,6 +10779,7 @@ package android.content.pm {
    method public abstract java.lang.CharSequence getApplicationLabel(android.content.pm.ApplicationInfo);
    method public abstract android.graphics.drawable.Drawable getApplicationLogo(android.content.pm.ApplicationInfo);
    method public abstract android.graphics.drawable.Drawable getApplicationLogo(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract android.content.pm.ChangedPackages getChangedPackages(int);
    method public abstract int getComponentEnabledSetting(android.content.ComponentName);
    method public abstract android.graphics.drawable.Drawable getDefaultActivityIcon();
    method public abstract java.lang.String getDefaultBrowserPackageNameAsUser(int);
@@ -43490,6 +43500,7 @@ package android.test.mock {
    method public java.lang.CharSequence getApplicationLabel(android.content.pm.ApplicationInfo);
    method public android.graphics.drawable.Drawable getApplicationLogo(android.content.pm.ApplicationInfo);
    method public android.graphics.drawable.Drawable getApplicationLogo(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
    method public android.content.pm.ChangedPackages getChangedPackages(int);
    method public int getComponentEnabledSetting(android.content.ComponentName);
    method public android.graphics.drawable.Drawable getDefaultActivityIcon();
    method public java.lang.String getDefaultBrowserPackageNameAsUser(int);
@@ -50759,7 +50770,7 @@ package android.view.textclassifier {
  public final class TextClassificationManager {
    method public java.util.List<android.view.textclassifier.TextLanguage> detectLanguages(java.lang.CharSequence);
    method public android.view.textclassifier.TextClassifier getDefaultTextClassifier();
    method public synchronized android.view.textclassifier.TextClassifier getDefaultTextClassifier();
  }
  public final class TextClassificationResult {
+12 −1
Original line number Diff line number Diff line
@@ -9953,6 +9953,15 @@ package android.content.pm {
    method public final int compare(android.content.pm.ApplicationInfo, android.content.pm.ApplicationInfo);
  }
  public final class ChangedPackages implements android.os.Parcelable {
    ctor public ChangedPackages(int, java.util.List<java.lang.String>);
    method public int describeContents();
    method public java.util.List<java.lang.String> getPackageNames();
    method public int getSequenceNumber();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.content.pm.ChangedPackages> CREATOR;
  }
  public class ComponentInfo extends android.content.pm.PackageItemInfo {
    ctor public ComponentInfo();
    ctor public ComponentInfo(android.content.pm.ComponentInfo);
@@ -10300,6 +10309,7 @@ package android.content.pm {
    method public abstract java.lang.CharSequence getApplicationLabel(android.content.pm.ApplicationInfo);
    method public abstract android.graphics.drawable.Drawable getApplicationLogo(android.content.pm.ApplicationInfo);
    method public abstract android.graphics.drawable.Drawable getApplicationLogo(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract android.content.pm.ChangedPackages getChangedPackages(int);
    method public abstract int getComponentEnabledSetting(android.content.ComponentName);
    method public abstract android.graphics.drawable.Drawable getDefaultActivityIcon();
    method public abstract java.lang.String getDefaultBrowserPackageNameAsUser(int);
@@ -40202,6 +40212,7 @@ package android.test.mock {
    method public java.lang.CharSequence getApplicationLabel(android.content.pm.ApplicationInfo);
    method public android.graphics.drawable.Drawable getApplicationLogo(android.content.pm.ApplicationInfo);
    method public android.graphics.drawable.Drawable getApplicationLogo(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
    method public android.content.pm.ChangedPackages getChangedPackages(int);
    method public int getComponentEnabledSetting(android.content.ComponentName);
    method public android.graphics.drawable.Drawable getDefaultActivityIcon();
    method public java.lang.String getDefaultBrowserPackageNameAsUser(int);
@@ -47632,7 +47643,7 @@ package android.view.textclassifier {
  public final class TextClassificationManager {
    method public java.util.List<android.view.textclassifier.TextLanguage> detectLanguages(java.lang.CharSequence);
    method public android.view.textclassifier.TextClassifier getDefaultTextClassifier();
    method public synchronized android.view.textclassifier.TextClassifier getDefaultTextClassifier();
  }
  public final class TextClassificationResult {
+10 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.content.IntentFilter;
import android.content.IntentSender;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ChangedPackages;
import android.content.pm.ComponentInfo;
import android.content.pm.InstantAppInfo;
import android.content.pm.FeatureInfo;
@@ -505,6 +506,15 @@ public class ApplicationPackageManager extends PackageManager {
        }
    }

    @Override
    public ChangedPackages getChangedPackages(int sequenceNumber) {
        try {
            return mPM.getChangedPackages(sequenceNumber, mContext.getUserId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    @Override
    @SuppressWarnings("unchecked")
    public FeatureInfo[] getSystemAvailableFeatures() {
+19 −0
Original line number Diff line number Diff line
/**
 * Copyright (c) 2017, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.content.pm;

parcelable ChangedPackages;
 No newline at end of file
Loading