187a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge/*
287a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge * Copyright (C) 2012 The Android Open Source Project
387a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge *
487a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge * Licensed under the Apache License, Version 2.0 (the "License");
587a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge * you may not use this file except in compliance with the License.
687a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge * You may obtain a copy of the License at
787a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge *
887a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge *      http://www.apache.org/licenses/LICENSE-2.0
987a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge *
1087a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge * Unless required by applicable law or agreed to in writing, software
1187a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge * distributed under the License is distributed on an "AS IS" BASIS,
1287a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1387a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge * See the License for the specific language governing permissions and
1487a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge * limitations under the License.
1587a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge */
1687a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
1787a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledgepackage com.example.android.lifecycle.util;
1887a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
1987a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledgeimport java.util.*;
2087a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
2187a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledgepublic class StatusTracker {
2287a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  private Map<String, String> mStatusMap;
2387a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  private List<String> mMethodList;
2487a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  private static StatusTracker ourInstance = new StatusTracker();
2587a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  private static final String STATUS_SUFFIX = "ed";
2687a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
2787a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  public static StatusTracker getInstance() {
2887a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    return ourInstance;
2987a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  }
3087a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
3187a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  private StatusTracker() {
3287a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    mStatusMap = new LinkedHashMap<String, String>();
3387a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    mMethodList = new ArrayList<String>();
3487a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  }
3587a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
3687a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  public List<String> getMethodList() {
3787a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    return mMethodList;
3887a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  }
3987a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
4087a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  public void clear() {
4187a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    mMethodList.clear();
4287a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    mStatusMap.clear();
4387a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  }
4487a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
4587a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  /**
4687a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge   * Adds the status value for the given activityName into the Map.
4787a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge   *
4887a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge   * @param activityName
4987a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge   * @param status
5087a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge   */
5187a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  public void setStatus(String activityName, String status) {
5287a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    mMethodList.add(activityName + "." + status + "()");
5387a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    if (mStatusMap.containsKey(activityName)) mStatusMap.remove(activityName);
5487a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    mStatusMap.put(activityName, status);
5587a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  }
5687a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
5787a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  /**
5887a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge   * Gets the status value for the given activityName.
5987a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge   *
6087a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge   * @param activityName
6187a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge   * @return
6287a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge   */
6387a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  public String getStatus(String activityName) {
6487a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    String status = mStatusMap.get(activityName);
6587a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    status = status.substring(2, status.length());
6687a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
6787a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    // String manipulation to ensure the status value is spelled correctly.
6887a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    if (status.endsWith("e")) {
6987a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge      status = status.substring(0, status.length() - 1);
7087a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    }
7187a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    if (status.endsWith("p")) {
7287a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge      status = status + "p";
7387a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    }
7487a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    status = status + STATUS_SUFFIX;
7587a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    return status;
7687a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  }
7787a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge
7887a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  public Set<String> keySet() {
7987a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge    return mStatusMap.keySet();
8087a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge  }
8187a714c17c3838173c238b90e78a9e04f22a2a9aBilly Rutledge}
82