[Android] No need for an entire new class to hack MSLP
Geoffrey Métais
git at videolan.org
Fri Apr 15 13:50:27 CEST 2016
vlc-android | branch: master | Geoffrey Métais <geoffrey.metais at gmail.com> | Fri Apr 15 13:49:29 2016 +0200| [556bbd1a9f9ad631305af063f8754177c9cbfc29] | committer: Geoffrey Métais
No need for an entire new class to hack MSLP
> https://code.videolan.org/videolan/vlc-android/commit/556bbd1a9f9ad631305af063f8754177c9cbfc29
---
.../gui/preferences/BasePreferenceFragment.java | 16 ++++--
.../hack/PreferenceFragmentCompatHack.java | 63 ----------------------
2 files changed, 13 insertions(+), 66 deletions(-)
diff --git a/vlc-android/src/org/videolan/vlc/gui/preferences/BasePreferenceFragment.java b/vlc-android/src/org/videolan/vlc/gui/preferences/BasePreferenceFragment.java
index 50dc854..bae0851 100644
--- a/vlc-android/src/org/videolan/vlc/gui/preferences/BasePreferenceFragment.java
+++ b/vlc-android/src/org/videolan/vlc/gui/preferences/BasePreferenceFragment.java
@@ -23,17 +23,22 @@
package org.videolan.vlc.gui.preferences;
+import android.os.Build;
import android.os.Bundle;
+import android.support.v14.preference.MultiSelectListPreference;
+import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import org.videolan.vlc.R;
-import org.videolan.vlc.gui.preferences.hack.PreferenceFragmentCompatHack;
+import org.videolan.vlc.gui.preferences.hack.MultiSelectListPreferenceDialogFragmentCompat;
public abstract class BasePreferenceFragment extends PreferenceFragmentCompat {
+ private static final String DIALOG_FRAGMENT_TAG = "android.support.v7.preference.PreferenceFragment.DIALOG";
+
protected abstract int getXml();
protected abstract int getTitleId();
@@ -59,8 +64,13 @@ public abstract class BasePreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onDisplayPreferenceDialog(Preference preference) {
- if (!PreferenceFragmentCompatHack.onDisplayPreferenceDialog(this, preference)) {
- super.onDisplayPreferenceDialog(preference);
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH
+ && preference instanceof MultiSelectListPreference) {
+ DialogFragment dialogFragment = MultiSelectListPreferenceDialogFragmentCompat.newInstance(preference.getKey());
+ dialogFragment.setTargetFragment(this, 0);
+ dialogFragment.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
+ return;
}
+ super.onDisplayPreferenceDialog(preference);
}
}
diff --git a/vlc-android/src/org/videolan/vlc/gui/preferences/hack/PreferenceFragmentCompatHack.java b/vlc-android/src/org/videolan/vlc/gui/preferences/hack/PreferenceFragmentCompatHack.java
deleted file mode 100644
index 920135f..0000000
--- a/vlc-android/src/org/videolan/vlc/gui/preferences/hack/PreferenceFragmentCompatHack.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * This source is part of the
- * _____ ___ ____
- * __ / / _ \/ _ | / __/___ _______ _
- * / // / , _/ __ |/ _/_/ _ \/ __/ _ `/
- * \___/_/|_/_/ |_/_/ (_)___/_/ \_, /
- * /___/
- * repository.
- *
- * Copyright (C) 2015 Carmen Alvarez (c at rmen.ca)
- *
- * 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 org.videolan.vlc.gui.preferences.hack;
-
-import android.os.Build;
-import android.support.v14.preference.MultiSelectListPreference;
-import android.support.v4.app.DialogFragment;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceFragmentCompat;
-
-public class PreferenceFragmentCompatHack {
- private static final String FRAGMENT_TAG_DIALOG = "android.support.v7.preference.PreferenceFragment.DIALOG";
-
- private PreferenceFragmentCompatHack() {
- // prevent instantiation
- }
-
- /**
- * Displays preference dialogs which aren't supported by default in PreferenceFragmentCompat.
- *
- * @return true if we managed a preference which isn't supported by default, false otherwise.
- */
- public static boolean onDisplayPreferenceDialog(PreferenceFragmentCompat preferenceFragmentCompat, Preference preference) {
- DialogFragment dialogFragment = (DialogFragment) preferenceFragmentCompat.getFragmentManager().findFragmentByTag(FRAGMENT_TAG_DIALOG);
- if (dialogFragment != null) return false;
-
- // Hack to allow a MultiSelectListPreference
- if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH
- && preference instanceof MultiSelectListPreference) {
- dialogFragment = MultiSelectListPreferenceDialogFragmentCompat.newInstance(preference.getKey());
- }
-
- // We've created our own fragment:
- if (dialogFragment != null) {
- dialogFragment.setTargetFragment(preferenceFragmentCompat, 0);
- dialogFragment.show(preferenceFragmentCompat.getFragmentManager(), FRAGMENT_TAG_DIALOG);
- return true;
- }
-
- return false;
- }
-}
More information about the Android
mailing list