/*
* This file provided by Facebook is for non-commercial testing and evaluation
* purposes only. Facebook reserves all rights not expressly granted.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.facebook.fresco.samples.showcase.settings;
import java.util.Arrays;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.widget.Toast;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.fresco.samples.showcase.R;
import com.facebook.fresco.samples.showcase.ShowcaseFragment;
/**
* The Fragment for settings
*/
public class SettingsFragment extends PreferenceFragmentCompat
implements SharedPreferences.OnSharedPreferenceChangeListener, ShowcaseFragment {
private static final String TAG = SettingsFragment.class.getSimpleName();
public static final String KEY_CLEAR_DISK_CACHE = "clear_disk_cache";
public static final String KEY_DEBUG_OVERLAY = "debug_overlay";
public static final String KEY_DETAILS_ANDROID_VERSION = "android_version";
public static final String KEY_DETAILS_CPU_ARCHITECTURE = "cpu_architecture";
public static final String KEY_DETAILS_DEVICE_NAME = "device_name";
/**
* The Dialog for asking the restart for the application
*/
private ShowRestartMessageDialog mShowRestartMessageDialog;
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
switch (preference.getKey()) {
case KEY_CLEAR_DISK_CACHE:
onClearDiskCachePreferenceClicked();
return true;
default:
return super.onPreferenceTreeClick(preference);
}
}
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences);
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
populateVersionAndDeviceDetails();
}
private void onClearDiskCachePreferenceClicked() {
Fresco.getImagePipeline().clearCaches();
showToastText(getString(R.string.preference_cache_clear_cache_message_success));
}
/**
* @return The reference to the Dialog for asking restart
*/
private ShowRestartMessageDialog getShowRestartMessageDialog() {
if (mShowRestartMessageDialog == null) {
mShowRestartMessageDialog = new ShowRestartMessageDialog();
}
return mShowRestartMessageDialog;
}
private void populateVersionAndDeviceDetails() {
final Preference preferenceAndroidVersion = findPreference(KEY_DETAILS_ANDROID_VERSION);
final String androidVersion = getString(
R.string.preference_details_android_version_summary,
String.valueOf(Build.VERSION.SDK_INT),
Build.VERSION.RELEASE);
preferenceAndroidVersion.setSummary(androidVersion);
final Preference preferenceCpuArchitecture = findPreference(KEY_DETAILS_CPU_ARCHITECTURE);
final String cpuArch = System.getProperty("os.arch");
final String cpuDetails;
if (Build.VERSION.SDK_INT < 21) {
cpuDetails = getString(
R.string.preference_details_cpu_architecture_summary_before_21,
cpuArch,
Build.CPU_ABI,
Build.CPU_ABI2);
} else {
cpuDetails = getString(
R.string.preference_details_cpu_architecture_summary_after_21,
cpuArch,
Arrays.toString(Build.SUPPORTED_ABIS));
}
preferenceCpuArchitecture.setSummary(cpuDetails);
final Preference preferenceDeviceName = findPreference(KEY_DETAILS_DEVICE_NAME);
final String deviceName = getString(
R.string.preference_details_device_name_summary,
Build.MANUFACTURER,
Build.DEVICE);
preferenceDeviceName.setSummary(deviceName);
}
private void showToastText(String text) {
Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show();
}
@Nullable
@Override
public String getBackstackTag() {
return TAG;
}
@Override
public int getTitleId() {
return R.string.action_settings;
}
/**
* Dialog to show when we ask to restart the application after a change
*/
public static class ShowRestartMessageDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.message_application_needs_restart)
.setPositiveButton(android.R.string.ok, null)
.setNeutralButton(R.string.message_restart_now, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.exit(0);
}
});
return builder.create();
}
}
}