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; import com.github.andlyticsproject.AsyncTasks.LoadAppListTask; import com.github.andlyticsproject.AsyncTasks.LoadAppListTaskCompleteListener; import com.github.andlyticsproject.model.AppInfo; import com.github.andlyticsproject.sync.AutosyncHandler; import com.github.andlyticsproject.util.Utils; import java.util.List; // See PreferenceActivity for warning suppression justification @SuppressWarnings("deprecation") public class AccountSpecificPreferenceActivity extends PreferenceActivity implements LoadAppListTaskCompleteListener { private AppCompatDelegate mDelegate; private String accountName; private Preference dummyApp; private CheckBoxPreference autosyncPref; private PreferenceCategory notificationAppList; private PreferenceCategory hiddenAppList; private LoadAppListTask task; private AutosyncHandler autosyncHandler = new AutosyncHandler(); @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)); accountName = getIntent().getExtras().getString(BaseActivity.EXTRA_AUTH_ACCOUNT_NAME); getSupportActionBar().setDisplayHomeAsUpEnabled(true); setTitle(accountName); PreferenceManager prefMgr = getPreferenceManager(); prefMgr.setSharedPreferencesName(Preferences.PREF); addPreferencesFromResource(R.xml.account_specific_preferences); // Setup auto sync option PreferenceCategory autoSyncCat = (PreferenceCategory) getPreferenceScreen().findPreference( "prefCatAutoSync"); autosyncPref = new CheckBoxPreference(this); autosyncPref.setPersistent(false); autosyncPref.setChecked(autosyncHandler.isAutosyncEnabled(accountName)); autosyncPref.setTitle(R.string.auto_sync); autosyncPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { autosyncHandler.setAutosyncEnabled(accountName, (Boolean) newValue); return true; } }); autoSyncCat.addPreference(autosyncPref); // Dummy app to show when loading the app list dummyApp = new Preference(this); dummyApp.setTitle(R.string.loading_app_list); // Notifications list notificationAppList = (PreferenceCategory) getPreferenceScreen().findPreference( "prefCatNotificationApps"); // Set Enabled state boolean commentsEnabled = Preferences.getNotificationPerf(this, Preferences.NOTIFICATION_CHANGES_COMMENTS); boolean ratingsEnabled = Preferences.getNotificationPerf(this, Preferences.NOTIFICATION_CHANGES_RATING); boolean downloadsEnabled = Preferences.getNotificationPerf(this, Preferences.NOTIFICATION_CHANGES_DOWNLOADS); Boolean notificationsEnabled = commentsEnabled || ratingsEnabled || downloadsEnabled; notificationAppList.addPreference(dummyApp); notificationAppList.setEnabled(notificationsEnabled); // Hidden apps list hiddenAppList = (PreferenceCategory) getPreferenceScreen().findPreference( "prefCatHiddenApps"); hiddenAppList.addPreference(dummyApp); // Load apps task = (LoadAppListTask) getLastNonConfigurationInstance(); if (task == null) { task = new LoadAppListTask(this); Utils.execute(task, accountName); } else { task.attach(this); List<AppInfo> apps = task.getResult(); if (apps != null) { onLoadAppListTaskComplete(apps); } } } @Override protected void onResume() { autosyncPref.setChecked(autosyncHandler.isAutosyncEnabled(accountName)); super.onResume(); } @Override public Object onRetainNonConfigurationInstance() { if (task != null) { task.detach(); } return (task); } @Override public void onLoadAppListTaskComplete(List<AppInfo> apps) { task.detach(); task = null; if (apps != null && apps.size() > 0) { // Clear the dummy app notificationAppList.removePreference(dummyApp); hiddenAppList.removePreference(dummyApp); for (AppInfo app : apps) { // Add the notification preference CheckBoxPreference pref = new CheckBoxPreference(this); pref.setTitle(app.getName()); pref.setSummary(app.getPackageName()); pref.setChecked(!app.isSkipNotification()); pref.setOnPreferenceChangeListener(notificationAppPrefChangedListener); notificationAppList.addPreference(pref); // Add the hidden app preference pref = new CheckBoxPreference(this); pref.setTitle(app.getName()); pref.setSummary(app.getPackageName()); pref.setChecked(app.isGhost()); pref.setOnPreferenceChangeListener(hiddenAppPrefChangedListener); hiddenAppList.addPreference(pref); } } else { dummyApp.setTitle(R.string.no_published_apps); } } OnPreferenceChangeListener notificationAppPrefChangedListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { AndlyticsApp.getInstance().getDbAdapter() .setSkipNotification((String) preference.getSummary(), !(Boolean) newValue); return true; } }; OnPreferenceChangeListener hiddenAppPrefChangedListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { AndlyticsApp.getInstance().getDbAdapter() .setGhost(accountName, (String) preference.getSummary(), (Boolean) newValue); return true; } }; @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; } }