package com.github.andlyticsproject; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceActivity; import android.preference.PreferenceCategory; import android.preference.PreferenceManager; import android.support.annotation.LayoutRes; import android.support.annotation.Nullable; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatDelegate; import android.support.v7.widget.Toolbar; import android.view.MenuItem; // See PreferenceActivity for warning suppression justification @SuppressWarnings("deprecation") public class NotificationPreferenceActivity extends PreferenceActivity { private AppCompatDelegate mDelegate; private CheckBoxPreference downloadsPref; private CheckBoxPreference ratingsPref; private CheckBoxPreference commentsPref; private PreferenceCategory notificationSignalPrefCat; @Override protected void onCreate(Bundle savedInstanceState) { getDelegate().installViewFactory(); getDelegate().onCreate(savedInstanceState); super.onCreate(savedInstanceState); setContentView(R.layout.preference_activity); setSupportActionBar((Toolbar) findViewById(R.id.pref_toolbar)); findViewById(R.id.pref_toolbar).setBackgroundColor(getResources().getColor(R.color.lightBlue)); getSupportActionBar().setDisplayHomeAsUpEnabled(true); PreferenceManager prefMgr = getPreferenceManager(); prefMgr.setSharedPreferencesName(Preferences.PREF); addPreferencesFromResource(R.xml.notification_preferences); // Get a reference to the notification triggers so that we can visually disable the other // notification preferences when all the triggers are disabled // TODO: Can we do this all using one generic listener? ratingsPref = (CheckBoxPreference) getPreferenceScreen().findPreference( Preferences.NOTIFICATION_CHANGES_RATING); ratingsPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Boolean notificationsEnabled = (Boolean) newValue || commentsPref.isChecked() || downloadsPref.isChecked(); notificationSignalPrefCat.setEnabled(notificationsEnabled); return true; } }); commentsPref = (CheckBoxPreference) getPreferenceScreen().findPreference( Preferences.NOTIFICATION_CHANGES_COMMENTS); commentsPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Boolean notificationsEnabled = (Boolean) newValue || ratingsPref.isChecked() || downloadsPref.isChecked(); notificationSignalPrefCat.setEnabled(notificationsEnabled); return true; } }); downloadsPref = (CheckBoxPreference) getPreferenceScreen().findPreference( Preferences.NOTIFICATION_CHANGES_DOWNLOADS); downloadsPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { Boolean notificationsEnabled = (Boolean) newValue || ratingsPref.isChecked() || commentsPref.isChecked(); notificationSignalPrefCat.setEnabled(notificationsEnabled); return true; } }); // Notification signal notificationSignalPrefCat = (PreferenceCategory) getPreferenceScreen().findPreference( "prefCatNotificationSignal"); // Set initial enabled state based on the triggers Boolean notificationsEnabled = commentsPref.isChecked() || ratingsPref.isChecked() || downloadsPref.isChecked(); notificationSignalPrefCat.setEnabled(notificationsEnabled); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; default: return super.onOptionsItemSelected(item); } } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); getDelegate().onPostCreate(savedInstanceState); } @Override public void setContentView(@LayoutRes int layoutResID) { getDelegate().setContentView(layoutResID); } @Override protected void onPostResume() { super.onPostResume(); getDelegate().onPostResume(); } @Override protected void onStop() { super.onStop(); getDelegate().onStop(); } @Override protected void onDestroy() { super.onDestroy(); getDelegate().onDestroy(); } private void setSupportActionBar(@Nullable Toolbar toolbar) { getDelegate().setSupportActionBar(toolbar); } private ActionBar getSupportActionBar() { return getDelegate().getSupportActionBar(); } private AppCompatDelegate getDelegate() { if (mDelegate == null) { mDelegate = AppCompatDelegate.create(this, null); } return mDelegate; } }