/* * Copyright 2013-2015 The GDG Frisbee 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. */ package org.gdg.frisbee.android.fragment; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.google.android.gms.analytics.GoogleAnalytics; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GoogleApiAvailability; import com.google.android.gms.common.api.GoogleApiClient; import org.gdg.frisbee.android.R; import org.gdg.frisbee.android.activity.SettingsActivity; import org.gdg.frisbee.android.api.model.Chapter; import org.gdg.frisbee.android.app.GoogleApiClientFactory; import org.gdg.frisbee.android.chapter.ChapterSelectDialog; import org.gdg.frisbee.android.utils.PrefUtils; public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { private static final int RC_SIGN_IN = 101; private GoogleApiClient signInClient; private Preference.OnPreferenceChangeListener mOnAnalyticsPreferenceChange = new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { boolean analytics = (Boolean) newValue; GoogleAnalytics.getInstance(getActivity()).setAppOptOut(!analytics); return true; } }; private SharedPreferences sharedPreferences; private CheckBoxPreference prefGoogleSignIn; @Nullable private Chapter homeChapter; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); signInClient = GoogleApiClientFactory.createForSignIn((FragmentActivity) getActivity(), null); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); homeChapter = PrefUtils.getHomeChapter(getActivity()); sharedPreferences = PrefUtils.prefs(getActivity()); sharedPreferences.registerOnSharedPreferenceChangeListener(this); getPreferenceManager().setSharedPreferencesName(PrefUtils.PREF_NAME); addPreferencesFromResource(R.xml.settings); initPreferences(); } @Override public void onDestroy() { super.onDestroy(); sharedPreferences.unregisterOnSharedPreferenceChangeListener(this); } @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_simple_prefs, container, false); } private void initPreferences() { initGdgHomePreference(); initGoogleSignInPreference(); initAnalyticsPreference(); } private void initGdgHomePreference() { Preference preference = findPreference(PrefUtils.SETTINGS_HOME_GDG); if (homeChapter != null) { preference.setSummary(homeChapter.getName()); } preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { SettingsActivity activity = (SettingsActivity) getActivity(); Chapter homeChapter = PrefUtils.getHomeChapter(getActivity()); ChapterSelectDialog.newInstance(homeChapter) .show(activity.getSupportFragmentManager(), null); return true; } }); } private void initGoogleSignInPreference() { prefGoogleSignIn = (CheckBoxPreference) findPreference(PrefUtils.SETTINGS_SIGNED_IN); if (isGooglePlayServicesAvailable()) { prefGoogleSignIn.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { boolean signedIn = (Boolean) newValue; if (signedIn) { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(signInClient); startActivityForResult(signInIntent, RC_SIGN_IN); } else { Auth.GoogleSignInApi.signOut(signInClient); PrefUtils.setSignedOut(getActivity()); } return true; } }); } else { prefGoogleSignIn.setEnabled(false); } } private void initAnalyticsPreference() { CheckBoxPreference prefAnalytics = (CheckBoxPreference) findPreference(PrefUtils.SETTINGS_ANALYTICS); if (prefAnalytics != null) { prefAnalytics.setOnPreferenceChangeListener(mOnAnalyticsPreferenceChange); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { PrefUtils.setSignedIn(getActivity()); } else { prefGoogleSignIn.setChecked(false); } } } private boolean isGooglePlayServicesAvailable() { return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(getActivity()) == ConnectionResult.SUCCESS; } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (PrefUtils.SETTINGS_HOME_GDG.equals(key)) { homeChapter = PrefUtils.getHomeChapter(getActivity()); Preference preference = findPreference(key); if (homeChapter != null) { preference.setSummary(homeChapter.getName()); } } } }