[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