diff options
7 files changed, 63 insertions, 76 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 2ed8f90e3c7c..8678c5ede29e 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -382,7 +382,6 @@ package android.app.admin { method public java.lang.CharSequence getDeviceOwnerOrganizationName(); method public java.util.List<java.lang.String> getPermittedAccessibilityServices(int); method public java.util.List<java.lang.String> getPermittedInputMethodsForCurrentUser(); - method public java.lang.CharSequence getPrintingDisabledReason(); method public android.content.ComponentName getProfileOwner() throws java.lang.IllegalArgumentException; method public java.lang.String getProfileOwnerNameAsUser(int) throws java.lang.IllegalArgumentException; method public int getUserProvisioningState(); diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 95e7fe059bb9..7aa6c5cfca54 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -9286,22 +9286,6 @@ public class DevicePolicyManager { } /** - * Returns error message to be displayed when printing is disabled. - * - * Used only by PrintService. - * @return Localized error message. - * @hide - */ - @SystemApi - public CharSequence getPrintingDisabledReason() { - try { - return mService.getPrintingDisabledReason(); - } catch (RemoteException re) { - throw re.rethrowFromSystemServer(); - } - } - - /** * Called by device owner to add an override APN. * * @param admin which {@link DeviceAdminReceiver} this request is associated with diff --git a/core/java/android/app/admin/DevicePolicyManagerInternal.java b/core/java/android/app/admin/DevicePolicyManagerInternal.java index 531bef014c0b..ebaf4648d80a 100644 --- a/core/java/android/app/admin/DevicePolicyManagerInternal.java +++ b/core/java/android/app/admin/DevicePolicyManagerInternal.java @@ -132,4 +132,13 @@ public abstract class DevicePolicyManagerInternal { * @param userId The user in question */ public abstract boolean canUserHaveUntrustedCredentialReset(@UserIdInt int userId); + + /** + * Return text of error message if printing is disabled. + * Called by Print Service when printing is disabled by PO or DO when printing is attempted. + * + * @param userId The user in question + * @return localized error message + */ + public abstract CharSequence getPrintingDisabledReasonForUser(@UserIdInt int userId); } diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index a5ca4cf12ffa..d4f7db6b9099 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -400,7 +400,6 @@ interface IDevicePolicyManager { void setPrintingEnabled(in ComponentName admin, boolean enabled); boolean isPrintingEnabled(); - CharSequence getPrintingDisabledReason(); List<String> setMeteredDataDisabled(in ComponentName admin, in List<String> packageNames); List<String> getMeteredDataDisabled(in ComponentName admin); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java index 886747ccb435..b312f2f439d7 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java @@ -135,11 +135,6 @@ abstract class BaseIDevicePolicyManager extends IDevicePolicyManager.Stub { } @Override - public CharSequence getPrintingDisabledReason() { - return null; - } - - @Override public List<String> setMeteredDataDisabled(ComponentName admin, List<String> packageNames) { return packageNames; } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 38e2168073ea..f8e8100df90e 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -10264,6 +10264,45 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { public boolean canUserHaveUntrustedCredentialReset(@UserIdInt int userId) { return DevicePolicyManagerService.this.canUserHaveUntrustedCredentialReset(userId); } + + @Override + public CharSequence getPrintingDisabledReasonForUser(@UserIdInt int userId) { + synchronized (DevicePolicyManagerService.this) { + DevicePolicyData policy = getUserData(userId); + if (policy.mPrintingEnabled) { + Log.e(LOG_TAG, "printing is enabled"); + return null; + } + String ownerPackage = mOwners.getProfileOwnerPackage(userId); + if (ownerPackage == null) { + ownerPackage = mOwners.getDeviceOwnerPackageName(); + } + PackageManager pm = mInjector.getPackageManager(); + PackageInfo packageInfo; + try { + packageInfo = pm.getPackageInfo(ownerPackage, 0); + } catch (NameNotFoundException e) { + Log.e(LOG_TAG, "getPackageInfo error", e); + return null; + } + if (packageInfo == null) { + Log.e(LOG_TAG, "packageInfo is inexplicably null"); + return null; + } + ApplicationInfo appInfo = packageInfo.applicationInfo; + if (appInfo == null) { + Log.e(LOG_TAG, "appInfo is inexplicably null"); + return null; + } + CharSequence appLabel = pm.getApplicationLabel(appInfo); + if (appLabel == null) { + Log.e(LOG_TAG, "appLabel is inexplicably null"); + return null; + } + return ((Context) ActivityThread.currentActivityThread().getSystemUiContext()) + .getResources().getString(R.string.printing_disabled_by, appLabel); + } + } } private Intent createShowAdminSupportIntent(ComponentName admin, int userId) { @@ -12495,55 +12534,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } - /** - * Returns text of error message if printing is disabled. - * Only to be called by Print Service. - * @hide - */ - @Override - public CharSequence getPrintingDisabledReason() { - if (!hasPrinting() || !mHasFeature) { - Log.e(LOG_TAG, "no printing or no management"); - return null; - } - synchronized (this) { - final int userHandle = mInjector.userHandleGetCallingUserId(); - DevicePolicyData policy = getUserData(userHandle); - if (policy.mPrintingEnabled) { - Log.e(LOG_TAG, "printing is enabled"); - return null; - } - String ownerPackage = mOwners.getProfileOwnerPackage(userHandle); - if (ownerPackage == null) { - ownerPackage = mOwners.getDeviceOwnerPackageName(); - } - PackageManager pm = mInjector.getPackageManager(); - PackageInfo packageInfo; - try { - packageInfo = pm.getPackageInfo(ownerPackage, 0); - } catch (NameNotFoundException e) { - Log.e(LOG_TAG, "getPackageInfo error", e); - return null; - } - if (packageInfo == null) { - Log.e(LOG_TAG, "packageInfo is inexplicably null"); - return null; - } - ApplicationInfo appInfo = packageInfo.applicationInfo; - if (appInfo == null) { - Log.e(LOG_TAG, "appInfo is inexplicably null"); - return null; - } - CharSequence appLabel = pm.getApplicationLabel(appInfo); - if (appLabel == null) { - Log.e(LOG_TAG, "appLabel is inexplicably null"); - return null; - } - return ((Context) ActivityThread.currentActivityThread().getSystemUiContext()) - .getResources().getString(R.string.printing_disabled_by, appLabel); - } - } - @Override public int addOverrideApn(@NonNull ComponentName who, @NonNull ApnSetting apnSetting) { if (!mHasFeature) { diff --git a/services/print/java/com/android/server/print/PrintManagerService.java b/services/print/java/com/android/server/print/PrintManagerService.java index 89a5fe1b82c7..d6cc80516485 100644 --- a/services/print/java/com/android/server/print/PrintManagerService.java +++ b/services/print/java/com/android/server/print/PrintManagerService.java @@ -22,6 +22,7 @@ import static android.content.pm.PackageManager.MATCH_DEBUG_TRIAGED_MISSING; import android.annotation.NonNull; import android.app.ActivityManager; import android.app.admin.DevicePolicyManager; +import android.app.admin.DevicePolicyManagerInternal; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -64,6 +65,7 @@ import com.android.internal.print.DualDumpOutputStream; import com.android.internal.util.DumpUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; +import com.android.server.LocalServices; import com.android.server.SystemService; import java.io.FileDescriptor; @@ -113,12 +115,12 @@ public final class PrintManagerService extends SystemService { private final SparseArray<UserState> mUserStates = new SparseArray<>(); - private final DevicePolicyManager mDpc; + private final DevicePolicyManager mDpm; PrintManagerImpl(Context context) { mContext = context; mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); - mDpc = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); + mDpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); registerContentObservers(); registerBroadcastReceivers(); } @@ -128,7 +130,16 @@ public final class PrintManagerService extends SystemService { PrintAttributes attributes, String packageName, int appId, int userId) { adapter = Preconditions.checkNotNull(adapter); if (!isPrintingEnabled()) { - final CharSequence disabledMessage = mDpc.getPrintingDisabledReason(); + CharSequence disabledMessage = null; + DevicePolicyManagerInternal dpmi = + LocalServices.getService(DevicePolicyManagerInternal.class); + final int callingUserId = UserHandle.getCallingUserId(); + final long identity = Binder.clearCallingIdentity(); + try { + disabledMessage = dpmi.getPrintingDisabledReasonForUser(callingUserId); + } finally { + Binder.restoreCallingIdentity(identity); + } if (disabledMessage != null) { Toast.makeText(mContext, Looper.getMainLooper(), disabledMessage, Toast.LENGTH_LONG).show(); @@ -711,7 +722,7 @@ public final class PrintManagerService extends SystemService { } private boolean isPrintingEnabled() { - return mDpc == null || mDpc.isPrintingEnabled(); + return mDpm == null || mDpm.isPrintingEnabled(); } private void dump(@NonNull DualDumpOutputStream dumpStream, |