blob: 570db6e44a0dd1483a52c42315e2ba15baefc3fe [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.preferences.download;
import static org.chromium.chrome.browser.preferences.download.DownloadDirectoryAdapter.NO_SELECTED_ITEM_ID;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.support.annotation.Nullable;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.download.DownloadPromptStatus;
import org.chromium.chrome.browser.preferences.ChromeSwitchPreference;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.preferences.PreferenceUtils;
import org.chromium.chrome.browser.preferences.SpinnerPreference;
/**
* Fragment to keep track of all downloads related preferences.
*/
public class DownloadPreferences
extends PreferenceFragment implements Preference.OnPreferenceChangeListener {
private static final String PREF_LOCATION_CHANGE = "location_change";
private static final String PREF_LOCATION_PROMPT_ENABLED = "location_prompt_enabled";
private SpinnerPreference mLocationChangePref;
private DownloadDirectoryAdapter mDirectoryAdapter;
private ChromeSwitchPreference mLocationPromptEnabledPref;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setTitle(R.string.menu_downloads);
PreferenceUtils.addPreferencesFromResource(this, R.xml.download_preferences);
mLocationPromptEnabledPref =
(ChromeSwitchPreference) findPreference(PREF_LOCATION_PROMPT_ENABLED);
mLocationPromptEnabledPref.setOnPreferenceChangeListener(this);
mLocationChangePref = (SpinnerPreference) findPreference(PREF_LOCATION_CHANGE);
mLocationChangePref.setOnPreferenceChangeListener(this);
mDirectoryAdapter = new DownloadDirectoryAdapter(getActivity());
int selectedItemId = mDirectoryAdapter.getSelectedItemId();
if (selectedItemId == NO_SELECTED_ITEM_ID) {
selectedItemId = mDirectoryAdapter.getFirstSelectableItemId();
}
mLocationChangePref.setAdapter(mDirectoryAdapter, selectedItemId);
updateData();
}
@Override
public void onResume() {
super.onResume();
updateData();
}
private void updateData() {
if (mLocationChangePref != null) {
mDirectoryAdapter.notifyDataSetChanged();
}
if (mLocationPromptEnabledPref != null) {
// Location prompt is marked enabled if the prompt status is not don't show.
boolean isLocationPromptEnabled =
PrefServiceBridge.getInstance().getPromptForDownloadAndroid()
!= DownloadPromptStatus.DONT_SHOW;
mLocationPromptEnabledPref.setChecked(isLocationPromptEnabled);
}
}
// Preference.OnPreferenceChangeListener implementation.
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (PREF_LOCATION_PROMPT_ENABLED.equals(preference.getKey())) {
if ((boolean) newValue) {
// Only update if the interstitial has been shown before.
if (PrefServiceBridge.getInstance().getPromptForDownloadAndroid()
!= DownloadPromptStatus.SHOW_INITIAL) {
PrefServiceBridge.getInstance().setPromptForDownloadAndroid(
DownloadPromptStatus.SHOW_PREFERENCE);
}
} else {
PrefServiceBridge.getInstance().setPromptForDownloadAndroid(
DownloadPromptStatus.DONT_SHOW);
}
} else if (PREF_LOCATION_CHANGE.equals(preference.getKey())) {
DownloadDirectoryAdapter.DirectoryOption option =
(DownloadDirectoryAdapter.DirectoryOption) newValue;
PrefServiceBridge.getInstance().setDownloadAndSaveFileDefaultDirectory(
option.getLocation().getAbsolutePath());
updateData();
}
return true;
}
}