package com.ladjzero.uzlee;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.alibaba.fastjson.JSON;
import com.ladjzero.hipda.Forum;
import com.ladjzero.hipda.User;
import com.ladjzero.uzlee.utils.Constants;
import com.ladjzero.uzlee.utils.Utils;
import com.rey.material.app.Dialog;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class ActivitySettings extends ActivityEasySlide implements SharedPreferences.OnSharedPreferenceChangeListener {
private HttpApi mHttpApi;
private LocalApi mLocalApi;
private HttpClient2 mHttpClient;
@Override
public void onCreate(Bundle savedInstanceState) {
mHttpApi = App.getInstance().getCore().getHttpApi();
mLocalApi = App.getInstance().getCore().getLocalApi();
mHttpClient = App.getInstance().getHttpClient();
super.onCreate(savedInstanceState);
setTitle("设置");
setContentView(R.layout.activity_settings);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
getFragmentManager().beginTransaction().replace(R.id.content, new SettingFragment()).commit();
this.setResult(0, new Intent());
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(Constants.PREF_KEY_SELECTED_FORUMS) || key.equals(Constants.PREF_KEY_SHOW_TYPES)) {
Intent intent = new Intent();
intent.putExtra("reload", true);
this.setResult(0, intent);
}
if (key.equals("theme")) {
String newTheme = sharedPreferences.getString("theme", DefaultTheme);
if (!newTheme.equals("night")) {
sharedPreferences.edit().putString("lastDayTheme", newTheme).commit();
}
Intent intent = new Intent();
this.setResult(0, intent);
this.reload();
}
}
@Override
public void onStart() {
super.onStart();
getSettings().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onStop() {
getSettings().unregisterOnSharedPreferenceChangeListener(this);
super.onStop();
}
public static class SettingFragment extends PreferenceFragment {
private ActivityBase mActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
mActivity = (ActivityBase) getActivity();
final SharedPreferences pref = mActivity.getSettings();
findPreference("appinfo").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
try {
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:com.ladjzero.uzlee"));
startActivity(intent);
} catch (ActivityNotFoundException e) {
Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
startActivity(intent);
}
return true;
}
});
Preference logout = findPreference("logout");
final ActivitySettings activity = (ActivitySettings) getActivity();
User me = App.getInstance().getCore().getLocalApi().getUser();
logout.setTitle(me == null || me.getId() == 0 ? "登入" : "登出");
logout.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
activity.mHttpApi.logout(new HttpClientCallback() {
@Override
public void onSuccess(String response) {
activity.mHttpClient.getCookieStore().clear();
Utils.gotoActivity(mActivity, ActivityLogin.class,
Intent.FLAG_ACTIVITY_TASK_ON_HOME |
Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK);
}
@Override
public void onFailure(String reason) {
mActivity.showToast(reason);
}
});
return false;
}
});
Preference forumsBtn = findPreference("selected_forums");
forumsBtn.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(getActivity(), ActivityForumPicker.class);
getActivity().startActivity(intent);
return false;
}
});
Preference typesBtn = findPreference(Constants.PREF_KEY_SHOW_TYPES);
typesBtn.setOnPreferenceClickListener(new TypeClickListener((ActivityBase) getActivity(), "显示分类的版块", Constants.PREF_KEY_SHOW_TYPES, R.layout.list_forum) {
@Override
public boolean onPreferenceClick(Preference preference) {
show(true);
return false;
}
@Override
public void onSelect(String summary) {
}
});
final Preference theme = findPreference("theme");
String themeStr = pref.getString("theme", DefaultTheme);
theme.setSummary(Utils.getThemeName(getActivity(), themeStr));
theme.setOnPreferenceClickListener(new ThemeClickListener((ActivityBase) getActivity(), "配色", "theme", R.layout.picker_theme) {
@Override
public void onSelect(String summary) {
// No need to reset summary. For that this activity will be reloaded.
}
@Override
public boolean onPreferenceClick(Preference preference) {
show(true);
return false;
}
});
String KEY_FONT_SIZE = "font_size";
final Preference fontSize = findPreference(KEY_FONT_SIZE);
String fontSizeStr = pref.getString(KEY_FONT_SIZE, "normal");
fontSize.setSummary(Utils.getFontSizeName(fontSizeStr));
fontSize.setOnPreferenceClickListener(new FontSizeClickListener((ActivityBase) getActivity(), "正文字体大小", KEY_FONT_SIZE, R.layout.picker_font_size) {
@Override
public void onSelect(String summary) {
fontSize.setSummary(summary);
}
@Override
public boolean onPreferenceClick(Preference preference) {
show(true);
return false;
}
});
String KEY_SORT_THREAD = "sort_thread";
final Preference threadSort = findPreference(KEY_SORT_THREAD);
String sortVal = pref.getString(KEY_SORT_THREAD, "2");
threadSort.setSummary("按照" + Utils.getSortName(sortVal) + "排序");
threadSort.setOnPreferenceClickListener(new ThreadSortClickListener((ActivityBase) getActivity(), "主题排序", KEY_SORT_THREAD, R.layout.picker_thread_sort) {
@Override
public void onSelect(String summary) {
threadSort.setSummary(summary);
}
@Override
public boolean onPreferenceClick(Preference preference) {
show(true);
return false;
}
});
int imgSize = pref.getInt(Constants.PREF_KEY_IMG_SIZE, Constants.DEFAULT_IMAGE_UPLOAD_SIZE);
final Preference imgSizePref = findPreference(Constants.PREF_KEY_IMG_SIZE);
switch (imgSize) {
case 300:
imgSizePref.setSummary("300KB");
break;
case 800:
imgSizePref.setSummary("800KB");
break;
case 1500:
imgSizePref.setSummary("1.5MB");
break;
case 3000:
imgSizePref.setSummary("3MB");
}
imgSizePref.setOnPreferenceClickListener(new ImgSizeClickListener((ActivityBase) getActivity(), "图片大小", Constants.PREF_KEY_IMG_SIZE, R.layout.picker_image_size) {
@Override
public void onSelect(String summary) {
imgSizePref.setSummary(summary);
}
@Override
public boolean onPreferenceClick(Preference preference) {
show(true);
return false;
}
});
Preference draftPref = findPreference("draft");
draftPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
String json = pref.getString("draft", "");
if (json.length() > 0) {
ActivityEdit.Draft draft = null;
try {
draft = JSON.parseObject(json, ActivityEdit.Draft.class);
} catch (Exception e) {
}
if (draft != null) {
Intent intent = new Intent(mActivity, ActivityEdit.class);
intent.putExtra("tid", draft.tid);
intent.putExtra("fid", draft.fid);
intent.putExtra("pid", draft.pid);
intent.putExtra("uid", draft.uid);
intent.putExtra("no", draft.no);
intent.putExtra("subject", draft.subject);
intent.putExtra("message", draft.message);
intent.putExtra("title", draft.activityTitle);
startActivity(intent);
}
}
return true;
}
});
Preference about = findPreference("about");
about.setTitle("关于 " + mActivity.getVersion());
about.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://ladjzero.me/uzlee/"));
startActivity(intent);
return true;
}
});
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
view.setBackgroundColor(Utils.getThemeColor(getActivity(), android.R.attr.colorBackground));
return view;
}
}
abstract static class BaseClickListener implements Preference.OnPreferenceClickListener {
Dialog dialog;
ActivityBase context;
String key;
View contentView;
String title;
int layoutId;
public BaseClickListener(ActivityBase context, String title, String key, int layoutId) {
this.key = key;
this.context = context;
this.title = title;
this.layoutId = layoutId;
initDialog();
}
private void initDialog() {
dialog = new Dialog(context);
contentView = context.getLayoutInflater().inflate(layoutId, null);
ButterKnife.bind(this, contentView);
dialog.negativeActionClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.title(title)
.titleColor(Utils.getThemeColor(context, R.attr.colorText))
.backgroundColor(Utils.getThemeColor(context, android.R.attr.colorBackground))
.negativeAction("取消")
.contentView(contentView);
}
public void show(boolean show) {
if (show) {
dialog.show();
} else {
dialog.dismiss();
}
}
public abstract void onSelect(String summary);
}
abstract static class ImgSizeClickListener extends BaseClickListener {
public ImgSizeClickListener(ActivityBase context, String title, String key, int layoutId) {
super(context, title, key, layoutId);
this.key = key;
}
@OnClick(R.id.img_small_size)
void setImageSmallSize() {
setImageSize(300);
}
@OnClick(R.id.img_middle_size)
void setImageMiddleSize() {
setImageSize(800);
}
@OnClick(R.id.img_big_size)
void setImageBigSize() {
setImageSize(1500);
}
@OnClick(R.id.img_bigger_size)
void setImageBiggerSize() {
setImageSize(3000);
}
void setImageSize(int size) {
switch (size) {
case 300:
onSelect("300KB");
break;
case 800:
onSelect("800KB");
break;
case 1500:
onSelect("1.5MB");
break;
case 3000:
onSelect("3MB");
}
context.getSettings().edit().putInt(Constants.PREF_KEY_IMG_SIZE, size).commit();
show(false);
}
}
abstract static class ThreadSortClickListener extends BaseClickListener {
public ThreadSortClickListener(ActivityBase context, String title, String key, int layoutId) {
super(context, title, key, layoutId);
this.key = key;
}
@OnClick(R.id.publish_time)
void publishTime() {
setSort("发表时间");
}
@OnClick(R.id.reply_time)
void replyTime() {
setSort("回复时间");
}
private void setSort(String sort) {
String value;
if ("发表时间".equals(sort)) {
value = "1";
} else {
value = "2";
}
context.getSettings().edit().putString(key, value).commit();
onSelect("按照" + sort + "排序");
show(false);
}
}
abstract static class FontSizeClickListener extends BaseClickListener {
public FontSizeClickListener(ActivityBase context, String title, String key, int layoutId) {
super(context, title, key, layoutId);
this.key = key;
}
@OnClick(R.id.normal)
void normal() {
setFontSize("normal");
}
@OnClick(R.id.big)
void big() {
setFontSize("big");
}
@OnClick(R.id.bigger)
void bigger() {
setFontSize("bigger");
}
public void setFontSize(String size) {
context.getSettings().edit().putString("font_size", size).commit();
onSelect(Utils.getFontSizeName(size));
show(false);
}
public abstract void onSelect(String summary);
}
static class TypeClickListener extends BaseClickListener {
public TypeClickListener(final ActivityBase context, String title, String key, int layoutId) {
super(context, title, key, layoutId);
this.key = key;
ListView listView = (ListView) contentView.findViewById(R.id.list);
List<Forum> allForums = App.getInstance().getFlattenForums();
final List<AdapterCheckableList.DataWrapper> forumsWithTypes = new ArrayList<>();
List<Integer> checked = Utils.getForumsShowingTypes(context);
for (Forum f : allForums) {
if (f.getTypes() != null) {
forumsWithTypes.add(new AdapterCheckableList.DataWrapper(checked.contains(f.getFid()), f));
}
}
listView.setAdapter(new AdapterCheckableList(context, R.layout.checkbox, forumsWithTypes));
dialog.positiveAction("确定");
dialog.negativeActionClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
show(false);
List<Integer> selected = Utils.getForumsShowingTypes(App.getInstance().getSharedPreferences());
for (AdapterCheckableList.DataWrapper d : forumsWithTypes) {
d.checked = selected.contains(((Forum) d.data).getFid());
}
}
});
dialog.positiveActionClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ArrayList<Integer> toSave = new ArrayList<Integer>();
for (AdapterCheckableList.DataWrapper d : forumsWithTypes) {
if (d.checked) {
toSave.add(((Forum) d.data).getFid());
}
}
context
.getSettings()
.edit()
.putString(Constants.PREF_KEY_SHOW_TYPES, StringUtils.join(toSave, ','))
.commit();
show(false);
}
});
}
@Override
public void onSelect(String summary) {
}
@Override
public boolean onPreferenceClick(Preference preference) {
show(true);
return false;
}
}
abstract static class ThemeClickListener extends BaseClickListener {
public ThemeClickListener(ActivityBase context, String title, String key, int layoutId) {
super(context, title, key, layoutId);
this.key = key;
}
@OnClick(R.id.red)
void red() {
setTheme("red");
}
@OnClick(R.id.carrot)
void carrot() {
setTheme("carrot");
}
@OnClick(R.id.orange)
void orange() {
setTheme("orange");
}
@OnClick(R.id.green)
void green() {
setTheme("green");
}
@OnClick(R.id.blueGrey)
void blueGrey() {
setTheme("blueGrey");
}
@OnClick(R.id.blue)
void blue() {
setTheme("blue");
}
@OnClick(R.id.purple)
void purple() {
setTheme("purple");
}
@OnClick(R.id.dark)
void dark() {
setTheme("dark");
}
@OnClick(R.id.night)
void night() {
setTheme("night");
}
private void setTheme(String themeStr) {
context.getSettings().edit().putString(key, themeStr).commit();
show(false);
}
}
}