From 9572447b59ef565913307bccabad9fa0960f6c4c Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 15 Mar 2016 16:23:39 +0800 Subject: [PATCH] Add ActivityPreference --- .../ehviewer/ui/fragment/AboutFragment.java | 7 -- .../ehviewer/ui/fragment/EhFragment.java | 19 +---- .../hippo/preference/ActivityPreference.java | 81 +++++++++++++++++++ app/src/main/res/values/attrs.xml | 4 + app/src/main/res/xml/about_settings.xml | 9 ++- app/src/main/res/xml/eh_settings.xml | 5 +- 6 files changed, 94 insertions(+), 31 deletions(-) create mode 100644 app/src/main/java/com/hippo/preference/ActivityPreference.java diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java index 134ee2637..45a15de7b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java @@ -16,7 +16,6 @@ package com.hippo.ehviewer.ui.fragment; -import android.content.Intent; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; @@ -28,7 +27,6 @@ import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.UrlOpener; import com.hippo.ehviewer.ui.CommonOperations; -import com.hippo.ehviewer.ui.LicenseActivity; import com.hippo.util.ActivityHelper; public class AboutFragment extends PreferenceFragment @@ -55,7 +53,6 @@ public class AboutFragment extends PreferenceFragment Preference website = findPreference(KEY_WEBSITE); Preference source = findPreference(KEY_SOURCE); Preference changelog = findPreference(KEY_CHANGELOG); - Preference license = findPreference(KEY_LICENSE); Preference donate = findPreference(KEY_DONATE); Preference checkForUpdate = findPreference(KEY_CHECK_FOR_UPDATES); @@ -66,7 +63,6 @@ public class AboutFragment extends PreferenceFragment website.setOnPreferenceClickListener(this); source.setOnPreferenceClickListener(this); changelog.setOnPreferenceClickListener(this); - license.setOnPreferenceClickListener(this); donate.setOnPreferenceClickListener(this); checkForUpdate.setOnPreferenceClickListener(this); @@ -103,9 +99,6 @@ public class AboutFragment extends PreferenceFragment } else if (KEY_CHANGELOG.equals(key)) { UrlOpener.openUrl(getActivity(), "http://www.ehviewer.com/changlog", false, true); - } else if (KEY_LICENSE.equals(key)) { - Intent intent = new Intent(getActivity(), LicenseActivity.class); - startActivity(intent); } else if (KEY_DONATE.equals(key)) { new AlertDialog.Builder(getActivity()) .setTitle(R.string.settings_about_donate) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/EhFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/EhFragment.java index 821f52253..51fb683db 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/EhFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/EhFragment.java @@ -16,7 +16,6 @@ package com.hippo.ehviewer.ui.fragment; -import android.content.Intent; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; @@ -24,12 +23,10 @@ import android.preference.PreferenceFragment; import com.hippo.ehviewer.Constants; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; -import com.hippo.ehviewer.ui.ExcludedLanguagesActivity; import com.hippo.yorozuya.Messenger; public class EhFragment extends PreferenceFragment - implements Preference.OnPreferenceChangeListener, - Preference.OnPreferenceClickListener { + implements Preference.OnPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { @@ -37,11 +34,8 @@ public class EhFragment extends PreferenceFragment addPreferencesFromResource(R.xml.eh_settings); Preference listMode = findPreference(Settings.KEY_LIST_MODE); - Preference excludedLanguages = findPreference(Settings.KEY_EXCLUDED_LANGUAGES); listMode.setOnPreferenceChangeListener(this); - - excludedLanguages.setOnPreferenceClickListener(this); } @Override @@ -53,15 +47,4 @@ public class EhFragment extends PreferenceFragment } return true; } - - @Override - public boolean onPreferenceClick(Preference preference) { - String key = preference.getKey(); - if (Settings.KEY_EXCLUDED_LANGUAGES.equals(key)) { - Intent intent = new Intent(getActivity(), ExcludedLanguagesActivity.class); - startActivity(intent); - return true; - } - return false; - } } diff --git a/app/src/main/java/com/hippo/preference/ActivityPreference.java b/app/src/main/java/com/hippo/preference/ActivityPreference.java new file mode 100644 index 000000000..cd2887d7b --- /dev/null +++ b/app/src/main/java/com/hippo/preference/ActivityPreference.java @@ -0,0 +1,81 @@ +/* + * Copyright 2016 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.preference; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.Intent; +import android.content.res.TypedArray; +import android.os.Build; +import android.preference.Preference; +import android.util.AttributeSet; +import android.util.Log; + +import com.hippo.ehviewer.R; + +public class ActivityPreference extends Preference { + + private static final String TAG = ActivityPreference.class.getSimpleName(); + + private Class mActivityClazz; + + public ActivityPreference(Context context) { + super(context); + init(context, null, 0, 0); + } + + public ActivityPreference(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs, 0, 0); + } + + public ActivityPreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs, defStyleAttr, 0); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public ActivityPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(context, attrs, defStyleAttr, defStyleRes); + } + + private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ActivityPreference, defStyleAttr, defStyleRes); + String clazzName = a.getString(R.styleable.ActivityPreference_activity); + if (null != clazzName) { + try { + mActivityClazz = Class.forName(clazzName); + } catch (ClassNotFoundException e) { + Log.e(TAG, "Can't find class " + clazzName, e); + } + } + a.recycle(); + } + + @Override + protected void onClick() { + if (null == mActivityClazz) { + return; + } + + Context context = getContext(); + Intent intent = new Intent(context, mActivityClazz); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } +} diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 8ed764a69..023923127 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -142,4 +142,8 @@ + + + + diff --git a/app/src/main/res/xml/about_settings.xml b/app/src/main/res/xml/about_settings.xml index 8a10e7b42..a500c6010 100644 --- a/app/src/main/res/xml/about_settings.xml +++ b/app/src/main/res/xml/about_settings.xml @@ -16,7 +16,8 @@ --> + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> - + android:title="@string/settings_about_license" + app:activity="com.hippo.ehviewer.ui.LicenseActivity"/> - + android:summary="@string/settings_eh_excluded_languages_summary" + app:activity="com.hippo.ehviewer.ui.ExcludedLanguagesActivity"/>