diff options
author | d34d <clark@cyngn.com> | 2015-03-02 15:31:05 -0800 |
---|---|---|
committer | d34d <clark@cyngn.com> | 2015-03-03 13:36:04 -0800 |
commit | d56651ee27f618762440fa0efe5b16c137814854 (patch) | |
tree | 14762526351fb0c79f2136d1b0f0ae20ad3148e0 /src/org/cyanogenmod/themes/provider/util/ProviderUtils.java | |
parent | 59c61579c13cb257e603c28b1c51f6eff64fe2dc (diff) | |
download | android_packages_providers_ThemesProvider-d56651ee27f618762440fa0efe5b16c137814854.tar.gz android_packages_providers_ThemesProvider-d56651ee27f618762440fa0efe5b16c137814854.tar.bz2 android_packages_providers_ThemesProvider-d56651ee27f618762440fa0efe5b16c137814854.zip |
Themes: Update ThemesContract with install state [2/3]
This provider will be responsible for keeping track of the installed
state of themes. This includes two intermedite states, INSTALLING
and UPDATING. When a theme is installed from PackageManager the
provider will receive this broadcast and add the theme to its DB
and set the state to INSTALLING if the ThemeService is processing
the theme, or INSTALLED if not and broadcast the ACTION_THEME_INSTALLED
action. When a theme is updated the provider will receive another
broadcast indicating that the current version of the theme is being
replaced. If the ThemeService needs to do some processing, we'll
update the state to UPDATING.
Once the theme service is done processing a theme, the provider
will receive a broadcast from the ThemeService. At this point, the
themes provider will update the state to INSTALLED, if it is not
already set to that state. The provider will broadcast the
ACTION_THEME_INSTALLED action if the previous state was INSTALLING
and the ACTION_THEME_UPDATED action if the previous state was
UPDATING.
Change-Id: Ie37f85463e472d96b8393801007537db1e3eefc6
Diffstat (limited to 'src/org/cyanogenmod/themes/provider/util/ProviderUtils.java')
-rw-r--r-- | src/org/cyanogenmod/themes/provider/util/ProviderUtils.java | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java b/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java new file mode 100644 index 0000000..a07d0ba --- /dev/null +++ b/src/org/cyanogenmod/themes/provider/util/ProviderUtils.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2015 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 org.cyanogenmod.themes.provider.util; + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.content.res.ThemeManager; +import android.database.Cursor; +import android.net.Uri; +import android.provider.ThemesContract; +import android.provider.ThemesContract.ThemesColumns; + +public class ProviderUtils { + /** + * Convenience method for determining if a theme exists in the provider + * @param context + * @param pkgName + * @return True if the theme exists, false otherwise + */ + public static boolean themeExistsInProvider(Context context, String pkgName) { + boolean exists = false; + String[] projection = new String[] { ThemesColumns.PKG_NAME }; + String selection = ThemesColumns.PKG_NAME + "=?"; + String[] selectionArgs = new String[] { pkgName }; + Cursor c = context.getContentResolver().query(ThemesColumns.CONTENT_URI, + projection, selection, selectionArgs, null); + + if (c != null) { + exists = c.getCount() >= 1; + c.close(); + } + return exists; + } + + /** + * Queries the {@link android.content.res.ThemeManager} to check if the theme is currently + * being processed by {@link com.android.server.ThemeService} + * @param context + * @param pkgName + * @return True if the theme is being processed or queued up for processing + */ + public static boolean isThemeBeingProcessed(Context context, String pkgName) { + ThemeManager tm = (ThemeManager) context.getSystemService(Context.THEME_SERVICE); + return tm.isThemeBeingProcessed(pkgName); + } + + /** + * Convenience method for getting the install state of a theme in the provider + * @param context + * @param pkgName + * @return + */ + public static int getInstallStateForTheme(Context context, String pkgName) { + String[] projection = new String[] { ThemesColumns.INSTALL_STATE }; + String selection = ThemesColumns.PKG_NAME + "=?"; + String[] selectionArgs = new String[] { pkgName }; + Cursor c = context.getContentResolver().query(ThemesColumns.CONTENT_URI, + projection, selection, selectionArgs, null); + + int state = ThemesColumns.InstallState.UNKNOWN; + if (c != null) { + if (c.moveToFirst()) { + state = c.getInt(c.getColumnIndex(ThemesColumns.INSTALL_STATE)); + } + c.close(); + } + return state; + } + + /** + * Sends the {@link android.provider.ThemesContract.Intent#ACTION_THEME_INSTALLED} action + * @param context + * @param pkgName + */ + public static void sendThemeInstalledBroadcast(Context context, String pkgName) { + Intent intent = new Intent(ThemesContract.Intent.ACTION_THEME_INSTALLED, + Uri.fromParts(ThemesContract.Intent.URI_SCHEME_PACKAGE, pkgName, null)); + context.sendBroadcast(intent, Manifest.permission.READ_THEMES); + } + + /** + * Sends the {@link android.provider.ThemesContract.Intent#ACTION_THEME_UPDATED} action + * @param context + * @param pkgName + */ + public static void sendThemeUpdatedBroadcast(Context context, String pkgName) { + Intent intent = new Intent(ThemesContract.Intent.ACTION_THEME_UPDATED, + Uri.fromParts(ThemesContract.Intent.URI_SCHEME_PACKAGE, pkgName, null)); + context.sendBroadcast(intent, Manifest.permission.READ_THEMES); + } + + /** + * Sends the {@link android.provider.ThemesContract.Intent#ACTION_THEME_REMOVED} action + * @param context + * @param pkgName + */ + public static void sendThemeRemovedBroadcast(Context context, String pkgName) { + Intent intent = new Intent(ThemesContract.Intent.ACTION_THEME_REMOVED, + Uri.fromParts(ThemesContract.Intent.URI_SCHEME_PACKAGE, pkgName, null)); + context.sendBroadcast(intent, Manifest.permission.READ_THEMES); + } +} |