fixed crash when calling setForeground on some special cases

This commit is contained in:
Mariotaku Lee 2015-09-01 22:42:48 +08:00
parent 8812d6f5e7
commit 5d61948d08
4 changed files with 26 additions and 5 deletions

View File

@ -90,8 +90,6 @@ I started a crowdin project, so anyone can do something for Twidere. Visit this
PayPal & AliPay: `String.format("%s@%s", "mariotaku.lee", "gmail.com");` PayPal & AliPay: `String.format("%s@%s", "mariotaku.lee", "gmail.com");`
PayPal & AliPay: `String.format("%s@%s", "pay", "uucky.me");`
Bitcoin: `1FHAVAzge7cj1LfCTMfnLL49DgA3mVUCuW` Bitcoin: `1FHAVAzge7cj1LfCTMfnLL49DgA3mVUCuW`
**Donators** **Donators**

View File

@ -14,7 +14,7 @@ android {
applicationId "org.mariotaku.twidere" applicationId "org.mariotaku.twidere"
minSdkVersion 14 minSdkVersion 14
targetSdkVersion 23 targetSdkVersion 23
versionCode 119 versionCode 120
versionName "0.3.0" versionName "0.3.0"
multiDexEnabled true multiDexEnabled true
} }

View File

@ -59,6 +59,7 @@ import android.view.View;
import android.view.View.OnLongClickListener; import android.view.View.OnLongClickListener;
import android.view.Window; import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
@ -978,8 +979,8 @@ public class ThemeUtils implements Constants {
if (contentLayout == null) { if (contentLayout == null) {
contentLayout = window.findViewById(android.R.id.content); contentLayout = window.findViewById(android.R.id.content);
} }
if (contentLayout instanceof ContentFrameLayout) { if (contentLayout instanceof FrameLayout) {
contentLayout.setForeground(overlay); ViewSupport.setForeground(contentLayout, overlay);
} }
} }

View File

@ -26,6 +26,7 @@ import android.os.Build;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
@ -111,6 +112,16 @@ public final class ViewSupport {
return null; return null;
} }
public static void setForeground(View view, Drawable foreground) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
return;
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
ViewAccessorICS.setForeground(view, foreground);
} else {
view.setForeground(foreground);
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
static class ViewAccessorJB { static class ViewAccessorJB {
static void setBackground(final View view, final Drawable background) { static void setBackground(final View view, final Drawable background) {
@ -119,6 +130,17 @@ public final class ViewSupport {
} }
} }
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
static class ViewAccessorICS {
static void setForeground(final View view, final Drawable foreground) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) return;
if (view instanceof FrameLayout) {
//noinspection RedundantCast
((FrameLayout) view).setForeground(foreground);
}
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
static class ViewAccessorJBMR2 { static class ViewAccessorJBMR2 {
static boolean isInLayout(final View view) { static boolean isInLayout(final View view) {