1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.launcher3.widget.picker.model 18 19 import com.android.launcher3.model.data.ItemInfo 20 import com.android.launcher3.widget.model.WidgetsListBaseEntry 21 import com.android.launcher3.widget.picker.model.data.WidgetPickerData 22 import com.android.launcher3.widget.picker.model.data.WidgetPickerDataUtils.withRecommendedWidgets 23 import com.android.launcher3.widget.picker.model.data.WidgetPickerDataUtils.withWidgets 24 import java.io.PrintWriter 25 26 /** 27 * Provides [WidgetPickerData] to various views such as widget picker, app-specific widget picker, 28 * widgets shortcut. 29 */ 30 class WidgetPickerDataProvider { 31 /** All the widgets data provided for the views */ 32 private var mWidgetPickerData: WidgetPickerData = WidgetPickerData() 33 34 private var changeListener: WidgetPickerDataChangeListener? = null 35 36 /** Sets a listener to be called back when widget data is updated. */ setChangeListenernull37 fun setChangeListener(changeListener: WidgetPickerDataChangeListener?) { 38 this.changeListener = changeListener 39 } 40 41 /** Returns the current snapshot of [WidgetPickerData]. */ getnull42 fun get(): WidgetPickerData { 43 return mWidgetPickerData 44 } 45 46 /** 47 * Updates the widgets available to the widget picker. 48 * 49 * Generally called when the widgets model has new data. 50 */ 51 @JvmOverloads setWidgetsnull52 fun setWidgets( 53 allWidgets: List<WidgetsListBaseEntry>, 54 defaultWidgets: List<WidgetsListBaseEntry> = listOf() 55 ) { 56 mWidgetPickerData = 57 mWidgetPickerData.withWidgets(allWidgets = allWidgets, defaultWidgets = defaultWidgets) 58 changeListener?.onWidgetsBound() 59 } 60 61 /** 62 * Makes the widget recommendations available to the widget picker 63 * 64 * Generally called when new widget predictions are available. 65 */ setWidgetRecommendationsnull66 fun setWidgetRecommendations(recommendations: List<ItemInfo>) { 67 mWidgetPickerData = mWidgetPickerData.withRecommendedWidgets(recommendations) 68 changeListener?.onRecommendedWidgetsBound() 69 } 70 71 /** Writes the current state to the provided writer. */ dumpnull72 fun dump(prefix: String, writer: PrintWriter) { 73 writer.println(prefix + "WidgetPickerDataProvider:") 74 writer.println("$prefix\twidgetPickerData:$mWidgetPickerData") 75 } 76 77 interface WidgetPickerDataChangeListener { 78 /** A callback to get notified when widgets are bound. */ onWidgetsBoundnull79 fun onWidgetsBound() 80 81 /** A callback to get notified when recommended widgets are bound. */ 82 fun onRecommendedWidgetsBound() 83 } 84 } 85