PrintServiceRecommendationsLoader.java revision 7e01895e6972c0ebc552215b1207a519529af3fd
19dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann/* 29dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Copyright (C) 2016 The Android Open Source Project 39dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * 49dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Licensed under the Apache License, Version 2.0 (the "License"); 59dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * you may not use this file except in compliance with the License. 69dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * You may obtain a copy of the License at 79dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * 89dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * http://www.apache.org/licenses/LICENSE-2.0 99dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * 109dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Unless required by applicable law or agreed to in writing, software 119dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * distributed under the License is distributed on an "AS IS" BASIS, 129dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * See the License for the specific language governing permissions and 149dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * limitations under the License. 159dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 169dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 179dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannpackage android.print; 189dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 199dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannimport android.annotation.NonNull; 209dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannimport android.content.Context; 219dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannimport android.content.Loader; 229dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannimport android.os.Handler; 239dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannimport android.os.Message; 249dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannimport android.printservice.recommendation.RecommendationInfo; 257e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann 269dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannimport com.android.internal.util.Preconditions; 279dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 289dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannimport java.util.List; 299dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 309dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann/** 319dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Loader for the list of print service recommendations. 329dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * 339dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * @hide 349dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 359dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannpublic class PrintServiceRecommendationsLoader extends Loader<List<RecommendationInfo>> { 369dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** The print manager to be used by this object */ 379dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann private final @NonNull PrintManager mPrintManager; 389dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 399dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** Handler to sequentialize the delivery of the results to the main thread */ 4000c3659eca6f9ab9235e7746b6d74702ab90555bPhilip P. Moltmann private final @NonNull Handler mHandler; 419dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 429dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** Listens for updates to the data from the platform */ 439dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann private PrintManager.PrintServiceRecommendationsChangeListener mListener; 449dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 459dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** 469dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Create a new PrintServicesLoader. 479dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * 489dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * @param printManager The print manager supplying the data 499dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * @param context Context of the using object 509dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 519dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann public PrintServiceRecommendationsLoader(@NonNull PrintManager printManager, 529dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @NonNull Context context) { 539dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann super(Preconditions.checkNotNull(context)); 549dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mHandler = new MyHandler(); 559dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mPrintManager = Preconditions.checkNotNull(printManager); 569dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 579dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 589dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 599dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann protected void onForceLoad() { 609dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann queueNewResult(); 619dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 629dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 639dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** 649dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Read the print service recommendations and queue it to be delivered on the main thread. 659dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 669dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann private void queueNewResult() { 679dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann Message m = mHandler.obtainMessage(0); 689dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann m.obj = mPrintManager.getPrintServiceRecommendations(); 699dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mHandler.sendMessage(m); 709dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 719dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 729dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 739dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann protected void onStartLoading() { 749dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mListener = new PrintManager.PrintServiceRecommendationsChangeListener() { 759dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 769dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann public void onPrintServiceRecommendationsChanged() { 779dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann queueNewResult(); 789dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 799dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann }; 809dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 817e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann mPrintManager.addPrintServiceRecommendationsChangeListener(mListener, null); 829dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 839dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann // Immediately deliver a result 849dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann deliverResult(mPrintManager.getPrintServiceRecommendations()); 859dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 869dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 879dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 889dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann protected void onStopLoading() { 899dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann if (mListener != null) { 909dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mPrintManager.removePrintServiceRecommendationsChangeListener(mListener); 919dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mListener = null; 929dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 939dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 9400c3659eca6f9ab9235e7746b6d74702ab90555bPhilip P. Moltmann mHandler.removeMessages(0); 959dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 969dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 979dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 989dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann protected void onReset() { 999dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann onStopLoading(); 1009dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 1019dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 1029dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** 1039dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Handler to sequentialize all the updates to the main thread. 1049dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 1059dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann private class MyHandler extends Handler { 1069dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** 1079dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Create a new handler on the main thread. 1089dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 1099dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann public MyHandler() { 1109dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann super(getContext().getMainLooper()); 1119dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 1129dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 1139dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 1149dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann public void handleMessage(Message msg) { 1159dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann if (isStarted()) { 1169dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann deliverResult((List<RecommendationInfo>) msg.obj); 1179dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 1189dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 1199dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 1209dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann} 121