package com.kenny.openimgur.fragments;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.RingtonePreference;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.webkit.WebView;
import com.kenny.openimgur.BuildConfig;
import com.kenny.openimgur.R;
import com.kenny.openimgur.activities.SettingsActivity;
import com.kenny.openimgur.classes.ImgurTheme;
import com.kenny.openimgur.classes.VideoCache;
import com.kenny.openimgur.util.DBContracts;
import com.kenny.openimgur.util.FabricUtil;
import com.kenny.openimgur.util.FileUtil;
import com.kenny.openimgur.util.ImageUtil;
import com.kenny.openimgur.util.LogUtil;
import com.kenny.openimgur.util.SqlHelper;
import java.io.File;
import java.lang.ref.WeakReference;
public class SettingsFragment extends BasePreferenceFragment implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
public static SettingsFragment createInstance() {
return new SettingsFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bindListPreference(findPreference(SettingsActivity.KEY_CACHE_SIZE));
bindListPreference(findPreference(SettingsActivity.KEY_CACHE_LOC));
bindListPreference(findPreference(SettingsActivity.KEY_THUMBNAIL_QUALITY));
bindListPreference(findPreference(SettingsActivity.KEY_NOTIFICATION_FREQUENCY));
findPreference(SettingsActivity.KEY_CURRENT_CACHE_SIZE).setOnPreferenceClickListener(this);
findPreference("licenses").setOnPreferenceClickListener(this);
findPreference("openSource").setOnPreferenceClickListener(this);
findPreference("redditHistory").setOnPreferenceClickListener(this);
findPreference("mySubreddits").setOnPreferenceClickListener(this);
findPreference("gallerySearchHistory").setOnPreferenceClickListener(this);
findPreference("experimentalSettings").setOnPreferenceClickListener(this);
findPreference(SettingsActivity.KEY_ADB).setOnPreferenceChangeListener(this);
findPreference(SettingsActivity.KEY_DARK_THEME).setOnPreferenceChangeListener(this);
findPreference(SettingsActivity.KEY_NOTIFICATION_RINGTONE).setOnPreferenceChangeListener(this);
findPreference(SettingsActivity.KEY_THEME_NEW).setOnPreferenceChangeListener(this);
findPreference("privacyPolicy").setOnPreferenceClickListener(this);
if (!FabricUtil.hasFabricAvailable()) {
((PreferenceCategory) findPreference("developerSettings")).removePreference(findPreference(SettingsActivity.KEY_CRASHLYTICS));
}
}
@Override
public void onResume() {
super.onResume();
long cacheSize = ImageUtil.getTotalImageCacheSize(mApp);
findPreference(SettingsActivity.KEY_CURRENT_CACHE_SIZE).setSummary(FileUtil.humanReadableByteCount(cacheSize, false));
try {
String version = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionName;
findPreference("version").setSummary(version);
} catch (PackageManager.NameNotFoundException e) {
LogUtil.e(TAG, "Unable to get version summary", e);
}
String ringtone = mApp.getPreferences().getString(SettingsActivity.KEY_NOTIFICATION_RINGTONE, null);
if (!TextUtils.isEmpty(ringtone)) {
findPreference(SettingsActivity.KEY_NOTIFICATION_RINGTONE).setSummary(getNotificationRingtone(ringtone));
}
}
@Override
public boolean onPreferenceChange(Preference preference, Object object) {
boolean updated = super.onPreferenceChange(preference, object);
String key = preference.getKey();
if (SettingsActivity.KEY_THEME_NEW.equals(key)) {
int color = (Integer) object;
boolean isDarkTheme = mApp.getImgurTheme().isDarkTheme;
ImgurTheme theme = ImgurTheme.fromPreferences(getResources(), color);
theme.isDarkTheme = isDarkTheme;
mApp.setImgurTheme(theme);
getActivity().recreate();
updated = true;
} else if (preference instanceof CheckBoxPreference) {
switch (key) {
case SettingsActivity.KEY_ADB:
// Ignore if its a debug build
if (!BuildConfig.DEBUG) {
LogUtil.SHOULD_WRITE_LOGS = (Boolean) object;
mApp.setAllowLogs((Boolean) object);
}
updated = true;
break;
case SettingsActivity.KEY_DARK_THEME:
mApp.getImgurTheme().isDarkTheme = (Boolean) object;
getActivity().recreate();
updated = true;
break;
}
} else if (preference instanceof RingtonePreference) {
preference.setSummary(getNotificationRingtone(object.toString()));
updated = true;
}
return updated;
}
@Override
public boolean onPreferenceClick(final Preference preference) {
switch (preference.getKey()) {
case SettingsActivity.KEY_CURRENT_CACHE_SIZE:
new AlertDialog.Builder(getActivity(), mApp.getImgurTheme().getAlertDialogTheme())
.setTitle(R.string.clear_cache)
.setMessage(R.string.clear_cache_message)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Snackbar.make(getActivity().findViewById(android.R.id.content), R.string.clearing_cache, Snackbar.LENGTH_LONG).show();
new DeleteCacheTask(SettingsFragment.this, null).execute();
}
}).show();
return true;
case "licenses":
WebView webView = new WebView(getActivity());
new AlertDialog.Builder(getActivity(), mApp.getImgurTheme().getAlertDialogTheme())
.setPositiveButton(R.string.dismiss, null)
.setView(webView)
.show();
webView.loadUrl("file:///android_asset/licenses.html");
return true;
case "openSource":
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/Kennyc1012/Opengur"));
if (browserIntent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivity(browserIntent);
} else {
Snackbar.make(getActivity().findViewById(android.R.id.content), R.string.cant_launch_intent, Snackbar.LENGTH_LONG).show();
}
return true;
case "redditHistory":
SqlHelper.getInstance(getActivity()).deleteFromTable(DBContracts.SubRedditContract.TABLE_NAME);
Snackbar.make(getActivity().findViewById(android.R.id.content), R.string.pref_reddit_deleted, Snackbar.LENGTH_LONG).show();
return true;
case "gallerySearchHistory":
SqlHelper.getInstance(getActivity()).deleteFromTable(DBContracts.GallerySearchContract.TABLE_NAME);
Snackbar.make(getActivity().findViewById(android.R.id.content), R.string.pref_search_deleted, Snackbar.LENGTH_LONG).show();
return true;
case "experimentalSettings":
startActivity(SettingsActivity.createIntent(getActivity(), true));
return true;
case "mySubreddits":
mApp.getPreferences().edit().remove(RedditFragment.KEY_PINNED_SUBREDDITS).apply();
Snackbar.make(getActivity().findViewById(android.R.id.content), R.string.pref_reddit_deleted, Snackbar.LENGTH_LONG).show();
return true;
case "privacyPolicy":
Intent privacyIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/Kennyc1012/Opengur/blob/master/Privacy_Policy.md"));
if (privacyIntent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivity(privacyIntent);
} else {
WebView wv = new WebView(getActivity());
new AlertDialog.Builder(getActivity(), mApp.getImgurTheme().getAlertDialogTheme())
.setPositiveButton(R.string.dismiss, null)
.setView(wv)
.show();
wv.loadUrl("https://github.com/Kennyc1012/Opengur/blob/master/Privacy_Policy.md");
}
return true;
}
return super.onPreferenceClick(preference);
}
@Nullable
private String getNotificationRingtone(String uri) {
try {
Uri ringTone = Uri.parse(uri);
return RingtoneManager.getRingtone(getActivity(), ringTone).getTitle(getActivity());
} catch (Exception ex) {
LogUtil.e(TAG, "Unable to parse ringtone", ex);
return null;
}
}
private static class DeleteCacheTask extends AsyncTask<Void, Void, Long> {
private WeakReference<SettingsFragment> mFragment;
private String mCacheDirKey;
public DeleteCacheTask(SettingsFragment fragment, String cacheDirKey) {
mFragment = new WeakReference<>(fragment);
mCacheDirKey = cacheDirKey;
}
@Override
protected Long doInBackground(Void... voids) {
SettingsFragment frag = mFragment.get();
if (frag != null) {
Activity activity = frag.getActivity();
frag.mApp.deleteAllCache();
if (!TextUtils.isEmpty(mCacheDirKey)) {
File dir = ImageUtil.getCacheDirectory(activity, mCacheDirKey);
ImageUtil.initImageLoader(activity);
VideoCache.getInstance().setCacheDirectory(dir);
}
return ImageUtil.getTotalImageCacheSize(frag.mApp);
} else {
return -1L;
}
}
@Override
protected void onPostExecute(Long cacheSize) {
SettingsFragment frag = mFragment.get();
if (frag != null) {
frag.findPreference(SettingsActivity.KEY_CURRENT_CACHE_SIZE).setSummary(FileUtil.humanReadableByteCount(cacheSize, false));
mFragment.clear();
}
}
}
@Override
protected int getPreferenceXML() {
return R.xml.settings;
}
}