package com.ianhanniballake.contractiontimer.ui;
import android.app.backup.BackupManager;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.support.v4.app.TaskStackBuilder;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.support.v7.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.ianhanniballake.contractiontimer.BuildConfig;
import com.ianhanniballake.contractiontimer.R;
import com.ianhanniballake.contractiontimer.appwidget.AppWidgetUpdateHandler;
import com.ianhanniballake.contractiontimer.notification.NotificationUpdateService;
/**
* Activity managing the various application preferences
*/
public class Preferences extends AppCompatActivity {
/**
* Analytics preference name
*/
public static final String ANALYTICS_PREFERENCE_KEY = "analytics";
/**
* Appwidget Background preference name
*/
public static final String APPWIDGET_BACKGROUND_PREFERENCE_KEY = "appwidget_background";
/**
* Average Time Frame recently changed for ContractionAverageFragment preference name
*/
public static final String AVERAGE_TIME_FRAME_CHANGED_FRAGMENT_PREFERENCE_KEY = "average_time_frame_changed_fragment";
/**
* Average Time Frame recently changed for MainActivity preference name
*/
public static final String AVERAGE_TIME_FRAME_CHANGED_MAIN_PREFERENCE_KEY = "average_time_frame_changed_main";
/**
* Average Time Frame preference name
*/
public static final String AVERAGE_TIME_FRAME_PREFERENCE_KEY = "average_time_frame";
/**
* Keep Screen On preference name
*/
public static final String KEEP_SCREEN_ON_PREFERENCE_KEY = "keepScreenOn";
/**
* Lock Portrait preference name
*/
public static final String LOCK_PORTRAIT_PREFERENCE_KEY = "lock_portrait";
/**
* Notification Enabled preference name
*/
public static final String NOTIFICATION_ENABLE_PREFERENCE_KEY = "notification_enable";
private final static String TAG = Preferences.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setHomeButtonEnabled(true);
setContentView(R.layout.activity_preferences);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
if (item.getItemId() == android.R.id.home) {
if (BuildConfig.DEBUG)
Log.d(TAG, "Preferences selected home");
Intent parentIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, parentIntent)) {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(parentIntent)
.startActivities();
} else {
NavUtils.navigateUpFromSameTask(this);
}
}
return super.onOptionsItemSelected(item);
}
public static class PreferencesFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
/**
* Reference to the ListPreference corresponding with the Appwidget background
*/
private ListPreference appwidgetBackgroundListPreference;
/**
* Reference to the ListPreference corresponding with the average time frame
*/
private ListPreference averageTimeFrameListPreference;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences_settings);
appwidgetBackgroundListPreference = (ListPreference) getPreferenceScreen().findPreference(
Preferences.APPWIDGET_BACKGROUND_PREFERENCE_KEY);
appwidgetBackgroundListPreference.setSummary(appwidgetBackgroundListPreference.getEntry());
averageTimeFrameListPreference = (ListPreference) getPreferenceScreen().findPreference(
Preferences.AVERAGE_TIME_FRAME_PREFERENCE_KEY);
averageTimeFrameListPreference.setSummary(getString(R.string.pref_average_time_frame_summary) + "\n"
+ averageTimeFrameListPreference.getEntry());
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
final boolean isLockPortrait = preferences.getBoolean(Preferences.LOCK_PORTRAIT_PREFERENCE_KEY, getResources()
.getBoolean(R.bool.pref_lock_portrait_default));
if (BuildConfig.DEBUG)
Log.d(TAG, "Lock Portrait: " + isLockPortrait);
if (isLockPortrait)
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
if (TextUtils.equals(preference.getKey(), "export")) {
FirebaseAnalytics.getInstance(getContext()).logEvent("export_open", null);
} else if (TextUtils.equals(preference.getKey(), "import")) {
FirebaseAnalytics.getInstance(getContext()).logEvent("import_open", null);
}
return super.onPreferenceTreeClick(preference);
}
@Override
public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) {
FirebaseAnalytics analytics = FirebaseAnalytics.getInstance(getContext());
Bundle bundle = new Bundle();
switch (key) {
case Preferences.KEEP_SCREEN_ON_PREFERENCE_KEY:
final boolean newIsKeepScreenOn = sharedPreferences.getBoolean(Preferences.KEEP_SCREEN_ON_PREFERENCE_KEY,
getResources().getBoolean(R.bool.pref_keep_screen_on_default));
if (BuildConfig.DEBUG)
Log.d(TAG, "Keep Screen On: " + newIsKeepScreenOn);
bundle.putString(FirebaseAnalytics.Param.VALUE, Boolean.toString(newIsKeepScreenOn));
analytics.logEvent("preference_keep_screen_on", bundle);
break;
case Preferences.LOCK_PORTRAIT_PREFERENCE_KEY:
final boolean newIsLockPortrait = sharedPreferences.getBoolean(Preferences.LOCK_PORTRAIT_PREFERENCE_KEY,
getResources().getBoolean(R.bool.pref_lock_portrait_default));
if (BuildConfig.DEBUG)
Log.d(TAG, "Lock Portrait: " + newIsLockPortrait);
bundle.putString(FirebaseAnalytics.Param.VALUE, Boolean.toString(newIsLockPortrait));
analytics.logEvent("preference_lock_portrait", bundle);
if (newIsLockPortrait)
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
break;
case Preferences.APPWIDGET_BACKGROUND_PREFERENCE_KEY:
final String newAppwidgetBackground = appwidgetBackgroundListPreference.getValue();
if (BuildConfig.DEBUG)
Log.d(TAG, "Appwidget Background: " + newAppwidgetBackground);
bundle.putString(FirebaseAnalytics.Param.VALUE, newAppwidgetBackground);
analytics.logEvent("preference_widget_background", bundle);
appwidgetBackgroundListPreference.setSummary(appwidgetBackgroundListPreference.getEntry());
AppWidgetUpdateHandler.createInstance().updateAllWidgets(getContext());
break;
case Preferences.NOTIFICATION_ENABLE_PREFERENCE_KEY:
final boolean newNotifcationEnabled = sharedPreferences.getBoolean(Preferences.LOCK_PORTRAIT_PREFERENCE_KEY,
getResources().getBoolean(R.bool.pref_notification_enable_default));
if (BuildConfig.DEBUG)
Log.d(TAG, "Notification Enabled: " + newNotifcationEnabled);
bundle.putString(FirebaseAnalytics.Param.VALUE, Boolean.toString(newNotifcationEnabled));
analytics.logEvent("preference_notification_enabled", bundle);
NotificationUpdateService.updateNotification(getContext());
break;
case Preferences.AVERAGE_TIME_FRAME_PREFERENCE_KEY:
final String newAverageTimeFrame = averageTimeFrameListPreference.getValue();
if (BuildConfig.DEBUG)
Log.d(TAG, "Average Time Frame: " + newAverageTimeFrame);
bundle.putString(FirebaseAnalytics.Param.VALUE, newAverageTimeFrame);
analytics.logEvent("preference_average_time_frame", bundle);
final SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(Preferences.AVERAGE_TIME_FRAME_CHANGED_MAIN_PREFERENCE_KEY, true);
editor.putBoolean(Preferences.AVERAGE_TIME_FRAME_CHANGED_FRAGMENT_PREFERENCE_KEY, true);
editor.commit();
averageTimeFrameListPreference.setSummary(getString(R.string.pref_average_time_frame_summary)
+ "\n" + averageTimeFrameListPreference.getEntry());
AppWidgetUpdateHandler.createInstance().updateAllWidgets(getContext());
NotificationUpdateService.updateNotification(getContext());
break;
}
new BackupManager(getContext()).dataChanged();
}
@Override
public void onStart() {
super.onStart();
FirebaseAnalytics.getInstance(getContext()).logEvent("preferences_open", null);
}
}
}