Defining a dark theme for launcher
> Removing the code for LIGHT_STATUS_BAR as that will be controlled by the theme > Updating icon cache to always use transparent background for low-res, as the theme can change the bg color Change-Id: Iab64ec29cab629ee515af22ec15b95d3f40a9df5
This commit is contained in:
@@ -18,6 +18,10 @@
|
||||
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<!-- Attributes used for launcher theme -->
|
||||
<attr name="allAppsScrimColor" format="color" />
|
||||
<attr name="isPrimaryColorDark" format="boolean" />
|
||||
|
||||
<!-- BubbleTextView specific attributes. -->
|
||||
<declare-styleable name="BubbleTextView">
|
||||
<attr name="layoutHorizontal" format="boolean" />
|
||||
|
||||
+16
-5
@@ -26,10 +26,23 @@
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:colorEdgeEffect">#FF757575</item>
|
||||
<item name="android:keyboardLayout">@layout/all_apps_search_container</item>
|
||||
<item name="allAppsScrimColor">#DDFFFFFF</item>
|
||||
<item name="isPrimaryColorDark">false</item>
|
||||
</style>
|
||||
|
||||
<style name="LauncherTheme" parent="@style/BaseLauncherTheme"></style>
|
||||
|
||||
<style name="LauncherThemeDark" parent="@style/LauncherTheme">
|
||||
<item name="android:textColorSecondary">#FFFFFFFF</item>
|
||||
<item name="android:textColorTertiary">#CCFFFFFF</item>
|
||||
<item name="android:textColorHint">#A0FFFFFF</item>
|
||||
|
||||
<item name="android:colorControlHighlight">#A0FFFFFF</item>
|
||||
<item name="android:colorPrimary">#FF333333</item>
|
||||
<item name="allAppsScrimColor">#33000000</item>
|
||||
<item name="isPrimaryColorDark">true</item>
|
||||
</style>
|
||||
|
||||
<!--
|
||||
Theme overrides to element on homescreen, i.e., which are drawn on top on wallpaper.
|
||||
Various foreground colors are overridden to be white so that they are properly visible on
|
||||
@@ -93,13 +106,11 @@
|
||||
</style>
|
||||
|
||||
<!-- Theme for the popup container -->
|
||||
<style name="PopupContainer" parent="@style/LauncherTheme">
|
||||
<!-- TODO: move hardcoded colors from colors.xml to this theme and use for popup items -->
|
||||
</style>
|
||||
<style name="IconOnlySystemShortcut">
|
||||
<!-- TODO: Add support for dark theme in shortcuts and widgets popup -->
|
||||
<style name="IconOnlySystemShortcut" parent="@style/LauncherTheme">
|
||||
<item name="android:tint">?android:attr/textColorHint</item>
|
||||
</style>
|
||||
<style name="IconWithTextSystemShortcut">
|
||||
<style name="IconWithTextSystemShortcut" parent="@style/LauncherTheme">
|
||||
<item name="android:backgroundTint">?android:attr/textColorTertiary</item>
|
||||
</style>
|
||||
|
||||
|
||||
@@ -542,11 +542,8 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler {
|
||||
}
|
||||
|
||||
public void setFolderLeaveBehindCell(int x, int y) {
|
||||
|
||||
DeviceProfile grid = mLauncher.getDeviceProfile();
|
||||
View child = getChildAt(x, y);
|
||||
|
||||
mFolderLeaveBehind.setup(getResources().getDisplayMetrics(), grid, null,
|
||||
mFolderLeaveBehind.setup(mLauncher, null,
|
||||
child.getMeasuredWidth(), child.getPaddingTop());
|
||||
|
||||
mFolderLeaveBehind.delegateCellX = x;
|
||||
|
||||
@@ -32,10 +32,6 @@ import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteException;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
@@ -55,7 +51,6 @@ import com.android.launcher3.util.ComponentKey;
|
||||
import com.android.launcher3.util.Preconditions;
|
||||
import com.android.launcher3.util.Provider;
|
||||
import com.android.launcher3.util.SQLiteCacheHelper;
|
||||
import com.android.launcher3.util.Themes;
|
||||
import com.android.launcher3.util.Thunk;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -100,24 +95,14 @@ public class IconCache {
|
||||
@Thunk final UserManagerCompat mUserManager;
|
||||
private final LauncherAppsCompat mLauncherApps;
|
||||
private final HashMap<ComponentKey, CacheEntry> mCache =
|
||||
new HashMap<ComponentKey, CacheEntry>(INITIAL_ICON_CACHE_CAPACITY);
|
||||
new HashMap<>(INITIAL_ICON_CACHE_CAPACITY);
|
||||
private final int mIconDpi;
|
||||
@Thunk final IconDB mIconDb;
|
||||
|
||||
@Thunk final Handler mWorkerHandler;
|
||||
|
||||
// The background color used for activity icons. Since these icons are displayed in all-apps
|
||||
// and folders, this would be same as the light quantum panel background. This color
|
||||
// is used to convert icons to RGB_565.
|
||||
private final int mActivityBgColor;
|
||||
// The background color used for package icons. These are displayed in widget tray, which
|
||||
// has a dark quantum panel background.
|
||||
private final int mPackageBgColor;
|
||||
private final BitmapFactory.Options mLowResOptions;
|
||||
|
||||
private Canvas mLowResCanvas;
|
||||
private Paint mLowResPaint;
|
||||
|
||||
public IconCache(Context context, InvariantDeviceProfile inv) {
|
||||
mContext = context;
|
||||
mPackageManager = context.getPackageManager();
|
||||
@@ -125,16 +110,11 @@ public class IconCache {
|
||||
mLauncherApps = LauncherAppsCompat.getInstance(mContext);
|
||||
mIconDpi = inv.fillResIconDpi;
|
||||
mIconDb = new IconDB(context, inv.iconBitmapSize);
|
||||
mLowResCanvas = new Canvas();
|
||||
mLowResPaint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.ANTI_ALIAS_FLAG);
|
||||
|
||||
mIconProvider = Utilities.getOverrideObject(
|
||||
IconProvider.class, context, R.string.icon_provider_class);
|
||||
mWorkerHandler = new Handler(LauncherModel.getWorkerLooper());
|
||||
|
||||
mActivityBgColor = Themes.getColorPrimary(context, R.style.LauncherTheme);
|
||||
mPackageBgColor = Themes.getColorPrimary(context, R.style.WidgetContainerTheme);
|
||||
|
||||
mLowResOptions = new BitmapFactory.Options();
|
||||
// Always prefer RGB_565 config for low res. If the bitmap has transparency, it will
|
||||
// automatically be loaded as ALPHA_8888.
|
||||
@@ -387,7 +367,7 @@ public class IconCache {
|
||||
entry.contentDescription = mUserManager.getBadgedLabelForUser(entry.title, app.getUser());
|
||||
mCache.put(key, entry);
|
||||
|
||||
Bitmap lowResIcon = generateLowResIcon(entry.icon, mActivityBgColor);
|
||||
Bitmap lowResIcon = generateLowResIcon(entry.icon);
|
||||
ContentValues values = newContentValues(entry.icon, lowResIcon, entry.title.toString(),
|
||||
app.getApplicationInfo().packageName);
|
||||
addIconToDB(values, app.getComponentName(), info, userSerial);
|
||||
@@ -637,7 +617,7 @@ public class IconCache {
|
||||
// only keep the low resolution icon instead of the larger full-sized icon
|
||||
Bitmap icon = LauncherIcons.createBadgedIconBitmap(
|
||||
appInfo.loadIcon(mPackageManager), user, mContext, appInfo.targetSdkVersion);
|
||||
Bitmap lowResIcon = generateLowResIcon(icon, mPackageBgColor);
|
||||
Bitmap lowResIcon = generateLowResIcon(icon);
|
||||
entry.title = appInfo.loadLabel(mPackageManager);
|
||||
entry.contentDescription = mUserManager.getBadgedLabelForUser(entry.title, user);
|
||||
entry.icon = useLowResIcon ? lowResIcon : icon;
|
||||
@@ -769,7 +749,7 @@ public class IconCache {
|
||||
}
|
||||
|
||||
private static final class IconDB extends SQLiteCacheHelper {
|
||||
private final static int DB_VERSION = 13;
|
||||
private final static int DB_VERSION = 14;
|
||||
|
||||
private final static int RELEASE_VERSION = DB_VERSION +
|
||||
(FeatureFlags.LAUNCHER3_DISABLE_ICON_NORMALIZATION ? 0 : 1);
|
||||
@@ -822,24 +802,10 @@ public class IconCache {
|
||||
/**
|
||||
* Generates a new low-res icon given a high-res icon.
|
||||
*/
|
||||
private Bitmap generateLowResIcon(Bitmap icon, int lowResBackgroundColor) {
|
||||
if (lowResBackgroundColor == Color.TRANSPARENT) {
|
||||
return Bitmap.createScaledBitmap(icon,
|
||||
icon.getWidth() / LOW_RES_SCALE_FACTOR,
|
||||
icon.getHeight() / LOW_RES_SCALE_FACTOR, true);
|
||||
} else {
|
||||
Bitmap lowResIcon = Bitmap.createBitmap(icon.getWidth() / LOW_RES_SCALE_FACTOR,
|
||||
icon.getHeight() / LOW_RES_SCALE_FACTOR, Bitmap.Config.RGB_565);
|
||||
synchronized (this) {
|
||||
mLowResCanvas.setBitmap(lowResIcon);
|
||||
mLowResCanvas.drawColor(lowResBackgroundColor);
|
||||
mLowResCanvas.drawBitmap(icon, new Rect(0, 0, icon.getWidth(), icon.getHeight()),
|
||||
new Rect(0, 0, lowResIcon.getWidth(), lowResIcon.getHeight()),
|
||||
mLowResPaint);
|
||||
mLowResCanvas.setBitmap(null);
|
||||
}
|
||||
return lowResIcon;
|
||||
}
|
||||
private Bitmap generateLowResIcon(Bitmap icon) {
|
||||
return Bitmap.createScaledBitmap(icon,
|
||||
icon.getWidth() / LOW_RES_SCALE_FACTOR,
|
||||
icon.getHeight() / LOW_RES_SCALE_FACTOR, true);
|
||||
}
|
||||
|
||||
private static Bitmap loadIconNoResize(Cursor c, int iconIndex, BitmapFactory.Options options) {
|
||||
|
||||
@@ -491,13 +491,6 @@ public class Launcher extends BaseActivity
|
||||
mExtractedColors.load(this);
|
||||
mHotseat.updateColor(mExtractedColors, !mPaused);
|
||||
mWorkspace.getPageIndicator().updateColor(mExtractedColors);
|
||||
boolean lightStatusBar = (FeatureFlags.LIGHT_STATUS_BAR &&
|
||||
mExtractedColors.getColor(ExtractedColors.STATUS_BAR_INDEX) ==
|
||||
ExtractedColors.DEFAULT_LIGHT);
|
||||
// It's possible that All Apps is visible when this is run,
|
||||
// so always use light status bar in that case. Only change nav bar color to status bar
|
||||
// color when All Apps is visible.
|
||||
activateLightSystemBars(lightStatusBar || isAllAppsVisible(), true, isAllAppsVisible());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -650,11 +650,11 @@ public final class Utilities {
|
||||
/**
|
||||
* @return creates a new alpha mask bitmap out of an existing bitmap
|
||||
*/
|
||||
public static Bitmap convertToAlphaMask(Bitmap b, float applyAlpha) {
|
||||
public static Bitmap convertToAlphaMask(Bitmap b, int applyAlpha) {
|
||||
Bitmap a = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ALPHA_8);
|
||||
Canvas c = new Canvas(a);
|
||||
Paint paint = new Paint();
|
||||
paint.setAlpha((int) (255f * applyAlpha));
|
||||
paint.setAlpha(applyAlpha);
|
||||
c.drawBitmap(b, 0f, 0f, paint);
|
||||
return a;
|
||||
}
|
||||
|
||||
@@ -3166,11 +3166,8 @@ public class Workspace extends PagedView
|
||||
this.cellX = cellX;
|
||||
this.cellY = cellY;
|
||||
|
||||
DeviceProfile grid = mLauncher.getDeviceProfile();
|
||||
BubbleTextView cell = (BubbleTextView) layout.getChildAt(cellX, cellY);
|
||||
|
||||
bg.setup(getResources().getDisplayMetrics(), grid, null,
|
||||
cell.getMeasuredWidth(), cell.getPaddingTop());
|
||||
bg.setup(mLauncher, null, cell.getMeasuredWidth(), cell.getPaddingTop());
|
||||
|
||||
// The full preview background should appear behind the icon
|
||||
bg.isClipping = false;
|
||||
|
||||
@@ -71,6 +71,7 @@ public class AllAppsTransitionController implements TouchController, VerticalPul
|
||||
private final Launcher mLauncher;
|
||||
private final VerticalPullDetector mDetector;
|
||||
private final ArgbEvaluator mEvaluator;
|
||||
private final boolean mIsDarkTheme;
|
||||
|
||||
// Animation in this class is controlled by a single variable {@link mProgress}.
|
||||
// Visually, it represents top y coordinate of the all apps container if multiplied with
|
||||
@@ -112,6 +113,7 @@ public class AllAppsTransitionController implements TouchController, VerticalPul
|
||||
mEvaluator = new ArgbEvaluator();
|
||||
mAllAppsBackgroundColor = Themes.getAttrColor(l, android.R.attr.colorPrimary);
|
||||
mLauncher.getExtractedColors().addOnChangeListener(this);
|
||||
mIsDarkTheme = Themes.getAttrBoolean(mLauncher, R.attr.isPrimaryColorDark);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -275,9 +277,9 @@ public class AllAppsTransitionController implements TouchController, VerticalPul
|
||||
}
|
||||
|
||||
private void updateLightStatusBar(float shift) {
|
||||
// Do not modify status bar on landscape as all apps is not full bleed.
|
||||
if (!FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS
|
||||
&& mLauncher.getDeviceProfile().isVerticalBarLayout()) {
|
||||
// Do not modify status bar in dark theme or on landscape as all apps is not full bleed.
|
||||
if (mIsDarkTheme || (!FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS
|
||||
&& mLauncher.getDeviceProfile().isVerticalBarLayout())) {
|
||||
return;
|
||||
}
|
||||
// Use a light status bar (dark icons) if all apps is behind at least half of the status
|
||||
|
||||
@@ -36,8 +36,10 @@ import android.graphics.Region;
|
||||
import android.graphics.Shader;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Parcelable;
|
||||
import android.support.v4.graphics.ColorUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.util.Property;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
@@ -75,6 +77,7 @@ import com.android.launcher3.badge.FolderBadgeInfo;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.dragndrop.DragLayer;
|
||||
import com.android.launcher3.dragndrop.DragView;
|
||||
import com.android.launcher3.util.Themes;
|
||||
import com.android.launcher3.util.Thunk;
|
||||
import com.android.launcher3.widget.PendingAddShortcutInfo;
|
||||
|
||||
@@ -384,14 +387,11 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
private void computePreviewDrawingParams(int drawableSize, int totalSize) {
|
||||
if (mIntrinsicIconSize != drawableSize || mTotalWidth != totalSize ||
|
||||
mPrevTopPadding != getPaddingTop()) {
|
||||
DeviceProfile grid = mLauncher.getDeviceProfile();
|
||||
|
||||
mIntrinsicIconSize = drawableSize;
|
||||
mTotalWidth = totalSize;
|
||||
mPrevTopPadding = getPaddingTop();
|
||||
|
||||
mBackground.setup(getResources().getDisplayMetrics(), grid, this, mTotalWidth,
|
||||
getPaddingTop());
|
||||
mBackground.setup(mLauncher, this, mTotalWidth, getPaddingTop());
|
||||
mPreviewLayoutRule.init(mBackground.previewSize, mIntrinsicIconSize,
|
||||
Utilities.isRtl(getResources()));
|
||||
|
||||
@@ -544,6 +544,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
|
||||
private float mScale = 1f;
|
||||
private float mColorMultiplier = 1f;
|
||||
private int mBgColor;
|
||||
private float mStrokeWidth;
|
||||
private int mStrokeAlpha = MAX_BG_OPACITY;
|
||||
private View mInvalidateDelegate;
|
||||
@@ -567,7 +568,6 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
// Expressed on a scale from 0 to 255.
|
||||
private static final int BG_OPACITY = 160;
|
||||
private static final int MAX_BG_OPACITY = 225;
|
||||
private static final int BG_INTENSITY = 245;
|
||||
private static final int SHADOW_OPACITY = 40;
|
||||
|
||||
ValueAnimator mScaleAnimator;
|
||||
@@ -587,10 +587,12 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
}
|
||||
};
|
||||
|
||||
public void setup(DisplayMetrics dm, DeviceProfile grid, View invalidateDelegate,
|
||||
public void setup(Launcher launcher, View invalidateDelegate,
|
||||
int availableSpace, int topPadding) {
|
||||
mInvalidateDelegate = invalidateDelegate;
|
||||
mBgColor = Themes.getAttrColor(launcher, android.R.attr.colorPrimary);
|
||||
|
||||
DeviceProfile grid = launcher.getDeviceProfile();
|
||||
final int previewSize = grid.folderIconSizePx;
|
||||
final int previewPadding = grid.folderIconPreviewPadding;
|
||||
|
||||
@@ -600,7 +602,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
basePreviewOffsetY = previewPadding + grid.folderBackgroundOffset + topPadding;
|
||||
|
||||
// Stroke width is 1dp
|
||||
mStrokeWidth = dm.density;
|
||||
mStrokeWidth = launcher.getResources().getDisplayMetrics().density;
|
||||
|
||||
float radius = getScaledRadius();
|
||||
float shadowRadius = radius + mStrokeWidth;
|
||||
@@ -655,7 +657,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
public void drawBackground(Canvas canvas) {
|
||||
mPaint.setStyle(Paint.Style.FILL);
|
||||
int alpha = (int) Math.min(MAX_BG_OPACITY, BG_OPACITY * mColorMultiplier);
|
||||
mPaint.setColor(Color.argb(alpha, BG_INTENSITY, BG_INTENSITY, BG_INTENSITY));
|
||||
mPaint.setColor(ColorUtils.setAlphaComponent(mBgColor, alpha));
|
||||
|
||||
drawCircle(canvas, 0 /* deltaRadius */);
|
||||
|
||||
@@ -700,7 +702,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
mStrokeAlphaAnimator.cancel();
|
||||
}
|
||||
mStrokeAlphaAnimator = ObjectAnimator
|
||||
.ofArgb(this, STROKE_ALPHA, MAX_BG_OPACITY / 2, MAX_BG_OPACITY)
|
||||
.ofInt(this, STROKE_ALPHA, MAX_BG_OPACITY / 2, MAX_BG_OPACITY)
|
||||
.setDuration(100);
|
||||
mStrokeAlphaAnimator.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
@@ -712,7 +714,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
||||
}
|
||||
|
||||
public void drawBackgroundStroke(Canvas canvas) {
|
||||
mPaint.setColor(Color.argb(mStrokeAlpha, BG_INTENSITY, BG_INTENSITY, BG_INTENSITY));
|
||||
mPaint.setColor(ColorUtils.setAlphaComponent(mBgColor, mStrokeAlpha));
|
||||
mPaint.setStyle(Paint.Style.STROKE);
|
||||
mPaint.setStrokeWidth(mStrokeWidth);
|
||||
drawCircle(canvas, 1 /* deltaRadius */);
|
||||
|
||||
@@ -42,7 +42,7 @@ public class GradientView extends View {
|
||||
|
||||
private static final int DEFAULT_COLOR = Color.WHITE;
|
||||
private static final float GRADIENT_ALPHA_MASK_LENGTH_DP = 300;
|
||||
private static final float FINAL_GRADIENT_ALPHA = 0.75f;
|
||||
private static final int FINAL_GRADIENT_ALPHA = 0xBF;
|
||||
private static final boolean DEBUG = false;
|
||||
|
||||
private static Bitmap sFinalGradientMask;
|
||||
|
||||
@@ -32,6 +32,7 @@ import android.view.animation.Interpolator;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.util.Themes;
|
||||
|
||||
public class ScrimView extends View {
|
||||
|
||||
@@ -39,9 +40,6 @@ public class ScrimView extends View {
|
||||
|
||||
private static final int MASK_HEIGHT_DP = 300;
|
||||
private static final float MASK_START_LENGTH_FACTOR = 1f;
|
||||
private static final float FINAL_ALPHA = 0.87f;
|
||||
private static final int SCRIM_COLOR = ColorUtils.setAlphaComponent(
|
||||
Color.WHITE, (int) (FINAL_ALPHA * 255));
|
||||
private static final boolean APPLY_ALPHA = true;
|
||||
|
||||
private static Bitmap sFinalScrimMask;
|
||||
@@ -63,18 +61,20 @@ public class ScrimView extends View {
|
||||
super(context, attrs);
|
||||
mMaskHeight = Utilities.pxFromDp(MASK_HEIGHT_DP, getResources().getDisplayMetrics());
|
||||
mHeadStart = (int) (mMaskHeight * MASK_START_LENGTH_FACTOR);
|
||||
mPaint.setColor(SCRIM_COLOR);
|
||||
mAlphaStart = Launcher.getLauncher(context)
|
||||
.getDeviceProfile().isVerticalBarLayout() ? 0 : 55;
|
||||
|
||||
int scrimColor = Themes.getAttrColor(context, R.attr.allAppsScrimColor);
|
||||
int scrimAlpha = Color.alpha(scrimColor);
|
||||
mPaint.setColor(scrimColor);
|
||||
if (sFinalScrimMask == null) {
|
||||
sFinalScrimMask = Utilities.convertToAlphaMask(
|
||||
Utilities.createOnePixBitmap(), FINAL_ALPHA);
|
||||
Utilities.createOnePixBitmap(), scrimAlpha);
|
||||
}
|
||||
if (sAlphaScrimMask == null) {
|
||||
Bitmap alphaMaskFromResource = BitmapFactory.decodeResource(getResources(),
|
||||
R.drawable.all_apps_alpha_mask);
|
||||
sAlphaScrimMask = Utilities.convertToAlphaMask(alphaMaskFromResource, FINAL_ALPHA);
|
||||
sAlphaScrimMask = Utilities.convertToAlphaMask(alphaMaskFromResource, scrimAlpha);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.ColorMatrix;
|
||||
import android.view.ContextThemeWrapper;
|
||||
|
||||
/**
|
||||
* Various utility methods associated with theming.
|
||||
@@ -31,10 +30,6 @@ public class Themes {
|
||||
return getAttrColor(context, android.R.attr.colorAccent);
|
||||
}
|
||||
|
||||
public static int getColorPrimary(Context context, int theme) {
|
||||
return getAttrColor(new ContextThemeWrapper(context, theme), android.R.attr.colorPrimary);
|
||||
}
|
||||
|
||||
public static int getAttrColor(Context context, int attr) {
|
||||
TypedArray ta = context.obtainStyledAttributes(new int[]{attr});
|
||||
int colorAccent = ta.getColor(0, 0);
|
||||
@@ -42,6 +37,13 @@ public class Themes {
|
||||
return colorAccent;
|
||||
}
|
||||
|
||||
public static boolean getAttrBoolean(Context context, int attr) {
|
||||
TypedArray ta = context.obtainStyledAttributes(new int[]{attr});
|
||||
boolean value = ta.getBoolean(0, false);
|
||||
ta.recycle();
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the alpha corresponding to the theme attribute {@param attr}, in the range [0, 255].
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user