replicant-vendor_cmsdk/sdk/src/java/cyanogenmod/providers/ThemesContract.java

718 lines
26 KiB
Java

/*
* Copyright (C) 2016 The CyanogenMod Project
*
* 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 cyanogenmod.providers;
import android.net.Uri;
/**
* <p>
* The contract between the themes provider and applications. Contains
* definitions for the supported URIs and columns.
* </p>
*/
public class ThemesContract {
/** The authority for the themes provider */
public static final String AUTHORITY = "com.cyanogenmod.themes";
/** A content:// style uri to the authority for the themes provider */
public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);
public static class ThemesColumns {
public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "themes");
/**
* The unique ID for a row.
* <P>Type: INTEGER (long)</P>
*/
public static final String _ID = "_id";
/**
* The user visible title.
* <P>Type: TEXT</P>
*/
public static final String TITLE = "title";
/**
* Unique text to identify the apk pkg. ie "com.foo.bar"
* <P>Type: TEXT</P>
*/
public static final String PKG_NAME = "pkg_name";
/**
* A 32 bit RRGGBB color representative of the themes color scheme
* <P>Type: INTEGER</P>
*/
public static final String PRIMARY_COLOR = "primary_color";
/**
* A 2nd 32 bit RRGGBB color representative of the themes color scheme
* <P>Type: INTEGER</P>
*/
public static final String SECONDARY_COLOR = "secondary_color";
/**
* Name of the author of the theme
* <P>Type: TEXT</P>
*/
public static final String AUTHOR = "author";
/**
* The time that this row was created on its originating client (msecs
* since the epoch).
* <P>Type: INTEGER</P>
*/
public static final String DATE_CREATED = "created";
/**
* URI to an image that shows the homescreen with the theme applied
* since the epoch).
* <P>Type: TEXT</P>
*/
public static final String HOMESCREEN_URI = "homescreen_uri";
/**
* URI to an image that shows the lockscreen with theme applied
* <P>Type: TEXT</P>
*/
public static final String LOCKSCREEN_URI = "lockscreen_uri";
/**
* URI to an image that shows the style (aka skin) with theme applied
* <P>Type: TEXT</P>
*/
public static final String STYLE_URI = "style_uri";
/**
* TODO: Figure structure for actual animation instead of static
* URI to an image of the boot_anim.
* <P>Type: TEXT</P>
*/
public static final String BOOT_ANIM_URI = "bootanim_uri";
/**
* URI to an image of the status bar for this theme.
* <P>Type: TEXT</P>
*/
public static final String STATUSBAR_URI = "status_uri";
/**
* URI to an image of the fonts in this theme.
* <P>Type: TEXT</P>
*/
public static final String FONT_URI = "font_uri";
/**
* URI to an image of the fonts in this theme.
* <P>Type: TEXT</P>
*/
public static final String ICON_URI = "icon_uri";
/**
* URI to an image of the fonts in this theme.
* <P>Type: TEXT</P>
*/
public static final String OVERLAYS_URI = "overlays_uri";
/**
* 1 if theme modifies the launcher/homescreen else 0
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_LAUNCHER = "mods_homescreen";
/**
* 1 if theme modifies the lockscreen else 0
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_LOCKSCREEN = "mods_lockscreen";
/**
* 1 if theme modifies icons else 0
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_ICONS = "mods_icons";
/**
* 1 if theme modifies fonts
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_FONTS = "mods_fonts";
/**
* 1 if theme modifies boot animation
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_BOOT_ANIM = "mods_bootanim";
/**
* 1 if theme modifies notifications
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_NOTIFICATIONS = "mods_notifications";
/**
* 1 if theme modifies alarm sounds
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_ALARMS = "mods_alarms";
/**
* 1 if theme modifies ringtones
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_RINGTONES = "mods_ringtones";
/**
* 1 if theme has overlays
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_OVERLAYS = "mods_overlays";
/**
* 1 if theme has an overlay for SystemUI/StatusBar
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_STATUS_BAR = "mods_status_bar";
/**
* 1 if theme has an overlay for SystemUI/NavBar
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_NAVIGATION_BAR = "mods_navigation_bar";
/**
* 1 if theme has a live lock screen
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String MODIFIES_LIVE_LOCK_SCREEN = "mods_live_lock_screen";
/**
* URI to the theme's wallpaper. We should support multiple wallpaper
* but for now we will just have 1.
* <P>Type: TEXT</P>
*/
public static final String WALLPAPER_URI = "wallpaper_uri";
/**
* 1 if this row should actually be presented as a theme to the user.
* For example if a "theme" only modifies one component (ex icons) then
* we do not present it to the user under the themes table.
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String PRESENT_AS_THEME = "present_as_theme";
/**
* 1 if this theme is a legacy theme.
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String IS_LEGACY_THEME = "is_legacy_theme";
/**
* 1 if this theme is the system default theme.
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String IS_DEFAULT_THEME = "is_default_theme";
/**
* 1 if this theme is a legacy iconpack. A legacy icon pack is an APK that was written
* for Trebuchet or a 3rd party launcher.
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String IS_LEGACY_ICONPACK = "is_legacy_iconpack";
/**
* install/update time in millisecs. When the row is inserted this column
* is populated by the PackageInfo. It is used for syncing to PM
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String LAST_UPDATE_TIME = "updateTime";
/**
* install time in millisecs. When the row is inserted this column
* is populated by the PackageInfo.
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String INSTALL_TIME = "install_time";
/**
* The target API this theme supports
* is populated by the PackageInfo.
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String TARGET_API = "target_api";
/**
* The install state of the theme.
* Can be one of the following:
* {@link InstallState#UNKNOWN}
* {@link InstallState#INSTALLING}
* {@link InstallState#UPDATING}
* {@link InstallState#INSTALLED}
* <P>Type: INTEGER</P>
* <P>Default: 0</P>
*/
public static final String INSTALL_STATE = "install_state";
public static class InstallState {
public static final int UNKNOWN = 0;
public static final int INSTALLING = 1;
public static final int UPDATING = 2;
public static final int INSTALLED = 3;
}
}
/**
* Key-value table which assigns a component (ex wallpaper) to a theme's package
*/
public static class MixnMatchColumns {
public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "mixnmatch");
/**
* The unique key for a row. See the KEY_* constants
* for valid examples
* <P>Type: TEXT</P>
*/
public static final String COL_KEY = "key";
/**
* The package name that corresponds to a given component.
* <P>Type: String</P>
*/
public static final String COL_VALUE = "value";
/**
* The package name that corresponds to where this component was applied from previously
* <P>Type: String</P>
*/
public static final String COL_PREV_VALUE = "previous_value";
/**
* Time when this entry was last updated
* <P>Type: INTEGER</P>
*/
public static final String COL_UPDATE_TIME = "update_time";
/*
* The unique ID for the component within a theme.
* Always 0 unless multiples of a component exist.
* <P>Type: INTEGER (long)</P>
*/
public static final String COL_COMPONENT_ID = "component_id";
/**
* Valid keys
*/
public static final String KEY_HOMESCREEN = "mixnmatch_homescreen";
public static final String KEY_LOCKSCREEN = "mixnmatch_lockscreen";
public static final String KEY_ICONS = "mixnmatch_icons";
public static final String KEY_STATUS_BAR = "mixnmatch_status_bar";
public static final String KEY_BOOT_ANIM = "mixnmatch_boot_anim";
public static final String KEY_FONT = "mixnmatch_font";
public static final String KEY_ALARM = "mixnmatch_alarm";
public static final String KEY_NOTIFICATIONS = "mixnmatch_notifications";
public static final String KEY_RINGTONE = "mixnmatch_ringtone";
public static final String KEY_OVERLAYS = "mixnmatch_overlays";
public static final String KEY_NAVIGATION_BAR = "mixnmatch_navigation_bar";
public static final String KEY_LIVE_LOCK_SCREEN = "mixnmatch_live_lock_screen";
public static final String[] ROWS = { KEY_HOMESCREEN,
KEY_LOCKSCREEN,
KEY_ICONS,
KEY_STATUS_BAR,
KEY_BOOT_ANIM,
KEY_FONT,
KEY_NOTIFICATIONS,
KEY_RINGTONE,
KEY_ALARM,
KEY_OVERLAYS,
KEY_NAVIGATION_BAR,
KEY_LIVE_LOCK_SCREEN
};
/**
* For a given key value in the MixNMatch table, return the column
* associated with it in the Themes Table. This is useful for URI based
* elements like wallpaper where the caller wishes to determine the
* wallpaper URI.
*/
public static String componentToImageColName(String component) {
if (component.equals(MixnMatchColumns.KEY_HOMESCREEN)) {
return ThemesColumns.HOMESCREEN_URI;
} else if (component.equals(MixnMatchColumns.KEY_LOCKSCREEN)) {
return ThemesColumns.LOCKSCREEN_URI;
} else if (component.equals(MixnMatchColumns.KEY_BOOT_ANIM)) {
return ThemesColumns.BOOT_ANIM_URI;
} else if (component.equals(MixnMatchColumns.KEY_FONT)) {
return ThemesColumns.FONT_URI;
} else if (component.equals(MixnMatchColumns.KEY_ICONS)) {
return ThemesColumns.ICON_URI;
} else if (component.equals(MixnMatchColumns.KEY_STATUS_BAR)) {
return ThemesColumns.STATUSBAR_URI;
} else if (component.equals(MixnMatchColumns.KEY_NOTIFICATIONS)) {
throw new IllegalArgumentException("Notifications mixnmatch component does not have a related column");
} else if (component.equals(MixnMatchColumns.KEY_RINGTONE)) {
throw new IllegalArgumentException("Ringtone mixnmatch component does not have a related column");
} else if (component.equals(MixnMatchColumns.KEY_OVERLAYS)) {
return ThemesColumns.OVERLAYS_URI;
} else if (component.equals(MixnMatchColumns.KEY_STATUS_BAR)) {
throw new IllegalArgumentException(
"Status bar mixnmatch component does not have a related column");
} else if (component.equals(MixnMatchColumns.KEY_NAVIGATION_BAR)) {
throw new IllegalArgumentException(
"Navigation bar mixnmatch component does not have a related column");
} else if (component.equals(MixnMatchColumns.KEY_LIVE_LOCK_SCREEN)) {
throw new IllegalArgumentException(
"Live lock screen mixnmatch component does not have a related column");
}
return null;
}
/**
* A component in the themes table (IE "mods_wallpaper") has an
* equivalent key in mixnmatch table
*/
public static String componentToMixNMatchKey(String component) {
if (component.equals(ThemesColumns.MODIFIES_LAUNCHER)) {
return MixnMatchColumns.KEY_HOMESCREEN;
} else if (component.equals(ThemesColumns.MODIFIES_ICONS)) {
return MixnMatchColumns.KEY_ICONS;
} else if (component.equals(ThemesColumns.MODIFIES_LOCKSCREEN)) {
return MixnMatchColumns.KEY_LOCKSCREEN;
} else if (component.equals(ThemesColumns.MODIFIES_FONTS)) {
return MixnMatchColumns.KEY_FONT;
} else if (component.equals(ThemesColumns.MODIFIES_BOOT_ANIM)) {
return MixnMatchColumns.KEY_BOOT_ANIM;
} else if (component.equals(ThemesColumns.MODIFIES_ALARMS)) {
return MixnMatchColumns.KEY_ALARM;
} else if (component.equals(ThemesColumns.MODIFIES_NOTIFICATIONS)) {
return MixnMatchColumns.KEY_NOTIFICATIONS;
} else if (component.equals(ThemesColumns.MODIFIES_RINGTONES)) {
return MixnMatchColumns.KEY_RINGTONE;
} else if (component.equals(ThemesColumns.MODIFIES_OVERLAYS)) {
return MixnMatchColumns.KEY_OVERLAYS;
} else if (component.equals(ThemesColumns.MODIFIES_STATUS_BAR)) {
return MixnMatchColumns.KEY_STATUS_BAR;
} else if (component.equals(ThemesColumns.MODIFIES_NAVIGATION_BAR)) {
return MixnMatchColumns.KEY_NAVIGATION_BAR;
} else if (component.equals(ThemesColumns.MODIFIES_LIVE_LOCK_SCREEN)) {
return MixnMatchColumns.KEY_LIVE_LOCK_SCREEN;
}
return null;
}
/**
* A mixnmatch key in has an
* equivalent value in the themes table
*/
public static String mixNMatchKeyToComponent(String mixnmatchKey) {
if (mixnmatchKey.equals(MixnMatchColumns.KEY_HOMESCREEN)) {
return ThemesColumns.MODIFIES_LAUNCHER;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_ICONS)) {
return ThemesColumns.MODIFIES_ICONS;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_LOCKSCREEN)) {
return ThemesColumns.MODIFIES_LOCKSCREEN;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_FONT)) {
return ThemesColumns.MODIFIES_FONTS;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_BOOT_ANIM)) {
return ThemesColumns.MODIFIES_BOOT_ANIM;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_ALARM)) {
return ThemesColumns.MODIFIES_ALARMS;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_NOTIFICATIONS)) {
return ThemesColumns.MODIFIES_NOTIFICATIONS;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_RINGTONE)) {
return ThemesColumns.MODIFIES_RINGTONES;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_OVERLAYS)) {
return ThemesColumns.MODIFIES_OVERLAYS;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_STATUS_BAR)) {
return ThemesColumns.MODIFIES_STATUS_BAR;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_NAVIGATION_BAR)) {
return ThemesColumns.MODIFIES_NAVIGATION_BAR;
} else if (mixnmatchKey.equals(MixnMatchColumns.KEY_LIVE_LOCK_SCREEN)) {
return ThemesColumns.MODIFIES_LIVE_LOCK_SCREEN;
}
return null;
}
}
/**
* Table containing cached preview files for a given theme
*/
public static class PreviewColumns {
/**
* Uri for retrieving the previews table.
* Querying the themes provider using this URI will return a cursor with a key and value
* columns, and a row for each component.
*/
public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "previews");
/**
* Uri for retrieving the previews for the currently applied components.
* Querying the themes provider using this URI will return a cursor with a single row
* containing all the previews for the components that are currently applied.
*/
public static final Uri APPLIED_URI = Uri.withAppendedPath(AUTHORITY_URI,
"applied_previews");
/**
* Uri for retrieving the default previews for the theme.
* Querying the themes provider using this URI will return a cursor with a single row
* containing all the previews for the default components of the current theme.
*/
public static final Uri COMPONENTS_URI = Uri.withAppendedPath(AUTHORITY_URI,
"components_previews");
/**
* The unique ID for a row.
* <P>Type: INTEGER (long)</P>
*/
public static final String _ID = "_id";
/**
* The unique ID for the theme these previews belong to.
* <P>Type: INTEGER (long)</P>
*/
public static final String THEME_ID = "theme_id";
/**
* The unique ID for the component within a theme.
* <P>Type: INTEGER (long)</P>
*/
public static final String COMPONENT_ID = "component_id";
/**
* The unique key for a row. See the Valid key constants section below
* for valid examples
* <P>Type: TEXT</P>
*/
public static final String COL_KEY = "key";
/**
* The package name that corresponds to a given component.
* <P>Type: String</P>
*/
public static final String COL_VALUE = "value";
/**
* Valid keys
*/
/**
* Cached image of the themed status bar background.
* <P>Type: String (file path)</P>
*/
public static final String STATUSBAR_BACKGROUND = "statusbar_background";
/**
* Cached image of the themed bluetooth status icon.
* <P>Type: String (file path)</P>
*/
public static final String STATUSBAR_BLUETOOTH_ICON = "statusbar_bluetooth_icon";
/**
* Cached image of the themed wifi status icon.
* <P>Type: String (file path)</P>
*/
public static final String STATUSBAR_WIFI_ICON = "statusbar_wifi_icon";
/**
* Cached image of the themed cellular signal status icon.
* <P>Type: String (file path)</P>
*/
public static final String STATUSBAR_SIGNAL_ICON = "statusbar_signal_icon";
/**
* Cached image of the themed battery using portrait style.
* <P>Type: String (file path)</P>
*/
public static final String STATUSBAR_BATTERY_PORTRAIT = "statusbar_battery_portrait";
/**
* Cached image of the themed battery using landscape style.
* <P>Type: String (file path)</P>
*/
public static final String STATUSBAR_BATTERY_LANDSCAPE = "statusbar_battery_landscape";
/**
* Cached image of the themed battery using circle style.
* <P>Type: String (file path)</P>
*/
public static final String STATUSBAR_BATTERY_CIRCLE = "statusbar_battery_circle";
/**
* The themed color used for clock text in the status bar.
* <P>Type: INTEGER (int)</P>
*/
public static final String STATUSBAR_CLOCK_TEXT_COLOR = "statusbar_clock_text_color";
/**
* The themed margin value between the wifi and rssi signal icons.
* <P>Type: INTEGER (int)</P>
*/
public static final String STATUSBAR_WIFI_COMBO_MARGIN_END = "wifi_combo_margin_end";
/**
* Cached image of the themed navigation bar background.
* <P>Type: String (file path)</P>
*/
public static final String NAVBAR_BACKGROUND = "navbar_background";
/**
* Cached image of the themed back button.
* <P>Type: String (file path)</P>
*/
public static final String NAVBAR_BACK_BUTTON = "navbar_back_button";
/**
* Cached image of the themed home button.
* <P>Type: String (file path)</P>
*/
public static final String NAVBAR_HOME_BUTTON = "navbar_home_button";
/**
* Cached image of the themed recents button.
* <P>Type: String (file path)</P>
*/
public static final String NAVBAR_RECENT_BUTTON = "navbar_recent_button";
/**
* Cached image of the 1/3 icons
* <P>Type: String (file path)</P>
*/
public static final String ICON_PREVIEW_1 = "icon_preview_1";
/**
* Cached image of the 2/3 icons
* <P>Type: String (file path)</P>
*/
public static final String ICON_PREVIEW_2 = "icon_preview_2";
/**
* Cached image of the 3/3 icons
* <P>Type: String (file path)</P>
*/
public static final String ICON_PREVIEW_3 = "icon_preview_3";
/**
* Full path to the theme's wallpaper asset.
* <P>Type: String (file path)</P>
*/
public static final String WALLPAPER_FULL = "wallpaper_full";
/**
* Cached preview of the theme's wallpaper which is larger than the thumbnail
* but smaller than the full sized wallpaper.
* <P>Type: String (file path)</P>
*/
public static final String WALLPAPER_PREVIEW = "wallpaper_preview";
/**
* Cached thumbnail of the theme's wallpaper
* <P>Type: String (file path)</P>
*/
public static final String WALLPAPER_THUMBNAIL = "wallpaper_thumbnail";
/**
* Cached preview of the theme's lockscreen wallpaper which is larger than the thumbnail
* but smaller than the full sized lockscreen wallpaper.
* <P>Type: String (file path)</P>
*/
public static final String LOCK_WALLPAPER_PREVIEW = "lock_wallpaper_preview";
/**
* Cached thumbnail of the theme's lockscreen wallpaper
* <P>Type: String (file path)</P>
*/
public static final String LOCK_WALLPAPER_THUMBNAIL = "lock_wallpaper_thumbnail";
/**
* Cached preview of UI controls representing the theme's style
* <P>Type: String (file path)</P>
*/
public static final String STYLE_PREVIEW = "style_preview";
/**
* Cached thumbnail preview of UI controls representing the theme's style
* <P>Type: String (file path)</P>
*/
public static final String STYLE_THUMBNAIL = "style_thumbnail";
/**
* Cached thumbnail of the theme's boot animation
* <P>Type: String (file path)</P>
*/
public static final String BOOTANIMATION_THUMBNAIL = "bootanimation_thumbnail";
/**
* Cached preview of live lock screen
* <P>Type: String (file path)</P>
*/
public static final String LIVE_LOCK_SCREEN_PREVIEW = "live_lock_screen_preview";
/**
* Cached thumbnail preview of live lock screen
* <P>Type: String (file path)</P>
*/
public static final String LIVE_LOCK_SCREEN_THUMBNAIL = "live_lock_screen_thumbnail";
public static final String[] VALID_KEYS = {
STATUSBAR_BACKGROUND,
STATUSBAR_BLUETOOTH_ICON,
STATUSBAR_WIFI_ICON,
STATUSBAR_SIGNAL_ICON,
STATUSBAR_BATTERY_PORTRAIT,
STATUSBAR_BATTERY_LANDSCAPE,
STATUSBAR_BATTERY_CIRCLE,
STATUSBAR_CLOCK_TEXT_COLOR,
STATUSBAR_WIFI_COMBO_MARGIN_END,
NAVBAR_BACKGROUND,
NAVBAR_BACK_BUTTON,
NAVBAR_HOME_BUTTON,
NAVBAR_RECENT_BUTTON,
ICON_PREVIEW_1,
ICON_PREVIEW_2,
ICON_PREVIEW_3,
WALLPAPER_FULL,
WALLPAPER_PREVIEW,
WALLPAPER_THUMBNAIL,
LOCK_WALLPAPER_PREVIEW,
LOCK_WALLPAPER_THUMBNAIL,
STYLE_PREVIEW,
STYLE_THUMBNAIL,
BOOTANIMATION_THUMBNAIL,
LIVE_LOCK_SCREEN_PREVIEW,
LIVE_LOCK_SCREEN_THUMBNAIL,
};
}
}