127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler/* 227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * Copyright (C) 2016 The Android Open Source Project 327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * 427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * except in compliance with the License. You may obtain a copy of the License at 627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * 727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * http://www.apache.org/licenses/LICENSE-2.0 827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * 927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * Unless required by applicable law or agreed to in writing, software distributed under the 1027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * KIND, either express or implied. See the License for the specific language governing 1227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * permissions and limitations under the License. 1327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler */ 1427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 1527a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerpackage com.android.egg.neko; 1627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 1727a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport android.content.Context; 1827a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport android.content.SharedPreferences; 1927a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport android.content.SharedPreferences.OnSharedPreferenceChangeListener; 2027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 2127a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport java.util.ArrayList; 2227a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport java.util.List; 2327a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport java.util.Map; 2427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 2527a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerpublic class PrefState implements OnSharedPreferenceChangeListener { 2627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 2727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler private static final String FILE_NAME = "mPrefs"; 2827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 2927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler private static final String FOOD_STATE = "food"; 3027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 3127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler private static final String CAT_KEY_PREFIX = "cat:"; 3227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 3327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler private final Context mContext; 3427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler private final SharedPreferences mPrefs; 3527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler private PrefsListener mListener; 3627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 3727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public PrefState(Context context) { 3827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mContext = context; 3927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mPrefs = mContext.getSharedPreferences(FILE_NAME, 0); 4027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 4127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 4227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler // Can also be used for renaming. 4327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void addCat(Cat cat) { 4427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mPrefs.edit() 4527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler .putString(CAT_KEY_PREFIX + String.valueOf(cat.getSeed()), cat.getName()) 46946c2b89396554b2618ea5bbaff4652f75768016Jason Monk .apply(); 4727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 4827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 4927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void removeCat(Cat cat) { 50946c2b89396554b2618ea5bbaff4652f75768016Jason Monk mPrefs.edit().remove(CAT_KEY_PREFIX + String.valueOf(cat.getSeed())).apply(); 5127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 5227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 5327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public List<Cat> getCats() { 5427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler ArrayList<Cat> cats = new ArrayList<>(); 5527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler Map<String, ?> map = mPrefs.getAll(); 5627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler for (String key : map.keySet()) { 5727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler if (key.startsWith(CAT_KEY_PREFIX)) { 5827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler long seed = Long.parseLong(key.substring(CAT_KEY_PREFIX.length())); 5927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler Cat cat = new Cat(mContext, seed); 6027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler cat.setName(String.valueOf(map.get(key))); 6127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler cats.add(cat); 6227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 6327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 6427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler return cats; 6527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 6627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 6727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public int getFoodState() { 6827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler return mPrefs.getInt(FOOD_STATE, 0); 6927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 7027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 7127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void setFoodState(int foodState) { 72946c2b89396554b2618ea5bbaff4652f75768016Jason Monk mPrefs.edit().putInt(FOOD_STATE, foodState).apply(); 7327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 7427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 7527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void setListener(PrefsListener listener) { 7627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mListener = listener; 7727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler if (mListener != null) { 7827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mPrefs.registerOnSharedPreferenceChangeListener(this); 7927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } else { 8027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mPrefs.unregisterOnSharedPreferenceChangeListener(this); 8127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 8227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 8327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 8427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler @Override 8527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 8627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mListener.onPrefsChanged(); 8727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 8827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 8927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public interface PrefsListener { 9027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler void onPrefsChanged(); 9127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 9227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler} 93