PrintServiceRecommendationsLoader.java revision 00c3659eca6f9ab9235e7746b6d74702ab90555b
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; 259dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannimport com.android.internal.util.Preconditions; 269dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 279dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannimport java.util.List; 289dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 299dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann/** 309dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Loader for the list of print service recommendations. 319dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * 329dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * @hide 339dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 349dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmannpublic class PrintServiceRecommendationsLoader extends Loader<List<RecommendationInfo>> { 359dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** The print manager to be used by this object */ 369dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann private final @NonNull PrintManager mPrintManager; 379dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 389dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** Handler to sequentialize the delivery of the results to the main thread */ 3900c3659eca6f9ab9235e7746b6d74702ab90555bPhilip P. Moltmann private final @NonNull Handler mHandler; 409dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 419dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** Listens for updates to the data from the platform */ 429dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann private PrintManager.PrintServiceRecommendationsChangeListener mListener; 439dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 449dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** 459dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Create a new PrintServicesLoader. 469dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * 479dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * @param printManager The print manager supplying the data 489dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * @param context Context of the using object 499dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 509dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann public PrintServiceRecommendationsLoader(@NonNull PrintManager printManager, 519dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @NonNull Context context) { 529dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann super(Preconditions.checkNotNull(context)); 539dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mHandler = new MyHandler(); 549dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mPrintManager = Preconditions.checkNotNull(printManager); 559dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 569dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 579dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 589dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann protected void onForceLoad() { 599dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann queueNewResult(); 609dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 619dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 629dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** 639dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Read the print service recommendations and queue it to be delivered on the main thread. 649dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 659dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann private void queueNewResult() { 669dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann Message m = mHandler.obtainMessage(0); 679dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann m.obj = mPrintManager.getPrintServiceRecommendations(); 689dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mHandler.sendMessage(m); 699dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 709dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 719dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 729dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann protected void onStartLoading() { 739dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mListener = new PrintManager.PrintServiceRecommendationsChangeListener() { 749dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 759dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann public void onPrintServiceRecommendationsChanged() { 769dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann queueNewResult(); 779dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 789dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann }; 799dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 809dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mPrintManager.addPrintServiceRecommendationsChangeListener(mListener); 819dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 829dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann // Immediately deliver a result 839dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann deliverResult(mPrintManager.getPrintServiceRecommendations()); 849dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 859dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 869dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 879dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann protected void onStopLoading() { 889dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann if (mListener != null) { 899dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mPrintManager.removePrintServiceRecommendationsChangeListener(mListener); 909dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann mListener = null; 919dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 929dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 9300c3659eca6f9ab9235e7746b6d74702ab90555bPhilip P. Moltmann mHandler.removeMessages(0); 949dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 959dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 969dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 979dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann protected void onReset() { 989dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann onStopLoading(); 999dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 1009dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 1019dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** 1029dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Handler to sequentialize all the updates to the main thread. 1039dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 1049dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann private class MyHandler extends Handler { 1059dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann /** 1069dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann * Create a new handler on the main thread. 1079dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann */ 1089dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann public MyHandler() { 1099dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann super(getContext().getMainLooper()); 1109dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 1119dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann 1129dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann @Override 1139dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann public void handleMessage(Message msg) { 1149dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann if (isStarted()) { 1159dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann deliverResult((List<RecommendationInfo>) msg.obj); 1169dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 1179dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 1189dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann } 1199dcb86a48d73f399fb1b5c020005d76d350eeac2Philip P. Moltmann} 120