Home | History | Annotate | Download | only in dictionarypack
      1 /**
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy
      6  * 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, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations
     14  * under the License.
     15  */
     16 
     17 package com.android.inputmethod.dictionarypack;
     18 
     19 import android.view.View;
     20 
     21 import java.util.ArrayList;
     22 import java.util.HashMap;
     23 
     24 /**
     25  * Helper class to maintain the interface state of word list preferences.
     26  *
     27  * This is necessary because the views are created on-demand by calling code. There are many
     28  * situations where views are renewed with little relation with user interaction. For example,
     29  * when scrolling, the view is reused so it doesn't keep its state, which means we need to keep
     30  * it separately. Also whenever the underlying dictionary list undergoes a change (for example,
     31  * update the metadata, or finish downloading) the whole list has to be thrown out and recreated
     32  * in case some dictionaries appeared, disappeared, changed states etc.
     33  */
     34 public class DictionaryListInterfaceState {
     35     static class State {
     36         public boolean mOpen = false;
     37         public int mStatus = MetadataDbHelper.STATUS_UNKNOWN;
     38     }
     39 
     40     private HashMap<String, State> mWordlistToState = new HashMap<>();
     41     private ArrayList<View> mViewCache = new ArrayList<>();
     42 
     43     public boolean isOpen(final String wordlistId) {
     44         final State state = mWordlistToState.get(wordlistId);
     45         if (null == state) return false;
     46         return state.mOpen;
     47     }
     48 
     49     public int getStatus(final String wordlistId) {
     50         final State state = mWordlistToState.get(wordlistId);
     51         if (null == state) return MetadataDbHelper.STATUS_UNKNOWN;
     52         return state.mStatus;
     53     }
     54 
     55     public void setOpen(final String wordlistId, final int status) {
     56         final State newState;
     57         final State state = mWordlistToState.get(wordlistId);
     58         newState = null == state ? new State() : state;
     59         newState.mOpen = true;
     60         newState.mStatus = status;
     61         mWordlistToState.put(wordlistId, newState);
     62     }
     63 
     64     public void closeAll() {
     65         for (final State state : mWordlistToState.values()) {
     66             state.mOpen = false;
     67         }
     68     }
     69 
     70     public View findFirstOrphanedView() {
     71         for (final View v : mViewCache) {
     72             if (null == v.getParent()) return v;
     73         }
     74         return null;
     75     }
     76 
     77     public View addToCacheAndReturnView(final View view) {
     78         mViewCache.add(view);
     79         return view;
     80     }
     81 
     82     public void removeFromCache(final View view) {
     83         mViewCache.remove(view);
     84     }
     85 }
     86