1 /*
2  * Copyright (C) 2014 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.inputmethod.event;
18 
19 import com.android.inputmethod.latin.settings.SettingsValues;
20 
21 /**
22  * An object encapsulating a single transaction for input.
23  */
24 public class InputTransaction {
25     // UPDATE_LATER is stronger than UPDATE_NOW. The reason for this is, if we have to update later,
26     // it's because something will change that we can't evaluate now, which means that even if we
27     // re-evaluate now we'll have to do it again later. The only case where that wouldn't apply
28     // would be if we needed to update now to find out the new state right away, but then we
29     // can't do it with this deferred mechanism anyway.
30     public static final int SHIFT_NO_UPDATE = 0;
31     public static final int SHIFT_UPDATE_NOW = 1;
32     public static final int SHIFT_UPDATE_LATER = 2;
33 
34     // Initial conditions
35     public final SettingsValues mSettingsValues;
36     public final Event mEvent;
37     public final long mTimestamp;
38     public final int mSpaceState;
39     public final int mShiftState;
40 
41     // Outputs
42     private int mRequiredShiftUpdate = SHIFT_NO_UPDATE;
43     private boolean mRequiresUpdateSuggestions = false;
44     private boolean mDidAffectContents = false;
45     private boolean mDidAutoCorrect = false;
46 
InputTransaction(final SettingsValues settingsValues, final Event event, final long timestamp, final int spaceState, final int shiftState)47     public InputTransaction(final SettingsValues settingsValues, final Event event,
48             final long timestamp, final int spaceState, final int shiftState) {
49         mSettingsValues = settingsValues;
50         mEvent = event;
51         mTimestamp = timestamp;
52         mSpaceState = spaceState;
53         mShiftState = shiftState;
54     }
55 
56     /**
57      * Indicate that this transaction requires some type of shift update.
58      * @param updateType What type of shift update this requires.
59      */
requireShiftUpdate(final int updateType)60     public void requireShiftUpdate(final int updateType) {
61         mRequiredShiftUpdate = Math.max(mRequiredShiftUpdate, updateType);
62     }
63 
64     /**
65      * Gets what type of shift update this transaction requires.
66      * @return The shift update type.
67      */
getRequiredShiftUpdate()68     public int getRequiredShiftUpdate() {
69         return mRequiredShiftUpdate;
70     }
71 
72     /**
73      * Indicate that this transaction requires updating the suggestions.
74      */
setRequiresUpdateSuggestions()75     public void setRequiresUpdateSuggestions() {
76         mRequiresUpdateSuggestions = true;
77     }
78 
79     /**
80      * Find out whether this transaction requires updating the suggestions.
81      * @return Whether this transaction requires updating the suggestions.
82      */
requiresUpdateSuggestions()83     public boolean requiresUpdateSuggestions() {
84         return mRequiresUpdateSuggestions;
85     }
86 
87     /**
88      * Indicate that this transaction affected the contents of the editor.
89      */
setDidAffectContents()90     public void setDidAffectContents() {
91         mDidAffectContents = true;
92     }
93 
94     /**
95      * Find out whether this transaction affected contents of the editor.
96      * @return Whether this transaction affected contents of the editor.
97      */
didAffectContents()98     public boolean didAffectContents() {
99         return mDidAffectContents;
100     }
101 
102     /**
103      * Indicate that this transaction performed an auto-correction.
104      */
setDidAutoCorrect()105     public void setDidAutoCorrect() {
106         mDidAutoCorrect = true;
107     }
108 
109     /**
110      * Find out whether this transaction performed an auto-correction.
111      * @return Whether this transaction performed an auto-correction.
112      */
didAutoCorrect()113     public boolean didAutoCorrect() {
114         return mDidAutoCorrect;
115     }
116 }
117