com.apptentive.android.sdk.model.Configuration.java Source code

Java tutorial

Introduction

Here is the source code for com.apptentive.android.sdk.model.Configuration.java

Source

/*
 * Copyright (c) 2014, Apptentive, Inc. All Rights Reserved.
 * Please refer to the LICENSE file for the terms and conditions
 * under which redistribution and use of this file is permitted.
 */

package com.apptentive.android.sdk.model;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import com.apptentive.android.sdk.GlobalInfo;
import com.apptentive.android.sdk.Log;
import com.apptentive.android.sdk.util.Constants;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * @author Sky Kelsey
 */
public class Configuration extends JSONObject {
    private static final String KEY_METRICS_ENABLED = "metrics_enabled";
    private static final String KEY_APP_DISPLAY_NAME = "app_display_name";
    private static final String KEY_MESSAGE_CENTER = "message_center";
    private static final String KEY_MESSAGE_CENTER_TITLE = "title";
    private static final String KEY_MESSAGE_CENTER_FG_POLL = "fg_poll";
    private static final String KEY_MESSAGE_CENTER_BG_POLL = "bg_poll";
    private static final String KEY_MESSAGE_CENTER_ENABLED = "message_center_enabled";
    private static final String KEY_MESSAGE_CENTER_EMAIL_REQUIRED = "email_required";
    private static final String KEY_HIDE_BRANDING = "hide_branding";

    // This one is not sent in JSON, but as a header form the server.
    private static final String KEY_CONFIGURATION_CACHE_EXPIRATION_MILLIS = "configuration_cache_expiration_millis";

    public Configuration() {
        super();
    }

    public Configuration(String json) throws JSONException {
        super(json);
    }

    public void save(Context context) {
        SharedPreferences prefs = context.getSharedPreferences(Constants.PREF_NAME, Context.MODE_PRIVATE);
        prefs.edit().putString(Constants.PREF_KEY_APP_CONFIG_JSON, toString()).commit();
    }

    public static Configuration load(Context context) {
        SharedPreferences prefs = context.getSharedPreferences(Constants.PREF_NAME, Context.MODE_PRIVATE);
        return Configuration.load(prefs);
    }

    public static Configuration load(SharedPreferences prefs) {
        String json = prefs.getString(Constants.PREF_KEY_APP_CONFIG_JSON, null);
        try {
            if (json != null) {
                return new Configuration(json);
            }
        } catch (JSONException e) {
            Log.e("Error loading Configuration from SharedPreferences.", e);
        }
        return new Configuration();
    }

    public boolean isMetricsEnabled() {
        try {
            if (!isNull(KEY_METRICS_ENABLED)) {
                return getBoolean(KEY_METRICS_ENABLED);
            }
        } catch (JSONException e) {
            // Ignore
        }
        return true;
    }

    public String getAppDisplayName() {
        try {
            if (!isNull(KEY_APP_DISPLAY_NAME)) {
                return getString(KEY_APP_DISPLAY_NAME);
            }
        } catch (JSONException e) {
            // Ignore
        }
        return GlobalInfo.appDisplayName;
    }

    private JSONObject getMessageCenter() {
        try {
            if (!isNull(KEY_MESSAGE_CENTER)) {
                return getJSONObject(KEY_MESSAGE_CENTER);
            }
        } catch (JSONException e) {
            // Ignore
        }
        return null;
    }

    public String getMessageCenterTitle() {
        try {
            JSONObject messageCenter = getMessageCenter();
            if (messageCenter != null) {
                if (!messageCenter.isNull(KEY_MESSAGE_CENTER_TITLE)) {
                    return messageCenter.getString(KEY_MESSAGE_CENTER_TITLE);
                }
            }
        } catch (JSONException e) {
            // Ignore
        }
        return null;
    }

    public int getMessageCenterFgPoll() {
        try {
            JSONObject messageCenter = getMessageCenter();
            if (messageCenter != null) {
                if (!messageCenter.isNull(KEY_MESSAGE_CENTER_FG_POLL)) {
                    return messageCenter.getInt(KEY_MESSAGE_CENTER_FG_POLL);
                }
            }
        } catch (JSONException e) {
            // Ignore
        }
        return Constants.CONFIG_DEFAULT_MESSAGE_CENTER_FG_POLL_SECONDS;
    }

