1 /* 2 * Copyright (C) 2017 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 package com.android.launcher3.widget; 17 18 import android.appwidget.AppWidgetProviderInfo; 19 import android.content.Context; 20 import android.os.Parcel; 21 import android.os.Parcelable; 22 23 import com.android.launcher3.ItemInfo; 24 import com.android.launcher3.Launcher; 25 import com.android.launcher3.LauncherAppWidgetInfo; 26 import com.android.launcher3.LauncherAppWidgetProviderInfo; 27 import com.android.launcher3.util.PendingRequestArgs; 28 29 /** 30 * Utility class to handle app widget add flow. 31 */ 32 public class WidgetAddFlowHandler implements Parcelable { 33 34 private final AppWidgetProviderInfo mProviderInfo; 35 WidgetAddFlowHandler(AppWidgetProviderInfo providerInfo)36 public WidgetAddFlowHandler(AppWidgetProviderInfo providerInfo) { 37 mProviderInfo = providerInfo; 38 } 39 WidgetAddFlowHandler(Parcel parcel)40 protected WidgetAddFlowHandler(Parcel parcel) { 41 mProviderInfo = AppWidgetProviderInfo.CREATOR.createFromParcel(parcel); 42 } 43 44 @Override describeContents()45 public int describeContents() { 46 return 0; 47 } 48 49 @Override writeToParcel(Parcel parcel, int i)50 public void writeToParcel(Parcel parcel, int i) { 51 mProviderInfo.writeToParcel(parcel, i); 52 } 53 startBindFlow(Launcher launcher, int appWidgetId, ItemInfo info, int requestCode)54 public void startBindFlow(Launcher launcher, int appWidgetId, ItemInfo info, int requestCode) { 55 launcher.setWaitingForResult(PendingRequestArgs.forWidgetInfo(appWidgetId, this, info)); 56 launcher.getAppWidgetHost() 57 .startBindFlow(launcher, appWidgetId, mProviderInfo, requestCode); 58 } 59 60 /** 61 * @see #startConfigActivity(Launcher, int, ItemInfo, int) 62 */ startConfigActivity(Launcher launcher, LauncherAppWidgetInfo info, int requestCode)63 public boolean startConfigActivity(Launcher launcher, LauncherAppWidgetInfo info, 64 int requestCode) { 65 return startConfigActivity(launcher, info.appWidgetId, info, requestCode); 66 } 67 68 /** 69 * Starts the widget configuration flow if needed. 70 * @return true if the configuration flow was started, false otherwise. 71 */ startConfigActivity(Launcher launcher, int appWidgetId, ItemInfo info, int requestCode)72 public boolean startConfigActivity(Launcher launcher, int appWidgetId, ItemInfo info, 73 int requestCode) { 74 if (!needsConfigure()) { 75 return false; 76 } 77 launcher.setWaitingForResult(PendingRequestArgs.forWidgetInfo(appWidgetId, this, info)); 78 launcher.getAppWidgetHost().startConfigActivity(launcher, appWidgetId, requestCode); 79 return true; 80 } 81 needsConfigure()82 public boolean needsConfigure() { 83 return mProviderInfo.configure != null; 84 } 85 getProviderInfo(Context context)86 public LauncherAppWidgetProviderInfo getProviderInfo(Context context) { 87 return LauncherAppWidgetProviderInfo.fromProviderInfo(context, mProviderInfo); 88 } 89 90 public static final Parcelable.Creator<WidgetAddFlowHandler> CREATOR = 91 new Parcelable.Creator<WidgetAddFlowHandler>() { 92 public WidgetAddFlowHandler createFromParcel(Parcel source) { 93 return new WidgetAddFlowHandler(source); 94 } 95 96 public WidgetAddFlowHandler[] newArray(int size) { 97 return new WidgetAddFlowHandler[size]; 98 } 99 }; 100 } 101