/* * Copyright 2020 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 android.service.quickaccesswallet; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import java.io.Closeable; import java.util.concurrent.Executor; /** * Facilitates accessing cards from the {@link QuickAccessWalletService}. * * @hide */ @TestApi public interface QuickAccessWalletClient extends Closeable { /** * Create a client for accessing wallet cards from the {@link QuickAccessWalletService}. If the * service is unavailable, {@link #isWalletServiceAvailable()} will return false. */ @NonNull static QuickAccessWalletClient create(@NonNull Context context) { return create(context, null /* bgExecutor */); } /** * Create a client for accessing wallet cards from the {@link QuickAccessWalletService}. If the * service is unavailable, {@link #isWalletServiceAvailable()} will return false. * @param context Context. * @param bgExecutor A background {@link Executor} for service registration. * @hide */ @NonNull static QuickAccessWalletClient create(@NonNull Context context, @Nullable Executor bgExecutor) { return new QuickAccessWalletClientImpl(context, bgExecutor); } /** * @return true if the {@link QuickAccessWalletService} is available. This means that the * default NFC payment application has an exported service that can provide cards to the Quick * Access Wallet. However, it does not mean that (1) the call will necessarily be successful, * nor does it mean that cards may be displayed at this time. Addition checks are required: * */ boolean isWalletServiceAvailable(); /** * Wallet cards should not be displayed if: * *

* Quick Access Wallet implementers should call this method before calling * {@link #getWalletCards} to ensure that cards may be displayed. */ boolean isWalletFeatureAvailable(); /** * Wallet cards may not be displayed on the lock screen if the user has opted to hide * notifications or sensitive content on the lock screen. *

* *

* Quick Access Wallet implementers should call this method before calling * {@link #getWalletCards} if the device is currently locked. * * @return true if cards may be displayed on the lock screen. */ boolean isWalletFeatureAvailableWhenDeviceLocked(); /** * Get wallet cards from the {@link QuickAccessWalletService}. */ void getWalletCards( @NonNull GetWalletCardsRequest request, @NonNull OnWalletCardsRetrievedCallback callback); /** * Get wallet cards from the {@link QuickAccessWalletService}. */ void getWalletCards( @NonNull @CallbackExecutor Executor executor, @NonNull GetWalletCardsRequest request, @NonNull OnWalletCardsRetrievedCallback callback); /** * Callback for getWalletCards */ interface OnWalletCardsRetrievedCallback { void onWalletCardsRetrieved(@NonNull GetWalletCardsResponse response); void onWalletCardRetrievalError(@NonNull GetWalletCardsError error); } /** * Notify the {@link QuickAccessWalletService} service that a wallet card was selected. */ void selectWalletCard(@NonNull SelectWalletCardRequest request); /** * Notify the {@link QuickAccessWalletService} service that the Wallet was dismissed. */ void notifyWalletDismissed(); /** * Register an event listener. */ void addWalletServiceEventListener(@NonNull WalletServiceEventListener listener); /** * Register an event listener. */ void addWalletServiceEventListener( @NonNull @CallbackExecutor Executor executor, @NonNull WalletServiceEventListener listener); /** * Unregister an event listener */ void removeWalletServiceEventListener(@NonNull WalletServiceEventListener listener); /** * A listener for {@link WalletServiceEvent walletServiceEvents} */ interface WalletServiceEventListener { void onWalletServiceEvent(@NonNull WalletServiceEvent event); } /** * Unregister all event listeners and disconnect from the service. */ void disconnect(); /** * The QuickAccessWalletService may provide a {@link PendingIntent} to start the activity that * hosts the Wallet view. This is typically the home screen of the Wallet application. If this * method returns null, the value returned by getWalletIntent() will be used instead. */ void getWalletPendingIntent(@NonNull @CallbackExecutor Executor executor, @NonNull WalletPendingIntentCallback walletPendingIntentCallback); /** * Callback for getWalletPendingIntent. */ interface WalletPendingIntentCallback { void onWalletPendingIntentRetrieved(@Nullable PendingIntent walletPendingIntent); } /** * The manifest entry for the QuickAccessWalletService may also publish information about the * activity that hosts the Wallet view. This is typically the home screen of the Wallet * application. */ @Nullable Intent createWalletIntent(); /** * The manifest entry for the {@link QuickAccessWalletService} may publish the activity that * hosts the settings */ @Nullable Intent createWalletSettingsIntent(); /** * Returns the logo associated with the {@link QuickAccessWalletService}. This is specified by * {@code android:logo} manifest entry. If the logo is not specified, the app icon will be * returned instead ({@code android:icon}). * * @hide */ @Nullable Drawable getLogo(); /** * Returns the tile icon associated with the {@link QuickAccessWalletService}. * * @hide */ @Nullable Drawable getTileIcon(); /** * Returns the service label specified by {@code android:label} in the service manifest entry. * * @hide */ @Nullable CharSequence getServiceLabel(); /** * Returns the text specified by the {@link android:shortcutShortLabel} in the service manifest * entry. If the shortcutShortLabel isn't specified, the service label ({@code android:label}) * will be returned instead. * * @hide */ @Nullable CharSequence getShortcutShortLabel(); /** * Returns the text specified by the {@link android:shortcutLongLabel} in the service manifest * entry. If the shortcutShortLabel isn't specified, the service label ({@code android:label}) * will be returned instead. * * @hide */ @Nullable CharSequence getShortcutLongLabel(); }