Merge branch 'fix-750--white-background-on-popup' into master

Fix white background on preference dialogs.

See merge request !431
This commit is contained in:
Hans-Christoph Steiner 2017-02-24 15:28:33 +01:00
commit 0ee14800c3
3 changed files with 106 additions and 6 deletions

View File

@ -0,0 +1,100 @@
/*
* *
* * This file is part of QuickLyric
* * Created by geecko
* *
* * QuickLyric is free software: you can redistribute it and/or modify
* * it under the terms of the GNU General Public License as published by
* * the Free Software Foundation, either version 3 of the License, or
* * (at your option) any later version.
* *
* * QuickLyric is distributed in the hope that it will be useful,
* * but WITHOUT ANY WARRANTY; without even the implied warranty of
* * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* * GNU General Public License for more details.
* * You should have received a copy of the GNU General Public License
* * along with QuickLyric. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.geecko.QuickLyric.view;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.PreferenceManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatDialog;
import android.util.AttributeSet;
import java.lang.reflect.Method;
public class AppCompatListPreference extends ListPreference {
private AppCompatDialog mDialog;
public AppCompatListPreference(Context context) {
super(context);
}
public AppCompatListPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public AppCompatDialog getDialog() {
return mDialog;
}
@Override
protected void showDialog(Bundle state) {
if (getEntries() == null || getEntryValues() == null) {
throw new IllegalStateException(
"ListPreference requires an entries array and an entryValues array.");
}
int preselect = findIndexOfValue(getValue());
AlertDialog.Builder builder = new AlertDialog.Builder(getContext())
.setTitle(getDialogTitle())
.setIcon(getDialogIcon())
.setSingleChoiceItems(getEntries(), preselect, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which >= 0 && getEntryValues() != null) {
String value = getEntryValues()[which].toString();
if (callChangeListener(value) && isPersistent()) {
setValue(value);
}
}
dialog.dismiss();
}
});
PreferenceManager pm = getPreferenceManager();
try {
Method method = pm.getClass().getDeclaredMethod(
"registerOnActivityDestroyListener",
PreferenceManager.OnActivityDestroyListener.class);
method.setAccessible(true);
method.invoke(pm, this);
} catch (Exception e) {
e.printStackTrace();
}
mDialog = builder.create();
if (state != null) {
mDialog.onRestoreInstanceState(state);
}
mDialog.show();
}
@Override
public void onActivityDestroy() {
super.onActivityDestroy();
if (mDialog != null && mDialog.isShowing() &&
mDialog.getWindow() != null && mDialog.getWindow().getWindowManager() != null) {
mDialog.dismiss();
}
}
}

View File

@ -22,13 +22,13 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v4.app.NavUtils; import android.support.v4.app.NavUtils;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import org.fdroid.fdroid.views.fragments.PreferencesFragment; import org.fdroid.fdroid.views.fragments.PreferencesFragment;
public class PreferencesActivity extends ActionBarActivity { public class PreferencesActivity extends AppCompatActivity {
public static final int RESULT_RESTART = 4; public static final int RESULT_RESTART = 4;

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/updates"> <PreferenceCategory android:title="@string/updates">
<ListPreference android:title="@string/update_interval" <com.geecko.QuickLyric.view.AppCompatListPreference android:title="@string/update_interval"
android:key="updateInterval" android:key="updateInterval"
android:defaultValue="24" android:defaultValue="24"
android:entries="@array/updateIntervalNames" android:entries="@array/updateIntervalNames"
@ -24,12 +24,12 @@
android:title="@string/update_history" /> android:title="@string/update_history" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/display"> <PreferenceCategory android:title="@string/display">
<ListPreference android:title="@string/pref_language" <com.geecko.QuickLyric.view.AppCompatListPreference android:title="@string/pref_language"
android:key="language" android:key="language"
android:defaultValue="" android:defaultValue=""
android:entries="@array/languageNames" android:entries="@array/languageNames"
android:entryValues="@array/languageValues" /> android:entryValues="@array/languageValues" />
<ListPreference android:title="@string/theme" <com.geecko.QuickLyric.view.AppCompatListPreference android:title="@string/theme"
android:key="theme" android:key="theme"
android:defaultValue="light" android:defaultValue="light"
android:entries="@array/themeNames" android:entries="@array/themeNames"
@ -77,7 +77,7 @@
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/other" <PreferenceCategory android:title="@string/other"
android:key="pref_category_other"> android:key="pref_category_other">
<ListPreference android:title="@string/cache_downloaded" <com.geecko.QuickLyric.view.AppCompatListPreference android:title="@string/cache_downloaded"
android:key="keepCacheFor" android:key="keepCacheFor"
android:defaultValue="86400000" android:defaultValue="86400000"
android:entries="@array/keepCacheNames" android:entries="@array/keepCacheNames"