/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

#include "Settings.h"
#include "Log.h"

Settings* Settings::mInstance = NULL;

Settings* Settings::Instance()
{
    if (mInstance == NULL) {
        mInstance = new Settings();
    }
    return mInstance;
}

void Settings::Finalize()
{
    delete mInstance;
    mInstance = NULL;
}


void Settings::addSetting(SettingType type, const android::String8 setting)
{
    mSettings[type] = setting;
}
const android::String8& Settings::getSetting(SettingType type)
{
    return mSettings[type];
}



