package com.kenny.openimgur.fragments; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceScreen; import com.kenny.openimgur.R; import com.kenny.openimgur.activities.MuzeiSettingsActivity; import com.kenny.openimgur.api.ApiClient; import com.kenny.openimgur.api.responses.TopicResponse; import com.kenny.openimgur.classes.ImgurTopic; import com.kenny.openimgur.util.LogUtil; import com.kenny.openimgur.util.SqlHelper; import java.util.List; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; /** * Created by Kenny-PC on 6/21/2015. */ public class MuzeiSettingsFragment extends BasePreferenceFragment { private EditTextPreference mInputPreference; ListPreference mTopicPreference; private PreferenceScreen mScreen; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mScreen = getPreferenceScreen(); mTopicPreference = (ListPreference) findPreference(MuzeiSettingsActivity.KEY_TOPIC); mInputPreference = (EditTextPreference) findPreference(MuzeiSettingsActivity.KEY_INPUT); mInputPreference.setOnPreferenceChangeListener(this); String savedSubReddit = mApp.getPreferences().getString(MuzeiSettingsActivity.KEY_INPUT, "aww"); mInputPreference.setSummary(savedSubReddit); List<ImgurTopic> topics = SqlHelper.getInstance(getActivity()).getTopics(); if (!topics.isEmpty()) { String[] topicNames = new String[topics.size()]; String[] topicIds = new String[topics.size()]; for (int i = 0; i < topics.size(); i++) { ImgurTopic t = topics.get(i); topicNames[i] = t.getName(); topicIds[i] = String.valueOf(t.getId()); } mTopicPreference.setEntries(topicNames); mTopicPreference.setEntryValues(topicIds); } else { LogUtil.v(TAG, "No topics found, fetching"); ApiClient.getService().getDefaultTopics().enqueue(new Callback<TopicResponse>() { @Override public void onResponse(Call<TopicResponse> call, Response<TopicResponse> response) { if (!isAdded() || response == null || response.body() == null) return; TopicResponse topicResponse = response.body(); SqlHelper.getInstance(getActivity()).addTopics(topicResponse.data); if (!topicResponse.data.isEmpty()) { String[] topicNames = new String[topicResponse.data.size()]; String[] topicIds = new String[topicResponse.data.size()]; for (int i = 0; i < topicResponse.data.size(); i++) { ImgurTopic t = topicResponse.data.get(i); topicNames[i] = t.getName(); topicIds[i] = String.valueOf(t.getId()); } mTopicPreference.setEntries(topicNames); mTopicPreference.setEntryValues(topicIds); } else { LogUtil.w(TAG, "Still no topics, what do we do!"); } } @Override public void onFailure(Call<TopicResponse> call, Throwable t) { LogUtil.e(TAG, "Failed to receive topics", t); } }); } bindListPreference(findPreference(MuzeiSettingsActivity.KEY_SOURCE)); bindListPreference(findPreference(MuzeiSettingsActivity.KEY_UPDATE)); bindListPreference(mTopicPreference); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { boolean result = super.onPreferenceChange(preference, newValue); if (preference.getKey().equals(MuzeiSettingsActivity.KEY_SOURCE)) { toggleSource(newValue.toString()); } else if (preference.getKey().equals(MuzeiSettingsActivity.KEY_INPUT)) { preference.setSummary(newValue.toString()); result = true; } return result; } private void toggleSource(String source) { if (MuzeiSettingsActivity.SOURCE_REDDIT.equals(source)) { mScreen.removePreference(mTopicPreference); mScreen.addPreference(mInputPreference); } else if (MuzeiSettingsActivity.SOURCE_TOPICS.equals(source)) { mScreen.addPreference(mTopicPreference); mScreen.removePreference(mInputPreference); } else { mScreen.removePreference(mTopicPreference); mScreen.removePreference(mInputPreference); } } @Override protected int getPreferenceXML() { return R.xml.muzei_settings; } }