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 com.android.inputmethod.latin.utils.CollectionUtils;
     22 
     23 import java.util.ArrayList;
     24 import java.util.HashMap;
     25 
     26 /**
     27  * Helper class to maintain the interface state of word list preferences.
     28  *
     29  * This is necessary because the views are created on-demand by calling code. There are many
     30  * situations where views are renewed with little relation with user interaction. For example,
     31  * when scrolling, the view is reused so it doesn't keep its state, which means we need to keep
     32  * it separately. Also whenever the underlying dictionary list undergoes a change (for example,
     33  * update the metadata, or finish downloading) the whole list has to be thrown out and recreated
     34  * in case some dictionaries appeared, disappeared, changed states etc.
     35  */
     36 public class DictionaryListInterfaceState {
     37     private static class State {
     38         public boolean mOpen = false;
     39         public int mStatus = MetadataDbHelper.STATUS_UNKNOWN;
     40     }
     41 
     42     private HashMap<String, State> mWordlistToState = CollectionUtils.newHashMap();
     43     private ArrayList<View> mViewCache = CollectionUtils.newArrayList();
     44 
     45     public boolean isOpen(final String wordlistId) {
     46         final State state = mWordlistToState.get(wordlistId);
     47         if (null == state) return false;
     48         return state.mOpen;
     49     }
     50 
     51     public int getStatus(final String wordlistId) {
     52         final State state = mWordlistToState.get(wordlistId);
     53         if (null == state) return MetadataDbHelper.STATUS_UNKNOWN;
     54         return state.mStatus;
     55     }
     56 
     57     public void setOpen(final String wordlistId, final int status) {
     58         final State newState;
     59         final State state = mWordlistToState.get(wordlistId);
     60         newState = null == state ? new State() : state;
     61         newState.mOpen = true;
     62         newState.mStatus = status;
     63         mWordlistToState.put(wordlistId, newState);
     64     }
     65 
     66     public void closeAll() {
     67         for (final State state : mWordlistToState.values()) {
     68             state.mOpen = false;
     69         }
     70     }
     71 
     72     public View findFirstOrphanedView() {
     73         for (final View v : mViewCache) {
     74             if (null == v.getParent()) return v;
     75         }
     76         return null;
     77     }
     78 
     79     public View addToCacheAndReturnView(final View view) {
     80         mViewCache.add(view);
     81         return view;
     82     }
     83 
     84     public void removeFromCache(final View view) {
     85         mViewCache.remove(view);
     86     }
     87 }
     88