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

Commit 2235a177 authored by Svetoslav's avatar Svetoslav
Browse files

PrintManager should not crash if print fueature is not available.

Printing is one of the optional software features. If the device does not
have the feature, then the print APIs should do nothing. Before, a NPE
crash was happening.

bug:14651902

Change-Id: I63efa75be51e8957ca6854b2b439918f01c0f154
parent 5553295d
Loading
Loading
Loading
Loading
+53 −9
Original line number Original line Diff line number Diff line
@@ -214,6 +214,10 @@ public final class PrintManager {
     * @hide
     * @hide
     */
     */
    public PrintManager getGlobalPrintManagerForUser(int userId) {
    public PrintManager getGlobalPrintManagerForUser(int userId) {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return null;
        }
        return new PrintManager(mContext, mService, userId, APP_ID_ANY);
        return new PrintManager(mContext, mService, userId, APP_ID_ANY);
    }
    }


@@ -233,6 +237,10 @@ public final class PrintManager {
     * @hide
     * @hide
     */
     */
    public void addPrintJobStateChangeListener(PrintJobStateChangeListener listener) {
    public void addPrintJobStateChangeListener(PrintJobStateChangeListener listener) {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return;
        }
        if (mPrintJobStateChangeListeners == null) {
        if (mPrintJobStateChangeListeners == null) {
            mPrintJobStateChangeListeners = new ArrayMap<PrintJobStateChangeListener,
            mPrintJobStateChangeListeners = new ArrayMap<PrintJobStateChangeListener,
                    PrintJobStateChangeListenerWrapper>();
                    PrintJobStateChangeListenerWrapper>();
@@ -254,6 +262,10 @@ public final class PrintManager {
     * @hide
     * @hide
     */
     */
    public void removePrintJobStateChangeListener(PrintJobStateChangeListener listener) {
    public void removePrintJobStateChangeListener(PrintJobStateChangeListener listener) {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return;
        }
        if (mPrintJobStateChangeListeners == null) {
        if (mPrintJobStateChangeListeners == null) {
            return;
            return;
        }
        }
@@ -281,6 +293,10 @@ public final class PrintManager {
     * @hide
     * @hide
     */
     */
    public PrintJob getPrintJob(PrintJobId printJobId) {
    public PrintJob getPrintJob(PrintJobId printJobId) {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return null;
        }
        try {
        try {
            PrintJobInfo printJob = mService.getPrintJobInfo(printJobId, mAppId, mUserId);
            PrintJobInfo printJob = mService.getPrintJobInfo(printJobId, mAppId, mUserId);
            if (printJob != null) {
            if (printJob != null) {
@@ -299,6 +315,10 @@ public final class PrintManager {
     * @see PrintJob
     * @see PrintJob
     */
     */
    public List<PrintJob> getPrintJobs() {
    public List<PrintJob> getPrintJobs() {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return Collections.emptyList();
        }
        try {
        try {
            List<PrintJobInfo> printJobInfos = mService.getPrintJobInfos(mAppId, mUserId);
            List<PrintJobInfo> printJobInfos = mService.getPrintJobInfos(mAppId, mUserId);
            if (printJobInfos == null) {
            if (printJobInfos == null) {
@@ -317,6 +337,10 @@ public final class PrintManager {
    }
    }


    void cancelPrintJob(PrintJobId printJobId) {
    void cancelPrintJob(PrintJobId printJobId) {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return;
        }
        try {
        try {
            mService.cancelPrintJob(printJobId, mAppId, mUserId);
            mService.cancelPrintJob(printJobId, mAppId, mUserId);
        } catch (RemoteException re) {
        } catch (RemoteException re) {
@@ -325,6 +349,10 @@ public final class PrintManager {
    }
    }


    void restartPrintJob(PrintJobId printJobId) {
    void restartPrintJob(PrintJobId printJobId) {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return;
        }
        try {
        try {
            mService.restartPrintJob(printJobId, mAppId, mUserId);
            mService.restartPrintJob(printJobId, mAppId, mUserId);
        } catch (RemoteException re) {
        } catch (RemoteException re) {
@@ -383,6 +411,10 @@ public final class PrintManager {
     */
     */
    public PrintJob print(String printJobName, PrintDocumentAdapter documentAdapter,
    public PrintJob print(String printJobName, PrintDocumentAdapter documentAdapter,
            PrintAttributes attributes) {
            PrintAttributes attributes) {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return null;
        }
        if (!(mContext instanceof Activity)) {
        if (!(mContext instanceof Activity)) {
            throw new IllegalStateException("Can print only from an activity");
            throw new IllegalStateException("Can print only from an activity");
        }
        }
@@ -423,6 +455,10 @@ public final class PrintManager {
     * @hide
     * @hide
     */
     */
    public List<PrintServiceInfo> getEnabledPrintServices() {
    public List<PrintServiceInfo> getEnabledPrintServices() {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return Collections.emptyList();
        }
        try {
        try {
            List<PrintServiceInfo> enabledServices = mService.getEnabledPrintServices(mUserId);
            List<PrintServiceInfo> enabledServices = mService.getEnabledPrintServices(mUserId);
            if (enabledServices != null) {
            if (enabledServices != null) {
@@ -441,6 +477,10 @@ public final class PrintManager {
     * @hide
     * @hide
     */
     */
    public List<PrintServiceInfo> getInstalledPrintServices() {
    public List<PrintServiceInfo> getInstalledPrintServices() {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return Collections.emptyList();
        }
        try {
        try {
            List<PrintServiceInfo> installedServices = mService.getInstalledPrintServices(mUserId);
            List<PrintServiceInfo> installedServices = mService.getInstalledPrintServices(mUserId);
            if (installedServices != null) {
            if (installedServices != null) {
@@ -456,6 +496,10 @@ public final class PrintManager {
     * @hide
     * @hide
     */
     */
    public PrinterDiscoverySession createPrinterDiscoverySession() {
    public PrinterDiscoverySession createPrinterDiscoverySession() {
        if (mService == null) {
            Log.w(LOG_TAG, "Feature android.software.print not available");
            return null;
        }
        return new PrinterDiscoverySession(mService, mContext, mUserId);
        return new PrinterDiscoverySession(mService, mContext, mUserId);
    }
    }