Loading Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -142,6 +142,7 @@ LOCAL_SRC_FILES += \ core/java/android/content/pm/IPackageManager.aidl \ core/java/android/content/pm/IPackageMoveObserver.aidl \ core/java/android/content/pm/IPackageStatsObserver.aidl \ core/java/android/content/pm/IOnPermissionsChangeListener.aidl \ core/java/android/database/IContentObserver.aidl \ core/java/android/hardware/ICameraService.aidl \ core/java/android/hardware/ICameraServiceListener.aidl \ Loading api/system-current.txt +8 −0 Original line number Diff line number Diff line Loading @@ -9522,6 +9522,7 @@ package android.content.pm { public abstract class PackageManager { ctor public PackageManager(); method public abstract void addOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); method public abstract deprecated void addPackageToPreferred(java.lang.String); method public abstract boolean addPermission(android.content.pm.PermissionInfo); method public abstract boolean addPermissionAsync(android.content.pm.PermissionInfo); Loading Loading @@ -9595,6 +9596,7 @@ package android.content.pm { method public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentContentProviders(android.content.Intent, int); method public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentServices(android.content.Intent, int); method public abstract java.util.List<android.content.pm.PermissionInfo> queryPermissionsByGroup(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); method public abstract deprecated void removePackageFromPreferred(java.lang.String); method public abstract void removePermission(java.lang.String); method public abstract android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int); Loading Loading @@ -9770,6 +9772,10 @@ package android.content.pm { ctor public PackageManager.NameNotFoundException(java.lang.String); } public static abstract interface PackageManager.OnPermissionsChangedListener { method public abstract void onPermissionsChanged(int); } public static abstract class PackageManager.PermissionFlags implements java.lang.annotation.Annotation { } Loading Loading @@ -34160,6 +34166,7 @@ package android.test.mock { public class MockPackageManager extends android.content.pm.PackageManager { ctor public MockPackageManager(); method public void addOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); method public void addPackageToPreferred(java.lang.String); method public boolean addPermission(android.content.pm.PermissionInfo); method public boolean addPermissionAsync(android.content.pm.PermissionInfo); Loading Loading @@ -34234,6 +34241,7 @@ package android.test.mock { method public java.util.List<android.content.pm.ResolveInfo> queryIntentContentProviders(android.content.Intent, int); method public java.util.List<android.content.pm.ResolveInfo> queryIntentServices(android.content.Intent, int); method public java.util.List<android.content.pm.PermissionInfo> queryPermissionsByGroup(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); method public void removePackageFromPreferred(java.lang.String); method public void removePermission(java.lang.String); method public android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int); core/java/android/app/ApplicationPackageManager.java +69 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.ComponentInfo; import android.content.pm.ContainerEncryptionParams; import android.content.pm.FeatureInfo; import android.content.pm.IOnPermissionsChangeListener; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageInstallObserver; Loading Loading @@ -88,6 +89,7 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; /*package*/ Loading Loading @@ -1048,6 +1050,38 @@ final class ApplicationPackageManager extends PackageManager { } } @Override public void addOnPermissionsChangeListener(OnPermissionsChangedListener listener) { synchronized (mPermissionListeners) { if (mPermissionListeners.get(listener) != null) { return; } OnPermissionsChangeListenerDelegate delegate = new OnPermissionsChangeListenerDelegate(listener, Looper.getMainLooper()); try { mPM.addOnPermissionsChangeListener(delegate); mPermissionListeners.put(listener, delegate); } catch (RemoteException e) { throw new RuntimeException("Package manager has died", e); } } } @Override public void removeOnPermissionsChangeListener(OnPermissionsChangedListener listener) { synchronized (mPermissionListeners) { IOnPermissionsChangeListener delegate = mPermissionListeners.get(listener); if (delegate != null) { try { mPM.removeOnPermissionsChangeListener(delegate); mPermissionListeners.remove(listener); } catch (RemoteException e) { throw new RuntimeException("Package manager has died", e); } } } } static void configurationChanged() { synchronized (sSync) { sIconCache.clear(); Loading Loading @@ -2139,4 +2173,39 @@ final class ApplicationPackageManager extends PackageManager { = new ArrayMap<ResourceName, WeakReference<Drawable.ConstantState>>(); private static ArrayMap<ResourceName, WeakReference<CharSequence>> sStringCache = new ArrayMap<ResourceName, WeakReference<CharSequence>>(); private final Map<OnPermissionsChangedListener, IOnPermissionsChangeListener> mPermissionListeners = new ArrayMap<>(); public class OnPermissionsChangeListenerDelegate extends IOnPermissionsChangeListener.Stub implements Handler.Callback{ private static final int MSG_PERMISSIONS_CHANGED = 1; private final OnPermissionsChangedListener mListener; private final Handler mHandler; public OnPermissionsChangeListenerDelegate(OnPermissionsChangedListener listener, Looper looper) { mListener = listener; mHandler = new Handler(looper, this); } @Override public void onPermissionsChanged(int uid) { mHandler.obtainMessage(MSG_PERMISSIONS_CHANGED, uid, 0).sendToTarget(); } @Override public boolean handleMessage(Message msg) { switch (msg.what) { case MSG_PERMISSIONS_CHANGED: { final int uid = msg.arg1; mListener.onPermissionsChanged(uid); return true; } } return false; } } } core/java/android/content/pm/IOnPermissionsChangeListener.aidl 0 → 100644 +25 −0 Original line number Diff line number Diff line /* * Copyright (C) 2015 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; /** * Listener for changes in the permissions for installed packages. * {@hide} */ oneway interface IOnPermissionsChangeListener { void onPermissionsChanged(int uid); } core/java/android/content/pm/IPackageManager.aidl +4 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.content.pm.IPackageDeleteObserver2; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.IOnPermissionsChangeListener; import android.content.pm.IntentFilterVerificationInfo; import android.content.pm.InstrumentationInfo; import android.content.pm.KeySet; Loading Loading @@ -490,4 +491,7 @@ interface IPackageManager { KeySet getSigningKeySet(String packageName); boolean isPackageSignedByKeySet(String packageName, in KeySet ks); boolean isPackageSignedByKeySetExactly(String packageName, in KeySet ks); void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); } Loading
Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -142,6 +142,7 @@ LOCAL_SRC_FILES += \ core/java/android/content/pm/IPackageManager.aidl \ core/java/android/content/pm/IPackageMoveObserver.aidl \ core/java/android/content/pm/IPackageStatsObserver.aidl \ core/java/android/content/pm/IOnPermissionsChangeListener.aidl \ core/java/android/database/IContentObserver.aidl \ core/java/android/hardware/ICameraService.aidl \ core/java/android/hardware/ICameraServiceListener.aidl \ Loading
api/system-current.txt +8 −0 Original line number Diff line number Diff line Loading @@ -9522,6 +9522,7 @@ package android.content.pm { public abstract class PackageManager { ctor public PackageManager(); method public abstract void addOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); method public abstract deprecated void addPackageToPreferred(java.lang.String); method public abstract boolean addPermission(android.content.pm.PermissionInfo); method public abstract boolean addPermissionAsync(android.content.pm.PermissionInfo); Loading Loading @@ -9595,6 +9596,7 @@ package android.content.pm { method public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentContentProviders(android.content.Intent, int); method public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentServices(android.content.Intent, int); method public abstract java.util.List<android.content.pm.PermissionInfo> queryPermissionsByGroup(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); method public abstract deprecated void removePackageFromPreferred(java.lang.String); method public abstract void removePermission(java.lang.String); method public abstract android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int); Loading Loading @@ -9770,6 +9772,10 @@ package android.content.pm { ctor public PackageManager.NameNotFoundException(java.lang.String); } public static abstract interface PackageManager.OnPermissionsChangedListener { method public abstract void onPermissionsChanged(int); } public static abstract class PackageManager.PermissionFlags implements java.lang.annotation.Annotation { } Loading Loading @@ -34160,6 +34166,7 @@ package android.test.mock { public class MockPackageManager extends android.content.pm.PackageManager { ctor public MockPackageManager(); method public void addOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); method public void addPackageToPreferred(java.lang.String); method public boolean addPermission(android.content.pm.PermissionInfo); method public boolean addPermissionAsync(android.content.pm.PermissionInfo); Loading Loading @@ -34234,6 +34241,7 @@ package android.test.mock { method public java.util.List<android.content.pm.ResolveInfo> queryIntentContentProviders(android.content.Intent, int); method public java.util.List<android.content.pm.ResolveInfo> queryIntentServices(android.content.Intent, int); method public java.util.List<android.content.pm.PermissionInfo> queryPermissionsByGroup(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); method public void removePackageFromPreferred(java.lang.String); method public void removePermission(java.lang.String); method public android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int);
core/java/android/app/ApplicationPackageManager.java +69 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.ComponentInfo; import android.content.pm.ContainerEncryptionParams; import android.content.pm.FeatureInfo; import android.content.pm.IOnPermissionsChangeListener; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageInstallObserver; Loading Loading @@ -88,6 +89,7 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; /*package*/ Loading Loading @@ -1048,6 +1050,38 @@ final class ApplicationPackageManager extends PackageManager { } } @Override public void addOnPermissionsChangeListener(OnPermissionsChangedListener listener) { synchronized (mPermissionListeners) { if (mPermissionListeners.get(listener) != null) { return; } OnPermissionsChangeListenerDelegate delegate = new OnPermissionsChangeListenerDelegate(listener, Looper.getMainLooper()); try { mPM.addOnPermissionsChangeListener(delegate); mPermissionListeners.put(listener, delegate); } catch (RemoteException e) { throw new RuntimeException("Package manager has died", e); } } } @Override public void removeOnPermissionsChangeListener(OnPermissionsChangedListener listener) { synchronized (mPermissionListeners) { IOnPermissionsChangeListener delegate = mPermissionListeners.get(listener); if (delegate != null) { try { mPM.removeOnPermissionsChangeListener(delegate); mPermissionListeners.remove(listener); } catch (RemoteException e) { throw new RuntimeException("Package manager has died", e); } } } } static void configurationChanged() { synchronized (sSync) { sIconCache.clear(); Loading Loading @@ -2139,4 +2173,39 @@ final class ApplicationPackageManager extends PackageManager { = new ArrayMap<ResourceName, WeakReference<Drawable.ConstantState>>(); private static ArrayMap<ResourceName, WeakReference<CharSequence>> sStringCache = new ArrayMap<ResourceName, WeakReference<CharSequence>>(); private final Map<OnPermissionsChangedListener, IOnPermissionsChangeListener> mPermissionListeners = new ArrayMap<>(); public class OnPermissionsChangeListenerDelegate extends IOnPermissionsChangeListener.Stub implements Handler.Callback{ private static final int MSG_PERMISSIONS_CHANGED = 1; private final OnPermissionsChangedListener mListener; private final Handler mHandler; public OnPermissionsChangeListenerDelegate(OnPermissionsChangedListener listener, Looper looper) { mListener = listener; mHandler = new Handler(looper, this); } @Override public void onPermissionsChanged(int uid) { mHandler.obtainMessage(MSG_PERMISSIONS_CHANGED, uid, 0).sendToTarget(); } @Override public boolean handleMessage(Message msg) { switch (msg.what) { case MSG_PERMISSIONS_CHANGED: { final int uid = msg.arg1; mListener.onPermissionsChanged(uid); return true; } } return false; } } }
core/java/android/content/pm/IOnPermissionsChangeListener.aidl 0 → 100644 +25 −0 Original line number Diff line number Diff line /* * Copyright (C) 2015 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; /** * Listener for changes in the permissions for installed packages. * {@hide} */ oneway interface IOnPermissionsChangeListener { void onPermissionsChanged(int uid); }
core/java/android/content/pm/IPackageManager.aidl +4 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.content.pm.IPackageDeleteObserver2; import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.IOnPermissionsChangeListener; import android.content.pm.IntentFilterVerificationInfo; import android.content.pm.InstrumentationInfo; import android.content.pm.KeySet; Loading Loading @@ -490,4 +491,7 @@ interface IPackageManager { KeySet getSigningKeySet(String packageName); boolean isPackageSignedByKeySet(String packageName, in KeySet ks); boolean isPackageSignedByKeySetExactly(String packageName, in KeySet ks); void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); }