package io.github.mthli.Ninja.Fragment;
import android.app.AlertDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.*;
import android.webkit.CookieManager;
import android.widget.*;
import io.github.mthli.Ninja.Activity.ClearActivity;
import io.github.mthli.Ninja.Activity.TokenActivity;
import io.github.mthli.Ninja.Activity.WhitelistActivity;
import io.github.mthli.Ninja.R;
import io.github.mthli.Ninja.Task.*;
import io.github.mthli.Ninja.Unit.IntentUnit;
import io.github.mthli.Ninja.View.NinjaToast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SettingFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String LICENSE_TITLE = "LICENSE_TITLE";
private static final String LICENSE_CONTENT = "LICENSE_CONTENT";
private static final String LICENSE_AUTHOR = "LICENSE_AUTHOR";
private static final String LICENSE_URL = "LICENSE_URL";
private ListPreference searchEngine;
private ListPreference notiPriority;
private ListPreference tabPosition;
private ListPreference volumeControl;
private ListPreference userAgent;
private ListPreference rendering;
private String[] seEntries;
private String[] npEntries;
private String[] tpEntries;
private String[] vcEntries;
private String[] ucEntries;
private String[] rdEntries;
private boolean spChange = false;
public boolean isSPChange() {
return spChange;
}
private boolean dbChange = false;
public boolean isDBChange() {
return dbChange;
}
public void setDBChange(boolean dbChange) {
this.dbChange = dbChange;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_setting);
}
@Override
public void onResume() {
super.onResume();
SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
sp.registerOnSharedPreferenceChangeListener(this);
String summary;
seEntries = getResources().getStringArray(R.array.setting_entries_search_engine);
searchEngine = (ListPreference) findPreference(getString(R.string.sp_search_engine));
int num = Integer.valueOf(sp.getString(getString(R.string.sp_search_engine), "0"));
if (0 <= num && num <= 4) {
summary = seEntries[num];
searchEngine.setSummary(summary);
} else {
summary = getString(R.string.setting_summary_search_engine_custom);
searchEngine.setSummary(summary);
}
npEntries = getResources().getStringArray(R.array.setting_entries_notification_priority);
summary = npEntries[Integer.valueOf(sp.getString(getString(R.string.sp_notification_priority), "0"))];
notiPriority = (ListPreference) findPreference(getString(R.string.sp_notification_priority));
notiPriority.setSummary(summary);
tpEntries = getResources().getStringArray(R.array.setting_entries_tab_position);
summary = tpEntries[Integer.valueOf(sp.getString(getString(R.string.sp_anchor), "1"))];
tabPosition = (ListPreference) findPreference(getString(R.string.sp_anchor));
tabPosition.setSummary(summary);
vcEntries = getResources().getStringArray(R.array.setting_entries_volume_control);
summary = vcEntries[Integer.valueOf(sp.getString(getString(R.string.sp_volume), "1"))];
volumeControl = (ListPreference) findPreference(getString(R.string.sp_volume));
volumeControl.setSummary(summary);
ucEntries = getResources().getStringArray(R.array.setting_entries_user_agent);
userAgent = (ListPreference) findPreference(getString(R.string.sp_user_agent));
num = Integer.valueOf(sp.getString(getString(R.string.sp_user_agent), "0"));
if (0 <= num && num <= 1) {
summary = ucEntries[num];
userAgent.setSummary(summary);
} else {
summary = getString(R.string.setting_summary_user_agent_custom);
userAgent.setSummary(summary);
}
rdEntries = getResources().getStringArray(R.array.setting_entries_rendering);
summary = rdEntries[Integer.valueOf(sp.getString(getString(R.string.sp_rendering), "0"))];
rendering = (ListPreference) findPreference(getString(R.string.sp_rendering));
rendering.setSummary(summary);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
switch (preference.getTitleRes()) {
case R.string.setting_title_whitelist:
Intent toWhitelist = new Intent(getActivity(), WhitelistActivity.class);
getActivity().startActivity(toWhitelist);
break;
case R.string.setting_title_export_whilelist:
new ExportWhitelistTask(getActivity()).execute();
break;
case R.string.setting_title_import_whilelist:
Intent importWhitelist = new Intent(Intent.ACTION_GET_CONTENT);
importWhitelist.setType(IntentUnit.INTENT_TYPE_TEXT_PLAIN);
importWhitelist.addCategory(Intent.CATEGORY_OPENABLE);
getActivity().startActivityForResult(importWhitelist, IntentUnit.REQUEST_WHITELIST);
break;
case R.string.setting_title_token:
Intent toToken = new Intent(getActivity(), TokenActivity.class);
getActivity().startActivity(toToken);
break;
case R.string.setting_title_export_bookmarks:
new ExportBookmarksTask(getActivity()).execute();
break;
case R.string.setting_title_import_bookmarks:
Intent importBookmarks = new Intent(Intent.ACTION_GET_CONTENT);
importBookmarks.setType(IntentUnit.INTENT_TYPE_TEXT_PLAIN);
importBookmarks.addCategory(Intent.CATEGORY_OPENABLE);
getActivity().startActivityForResult(importBookmarks, IntentUnit.REQUEST_BOOKMARKS);
break;
case R.string.setting_title_clear_control:
Intent clearControl = new Intent(getActivity(), ClearActivity.class);
getActivity().startActivityForResult(clearControl, IntentUnit.REQUEST_CLEAR);
break;
case R.string.setting_title_version:
NinjaToast.show(getActivity(), R.string.toast_emoji);
break;
case R.string.setting_title_license:
showLicenseDialog();
break;
case R.string.setting_title_donation:
showDonationDialog();
break;
default:
break;
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
spChange = true;
if (key.equals(getString(R.string.sp_search_engine))) {
int num = Integer.valueOf(sp.getString(key, "0"));
if (0 <= num && num <= 4) {
searchEngine.setSummary(seEntries[num]);
} else {
searchEngine.setValue("5");
searchEngine.setSummary(R.string.setting_summary_search_engine_custom);
}
} else if (key.equals(getString(R.string.sp_notification_priority))) {
String summary = npEntries[Integer.valueOf(sp.getString(key, "0"))];
notiPriority.setSummary(summary);
} else if (key.equals(getString(R.string.sp_anchor))) {
String summary = tpEntries[Integer.valueOf(sp.getString(key, "1"))];
tabPosition.setSummary(summary);
NinjaToast.show(getActivity(), R.string.toast_need_restart);
} else if (key.equals(getString(R.string.sp_volume))) {
String summary = vcEntries[Integer.valueOf(sp.getString(key, "1"))];
volumeControl.setSummary(summary);
} else if (key.equals(getString(R.string.sp_user_agent))) {
int num = Integer.valueOf(sp.getString(key, "0"));
if (0 <= num && num <= 1) {
userAgent.setSummary(ucEntries[num]);
} else {
userAgent.setValue("2");
userAgent.setSummary(R.string.setting_summary_user_agent_custom);
}
} else if (key.equals(getString(R.string.sp_rendering))) {
String summary = rdEntries[Integer.valueOf(sp.getString(key, "0"))];
rendering.setSummary(summary);
} else if (key.equals(getString(R.string.sp_cookies))) {
CookieManager manager = CookieManager.getInstance();
manager.setAcceptCookie(sp.getBoolean(getString(R.string.sp_cookies), true));
}
}
private void showLicenseDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setCancelable(true);
FrameLayout layout = (FrameLayout) getActivity().getLayoutInflater().inflate(R.layout.dialog_list, null, false);
builder.setView(layout);
List<Map<String, String>> list = new ArrayList<>();
String[] titles = getResources().getStringArray(R.array.license_titles);
String[] contents = getResources().getStringArray(R.array.license_contents);
String[] authors = getResources().getStringArray(R.array.license_authors);
String[] urls = getResources().getStringArray(R.array.license_urls);
for (int i = 0; i < 7; i++) {
Map<String, String> map = new HashMap<>();
map.put(LICENSE_TITLE, titles[i]);
map.put(LICENSE_CONTENT, contents[i]);
map.put(LICENSE_AUTHOR, authors[i]);
map.put(LICENSE_URL, urls[i]);
list.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(
getActivity(),
list,
R.layout.dialog_license_item,
new String[] {LICENSE_TITLE, LICENSE_CONTENT, LICENSE_AUTHOR, LICENSE_URL},
new int[] {R.id.dialog_license_item_title, R.id.dialog_license_item_content, R.id.dialog_license_item_author, R.id.dialog_license_item_url}
);
ListView listView = (ListView) layout.findViewById(R.id.dialog_list);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
builder.create().show();
}
private void showDonationDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setCancelable(true);
FrameLayout layout = (FrameLayout) getActivity().getLayoutInflater().inflate(R.layout.dialog_desc, null, false);
TextView textView = (TextView) layout.findViewById(R.id.dialog_desc);
textView.setText(R.string.dialog_content_donation);
builder.setView(layout);
builder.create().show();
}
}