OSDN Git Service

Delegate PrintServicesLoader to the framework's one
authorJason Chiu <chiujason@google.com>
Wed, 18 Jul 2018 08:39:29 +0000 (16:39 +0800)
committerJason Chiu <chiujason@google.com>
Fri, 20 Jul 2018 06:25:00 +0000 (14:25 +0800)
1. Remove the duplicated PrintServicesLoader in Settings
2. Make a androidx.loader in Settings and internally just delegate all calls to the real PrintServicesLoader
3. Get the result from the real loader

Test: manual
Fixes: 111581651
Change-Id: I2a9b3653f5c68f8383a468cd16ef5f7c3fd4bc3a

src/com/android/settings/print/PrintServiceSettingsFragment.java
src/com/android/settings/print/PrintServicesLoader.java [deleted file]
src/com/android/settings/print/PrintSettingsFragment.java
src/com/android/settings/print/SettingsPrintServicesLoader.java [new file with mode: 0644]

index 1311be0..345b4ae 100644 (file)
@@ -286,7 +286,7 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
 
     @Override
     public Loader<List<PrintServiceInfo>> onCreateLoader(int id, Bundle args) {
-        return new PrintServicesLoader(
+        return new SettingsPrintServicesLoader(
                 (PrintManager) getContext().getSystemService(Context.PRINT_SERVICE), getContext(),
                 PrintManager.ALL_SERVICES);
     }
diff --git a/src/com/android/settings/print/PrintServicesLoader.java b/src/com/android/settings/print/PrintServicesLoader.java
deleted file mode 100644 (file)
index 57cddb9..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2018 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 com.android.settings.print;
-
-import android.annotation.NonNull;
-import android.content.Context;
-import android.os.Handler;
-import android.os.Message;
-import android.print.PrintManager;
-import android.printservice.PrintServiceInfo;
-
-import com.android.internal.util.Preconditions;
-
-import java.util.List;
-
-import androidx.loader.content.Loader;
-
-/**
- * Loader for the list of print services. Can be parametrized to select a subset.
- *
- */
-public class PrintServicesLoader extends Loader<List<PrintServiceInfo>> {
-    /** What type of services to load. */
-    private final int mSelectionFlags;
-
-    /** The print manager to be used by this object */
-    private final @NonNull PrintManager mPrintManager;
-
-    /** Handler to sequentialize the delivery of the results to the main thread */
-    private final @NonNull Handler mHandler;
-
-    /** Listens for updates to the data from the platform */
-    private PrintManager.PrintServicesChangeListener mListener;
-
-    /**
-     * Create a new PrintServicesLoader.
-     *
-     * @param printManager   The print manager supplying the data
-     * @param context        Context of the using object
-     * @param selectionFlags What type of services to load.
-     */
-    public PrintServicesLoader(@NonNull PrintManager printManager, @NonNull Context context,
-            int selectionFlags) {
-        super(Preconditions.checkNotNull(context));
-        mHandler = new MyHandler();
-        mPrintManager = Preconditions.checkNotNull(printManager);
-        mSelectionFlags = Preconditions.checkFlagsArgument(selectionFlags,
-                PrintManager.ALL_SERVICES);
-    }
-
-    @Override
-    protected void onForceLoad() {
-        queueNewResult();
-    }
-
-    /**
-     * Read the print services and queue it to be delivered on the main thread.
-     */
-    private void queueNewResult() {
-        Message m = mHandler.obtainMessage(0);
-        m.obj = mPrintManager.getPrintServices(mSelectionFlags);
-        mHandler.sendMessage(m);
-    }
-
-    @Override
-    protected void onStartLoading() {
-        mListener = new PrintManager.PrintServicesChangeListener() {
-            @Override public void onPrintServicesChanged() {
-                queueNewResult();
-            }
-        };
-
-        mPrintManager.addPrintServicesChangeListener(mListener, null);
-
-        // Immediately deliver a result
-        deliverResult(mPrintManager.getPrintServices(mSelectionFlags));
-    }
-
-    @Override
-    protected void onStopLoading() {
-        if (mListener != null) {
-            mPrintManager.removePrintServicesChangeListener(mListener);
-            mListener = null;
-        }
-
-        mHandler.removeMessages(0);
-    }
-
-    @Override
-    protected void onReset() {
-        onStopLoading();
-    }
-
-    /**
-     * Handler to sequentialize all the updates to the main thread.
-     */
-    private class MyHandler extends Handler {
-        /**
-         * Create a new handler on the main thread.
-         */
-        public MyHandler() {
-            super(getContext().getMainLooper());
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            if (isStarted()) {
-                deliverResult((List<PrintServiceInfo>) msg.obj);
-            }
-        }
-    }
-}
index a6b3d7e..899acc7 100644 (file)
@@ -168,7 +168,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
             PrintManager printManager =
                     (PrintManager) getContext().getSystemService(Context.PRINT_SERVICE);
             if (printManager != null) {
-                return new PrintServicesLoader(printManager, getContext(),
+                return new SettingsPrintServicesLoader(printManager, getContext(),
                         PrintManager.ALL_SERVICES);
             } else {
                 return null;
diff --git a/src/com/android/settings/print/SettingsPrintServicesLoader.java b/src/com/android/settings/print/SettingsPrintServicesLoader.java
new file mode 100644 (file)
index 0000000..758f4d3
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2018 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 com.android.settings.print;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.print.PrintManager;
+import android.print.PrintServicesLoader;
+import android.printservice.PrintServiceInfo;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.List;
+
+import androidx.loader.content.Loader;
+
+/**
+ * Loader for the list of print services. Can be parametrized to select a subset.
+ */
+public class SettingsPrintServicesLoader extends Loader<List<PrintServiceInfo>> {
+
+    private PrintServicesLoader mLoader;
+
+    public SettingsPrintServicesLoader(@NonNull PrintManager printManager, @NonNull Context context,
+            int selectionFlags) {
+        super(Preconditions.checkNotNull(context));
+
+        mLoader = new PrintServicesLoader(printManager, context, selectionFlags) {
+            @Override
+            public void deliverResult(List<PrintServiceInfo> data) {
+                super.deliverResult(data);
+
+                // deliver the result to outer Loader class
+                SettingsPrintServicesLoader.this.deliverResult(data);
+            }
+        };
+    }
+
+    @Override
+    protected void onForceLoad() {
+        mLoader.forceLoad();
+    }
+
+    @Override
+    protected void onStartLoading() {
+        mLoader.startLoading();
+    }
+
+    @Override
+    protected void onStopLoading() {
+        mLoader.stopLoading();
+    }
+
+    @Override
+    protected boolean onCancelLoad() {
+        return mLoader.cancelLoad();
+    }
+
+    @Override
+    protected void onAbandon() {
+        mLoader.abandon();
+    }
+
+    @Override
+    protected void onReset() {
+        mLoader.reset();
+    }
+}