android.app.WallpaperColors Java Examples

The following examples show how to use android.app.WallpaperColors. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: WallpaperManagerService.java    From android_9.0.0_r45 with Apache License 2.0 6 votes vote down vote up
/**
 * We can easily change theme by modified colors hint. This function will check
 * current theme mode and return the WallpaperColors fit current theme mode.
 * If color need modified, it will return a copied WallpaperColors which
 * its ColorsHint is modified to fit current theme mode.
 *
 * @param colors a wallpaper primary colors representation
 */
private WallpaperColors getThemeColorsLocked(WallpaperColors colors) {
    if (colors == null) {
        Slog.w(TAG, "Cannot get theme colors because WallpaperColors is null.");
        return null;
    }

    int colorHints = colors.getColorHints();
    boolean supportDarkTheme = (colorHints & WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0;
    if (mThemeMode == Settings.Secure.THEME_MODE_WALLPAPER ||
            (mThemeMode == Settings.Secure.THEME_MODE_LIGHT && !supportDarkTheme) ||
            (mThemeMode == Settings.Secure.THEME_MODE_DARK && supportDarkTheme)) {
        return colors;
    }

    WallpaperColors themeColors = new WallpaperColors(colors.getPrimaryColor(),
            colors.getSecondaryColor(), colors.getTertiaryColor());

    if (mThemeMode == Settings.Secure.THEME_MODE_LIGHT) {
        colorHints &= ~WallpaperColors.HINT_SUPPORTS_DARK_THEME;
    } else if (mThemeMode == Settings.Secure.THEME_MODE_DARK) {
        colorHints |= WallpaperColors.HINT_SUPPORTS_DARK_THEME;
    }
    themeColors.setColorHints(colorHints);
    return themeColors;
}
 
Example #2
Source File: WallpaperManagerService.java    From android_9.0.0_r45 with Apache License 2.0 6 votes vote down vote up
/**
 * Called by a live wallpaper if its colors have changed.
 * @param primaryColors representation of wallpaper primary colors
 */
@Override
public void onWallpaperColorsChanged(WallpaperColors primaryColors) {
    int which;
    synchronized (mLock) {
        // Do not broadcast changes on ImageWallpaper since it's handled
        // internally by this class.
        if (mImageWallpaper.equals(mWallpaper.wallpaperComponent)) {
            return;
        }

        mWallpaper.primaryColors = primaryColors;

        // Live wallpapers always are system wallpapers.
        which = FLAG_SYSTEM;
        // It's also the lock screen wallpaper when we don't have a bitmap in there
        WallpaperData lockedWallpaper = mLockWallpaperMap.get(mWallpaper.userId);
        if (lockedWallpaper == null) {
            which |= FLAG_LOCK;
        }
    }
    if (which != 0) {
        notifyWallpaperColorsChanged(mWallpaper, which);
    }
}
 
Example #3
Source File: WallpaperManagerService.java    From android_9.0.0_r45 with Apache License 2.0 5 votes vote down vote up
/**
 * Check whether to call notifyWallpaperColorsChanged. Assumed that the theme mode
 * was wallpaper theme mode and dark wallpaper was set, therefoe, the theme was dark.
 * Then theme mode changing to dark theme mode, however, theme should not update since
 * theme was dark already.
 */
private boolean needUpdateLocked(WallpaperColors colors, int themeMode) {
    if (colors == null) {
        return false;
    }

    if (themeMode == mThemeMode) {
        return false;
    }

    boolean result = true;
    boolean supportDarkTheme =
            (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0;
    switch (themeMode) {
        case Settings.Secure.THEME_MODE_WALLPAPER:
            if (mThemeMode == Settings.Secure.THEME_MODE_LIGHT) {
                result = supportDarkTheme;
            } else {
                result = !supportDarkTheme;
            }
            break;
        case Settings.Secure.THEME_MODE_LIGHT:
            if (mThemeMode == Settings.Secure.THEME_MODE_WALLPAPER) {
                result = supportDarkTheme;
            }
            break;
        case Settings.Secure.THEME_MODE_DARK:
            if (mThemeMode == Settings.Secure.THEME_MODE_WALLPAPER) {
                result = !supportDarkTheme;
            }
            break;
        default:
            Slog.w(TAG, "unkonwn theme mode " + themeMode);
            return false;
    }
    mThemeMode = themeMode;
    return result;
}
 
Example #4
Source File: WallpaperManagerService.java    From android_9.0.0_r45 with Apache License 2.0 5 votes vote down vote up
@Override
public WallpaperColors getWallpaperColors(int which, int userId) throws RemoteException {
    if (which != FLAG_LOCK && which != FLAG_SYSTEM) {
        throw new IllegalArgumentException("which should be either FLAG_LOCK or FLAG_SYSTEM");
    }
    userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
            userId, false, true, "getWallpaperColors", null);

    WallpaperData wallpaperData = null;
    boolean shouldExtract;

    synchronized (mLock) {
        if (which == FLAG_LOCK) {
            wallpaperData = mLockWallpaperMap.get(userId);
        }

        // Try to get the system wallpaper anyway since it might
        // also be the lock screen wallpaper
        if (wallpaperData == null) {
            wallpaperData = mWallpaperMap.get(userId);
        }

        if (wallpaperData == null) {
            return null;
        }
        shouldExtract = wallpaperData.primaryColors == null;
    }

    if (shouldExtract) {
        extractColors(wallpaperData);
    }

    synchronized (mLock) {
        return getThemeColorsLocked(wallpaperData.primaryColors);
    }
}
 
Example #5
Source File: WallpaperService.java    From android_9.0.0_r45 with Apache License 2.0 5 votes vote down vote up
/**
 * Notifies the engine that wallpaper colors changed significantly.
 * This will trigger a {@link #onComputeColors()} call.
 */
public void notifyColorsChanged() {
    final long now = mClockFunction.get();
    if (now - mLastColorInvalidation < NOTIFY_COLORS_RATE_LIMIT_MS) {
        Log.w(TAG, "This call has been deferred. You should only call "
                + "notifyColorsChanged() once every "
                + (NOTIFY_COLORS_RATE_LIMIT_MS / 1000f) + " seconds.");
        if (!mHandler.hasCallbacks(mNotifyColorsChanged)) {
            mHandler.postDelayed(mNotifyColorsChanged, NOTIFY_COLORS_RATE_LIMIT_MS);
        }
        return;
    }
    mLastColorInvalidation = now;
    mHandler.removeCallbacks(mNotifyColorsChanged);

    try {
        final WallpaperColors newColors = onComputeColors();
        if (mConnection != null) {
            mConnection.onWallpaperColorsChanged(newColors);
        } else {
            Log.w(TAG, "Can't notify system because wallpaper connection "
                    + "was not established.");
        }
    } catch (RemoteException e) {
        Log.w(TAG, "Can't notify system because wallpaper connection was lost.", e);
    }
}
 
Example #6
Source File: WallpaperActivity.java    From Unity-Android-Live-Wallpaper with MIT License 4 votes vote down vote up
@TargetApi(Build.VERSION_CODES.O_MR1)
@Override public WallpaperColors onComputeColors ()
{
    Color color = Color.valueOf(Color.BLACK);
    return new WallpaperColors(color, color, color);
}
 
Example #7
Source File: WallpaperManagerService.java    From android_9.0.0_r45 with Apache License 2.0 4 votes vote down vote up
private void parseWallpaperAttributes(XmlPullParser parser, WallpaperData wallpaper,
        boolean keepDimensionHints) {
    final String idString = parser.getAttributeValue(null, "id");
    if (idString != null) {
        final int id = wallpaper.wallpaperId = Integer.parseInt(idString);
        if (id > mWallpaperId) {
            mWallpaperId = id;
        }
    } else {
        wallpaper.wallpaperId = makeWallpaperIdLocked();
    }

    if (!keepDimensionHints) {
        wallpaper.width = Integer.parseInt(parser.getAttributeValue(null, "width"));
        wallpaper.height = Integer.parseInt(parser
                .getAttributeValue(null, "height"));
    }
    wallpaper.cropHint.left = getAttributeInt(parser, "cropLeft", 0);
    wallpaper.cropHint.top = getAttributeInt(parser, "cropTop", 0);
    wallpaper.cropHint.right = getAttributeInt(parser, "cropRight", 0);
    wallpaper.cropHint.bottom = getAttributeInt(parser, "cropBottom", 0);
    wallpaper.padding.left = getAttributeInt(parser, "paddingLeft", 0);
    wallpaper.padding.top = getAttributeInt(parser, "paddingTop", 0);
    wallpaper.padding.right = getAttributeInt(parser, "paddingRight", 0);
    wallpaper.padding.bottom = getAttributeInt(parser, "paddingBottom", 0);
    int colorsCount = getAttributeInt(parser, "colorsCount", 0);
    if (colorsCount > 0) {
        Color primary = null, secondary = null, tertiary = null;
        for (int i = 0; i < colorsCount; i++) {
            Color color = Color.valueOf(getAttributeInt(parser, "colorValue" + i, 0));
            if (i == 0) {
                primary = color;
            } else if (i == 1) {
                secondary = color;
            } else if (i == 2) {
                tertiary = color;
            } else {
                break;
            }
        }
        int colorHints = getAttributeInt(parser, "colorHints", 0);
        wallpaper.primaryColors = new WallpaperColors(primary, secondary, tertiary, colorHints);
    }
    wallpaper.name = parser.getAttributeValue(null, "name");
    wallpaper.allowBackup = "true".equals(parser.getAttributeValue(null, "backup"));
}
 
Example #8
Source File: WallpaperService.java    From android_9.0.0_r45 with Apache License 2.0 2 votes vote down vote up
/**
 * Called by the system when it needs to know what colors the wallpaper is using.
 * You might return null if no color information is available at the moment.
 * In that case you might want to call {@link #notifyColorsChanged()} when
 * color information becomes available.
 * <p>
 * The simplest way of creating a {@link android.app.WallpaperColors} object is by using
 * {@link android.app.WallpaperColors#fromBitmap(Bitmap)} or
 * {@link android.app.WallpaperColors#fromDrawable(Drawable)}, but you can also specify
 * your main colors by constructing a {@link android.app.WallpaperColors} object manually.
 *
 * @return Wallpaper colors.
 */
public @Nullable WallpaperColors onComputeColors() {
    return null;
}