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