1c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme/* 2c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * Copyright (C) 2017 The Android Open Source Project 3c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * 4c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * Licensed under the Apache License, Version 2.0 (the "License"); 5c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * you may not use this file except in compliance with the License. 6c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * You may obtain a copy of the License at 7c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * 8c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * http://www.apache.org/licenses/LICENSE-2.0 9c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * 10c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * Unless required by applicable law or agreed to in writing, software 11c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * distributed under the License is distributed on an "AS IS" BASIS, 12c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * See the License for the specific language governing permissions and 14c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * limitations under the License. 15c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme */ 16c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Lemepackage com.android.server.autofill.ui; 17c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme 18c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Lemeimport android.annotation.NonNull; 19c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Lemeimport android.os.IBinder; 20c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Lemeimport android.util.DebugUtils; 21838ba3dbbd0753b3bbf7cff6232e57c488cfdf2dFelipe Lemeimport android.view.autofill.IAutoFillManagerClient; 22c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme 23c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme/** 24c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * Helper class used to handle a pending Autofill affordance such as the Save UI. 25c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * 26c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * <p>This class is not thread safe. 27c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme */ 28c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme// NOTE: this class could be an interface implemented by Session, but that would make it harder 29c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme// to move the Autofill UI logic to a different process. 30c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Lemepublic final class PendingUi { 31c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme 32c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme public static final int STATE_CREATED = 1; 33c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme public static final int STATE_PENDING = 2; 34c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme public static final int STATE_FINISHED = 4; 35c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme 36c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme private final IBinder mToken; 37c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme private int mState; 38838ba3dbbd0753b3bbf7cff6232e57c488cfdf2dFelipe Leme public final int id; 39838ba3dbbd0753b3bbf7cff6232e57c488cfdf2dFelipe Leme public final IAutoFillManagerClient client; 40c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme 41c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme /** 42c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * Default constructor. 43c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * 44c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * @param token token used to identify this pending UI. 45c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme */ 46838ba3dbbd0753b3bbf7cff6232e57c488cfdf2dFelipe Leme public PendingUi(@NonNull IBinder token, int id, @NonNull IAutoFillManagerClient client) { 47c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme mToken = token; 48c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme mState = STATE_CREATED; 49838ba3dbbd0753b3bbf7cff6232e57c488cfdf2dFelipe Leme this.id = id; 50838ba3dbbd0753b3bbf7cff6232e57c488cfdf2dFelipe Leme this.client = client; 51c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme } 52c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme 53c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme /** 54c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * Gets the token used to identify this pending UI. 55c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme */ 56c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme @NonNull 57c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme public IBinder getToken() { 58c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme return mToken; 59c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme } 60c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme 61c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme /** 62c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * Sets the current lifecycle state. 63c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme */ 64c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme public void setState(int state) { 65c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme mState = state; 66c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme } 67c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme 68c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme /** 69c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * Gets the current lifecycle state. 70c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme */ 71c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme public int getState() { 72c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme return mState; 73c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme } 74c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme 75c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme /** 76c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme * Determines whether the given token matches the token used to identify this pending UI. 77c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme */ 78c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme public boolean matches(IBinder token) { 79c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme return mToken.equals(token); 80c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme } 81c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme 82c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme @Override 83c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme public String toString() { 84838ba3dbbd0753b3bbf7cff6232e57c488cfdf2dFelipe Leme return "PendingUi: [token=" + mToken + ", id=" + id + ", state=" 85c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme + DebugUtils.flagsToString(PendingUi.class, "STATE_", mState) + "]"; 86c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme } 87c24a56ae065bfc4b21f646d0c754b5f4db7c7be5Felipe Leme} 88