    public int getMessageCenterBgPoll() {
        try {
            JSONObject messageCenter = getMessageCenter();
            if (messageCenter != null) {
                if (!messageCenter.isNull(KEY_MESSAGE_CENTER_BG_POLL)) {
                    return messageCenter.getInt(KEY_MESSAGE_CENTER_BG_POLL);
                }
            }
        } catch (JSONException e) {
            // Ignore
        }
        return Constants.CONFIG_DEFAULT_MESSAGE_CENTER_BG_POLL_SECONDS;
    }

    public boolean isMessageCenterEnabled(Context context) {
        try {
            if (!isNull(KEY_MESSAGE_CENTER_ENABLED)) {
                return getBoolean(KEY_MESSAGE_CENTER_ENABLED);
            }
        } catch (JSONException e) {
            // Move on.
        }

        try {
            ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(),
                    PackageManager.GET_META_DATA);
            Bundle metaData = ai.metaData;
            return metaData.getBoolean(Constants.MANIFEST_KEY_MESSAGE_CENTER_ENABLED,
                    Constants.CONFIG_DEFAULT_MESSAGE_CENTER_ENABLED);
        } catch (Exception e) {
            Log.w("Unexpected error while reading default %s manifest setting.", e,
                    Constants.MANIFEST_KEY_MESSAGE_CENTER_ENABLED);
        }

        return Constants.CONFIG_DEFAULT_MESSAGE_CENTER_ENABLED;
    }

    public boolean isMessageCenterEmailRequired(Context context) {
        try {
            JSONObject messageCenter = getMessageCenter();
            if (messageCenter != null) {
                if (!messageCenter.isNull(KEY_MESSAGE_CENTER_EMAIL_REQUIRED)) {
                    return messageCenter.getBoolean(KEY_MESSAGE_CENTER_EMAIL_REQUIRED);
                }
            }
        } catch (JSONException e) {
            // Move on.
        }

        try {
            ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(),
                    PackageManager.GET_META_DATA);
            Bundle metaData = ai.metaData;
            return metaData.getBoolean(Constants.MANIFEST_KEY_EMAIL_REQUIRED,
                    Constants.CONFIG_DEFAULT_MESSAGE_CENTER_EMAIL_REQUIRED);
        } catch (Exception e) {
            Log.w("Unexpected error while reading %s manifest setting.", e, Constants.MANIFEST_KEY_EMAIL_REQUIRED);
        }

        return Constants.CONFIG_DEFAULT_MESSAGE_CENTER_EMAIL_REQUIRED;
    }

    public boolean isHideBranding(Context context) {
        try {
            if (!isNull(KEY_HIDE_BRANDING)) {
                return getBoolean(KEY_HIDE_BRANDING);
            }
        } catch (JSONException e) {
            // Move on.
        }

        try {
            ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(),
                    PackageManager.GET_META_DATA);
            Bundle metaData = ai.metaData;
            return metaData.getBoolean(Constants.MANIFEST_KEY_INITIALLY_HIDE_BRANDING,
                    Constants.CONFIG_DEFAULT_HIDE_BRANDING);
        } catch (Exception e) {
            Log.w("Unexpected error while reading %s manifest setting.", e,
                    Constants.MANIFEST_KEY_INITIALLY_HIDE_BRANDING);
        }

        return Constants.CONFIG_DEFAULT_HIDE_BRANDING;
    }

    public long getConfigurationCacheExpirationMillis() {
        try {
            if (!isNull(KEY_CONFIGURATION_CACHE_EXPIRATION_MILLIS)) {
                return getLong(KEY_CONFIGURATION_CACHE_EXPIRATION_MILLIS);
            }
        } catch (JSONException e) {
            // Ignore
        }
        return Constants.CONFIG_DEFAULT_APP_CONFIG_EXPIRATION_MILLIS;
    }

    public void setConfigurationCacheExpirationMillis(long configurationCacheExpirationMillis) {
        try {
            put(KEY_CONFIGURATION_CACHE_EXPIRATION_MILLIS, configurationCacheExpirationMillis);
        } catch (JSONException e) {
            Log.w("Error adding %s to Configuration.", KEY_CONFIGURATION_CACHE_EXPIRATION_MILLIS);
        }
    }
}