1d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn/* 2d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Copyright (C) 2009 The Android Open Source Project 3d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * 4d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * you may not use this file except in compliance with the License. 6d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * You may obtain a copy of the License at 7d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * 8d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * 10d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * Unless required by applicable law or agreed to in writing, software 11d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * See the License for the specific language governing permissions and 14d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn * limitations under the License. 15d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn */ 16d68478467e3f837511196c80891d7245d0e163dfDianne Hackborn 17eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornpackage android.app; 18eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 19eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport org.xmlpull.v1.XmlPullParser; 20eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport org.xmlpull.v1.XmlPullParserException; 21eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 22eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.content.ComponentName; 23eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.content.Context; 248aa2e8939c61d788cbc192098465e79f584e173aDianne Hackbornimport android.content.pm.ApplicationInfo; 25eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.content.pm.PackageManager; 26eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.content.pm.ResolveInfo; 27eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.content.pm.ServiceInfo; 2820cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackbornimport android.content.pm.PackageManager.NameNotFoundException; 2918a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandlerimport android.content.res.Resources.NotFoundException; 3020cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackbornimport android.content.res.Resources; 31eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.content.res.TypedArray; 32eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.content.res.XmlResourceParser; 33eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.graphics.drawable.Drawable; 34eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.os.Parcel; 35eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.os.Parcelable; 36eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.service.wallpaper.WallpaperService; 37eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.util.AttributeSet; 38eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.util.Printer; 39eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.util.Xml; 40eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 41eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport java.io.IOException; 42eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 43eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn/** 44eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * This class is used to specify meta information of a wallpaper service. 45eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 46eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornpublic final class WallpaperInfo implements Parcelable { 47eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn static final String TAG = "WallpaperInfo"; 48eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 49eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 50eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * The Service that implements this wallpaper component. 51eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 52eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn final ResolveInfo mService; 53eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 54eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 55eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * The wallpaper setting activity's name, to 56eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * launch the setting activity of this wallpaper. 57eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 58eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn final String mSettingsActivityName; 59eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 60eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 61465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler * Resource identifier for this wallpaper's thumbnail image. 62465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler */ 63465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler final int mThumbnailResource; 64465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler 65465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler /** 6618a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler * Resource identifier for a string indicating the author of the wallpaper. 6718a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler */ 6818a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler final int mAuthorResource; 6918a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler 7018a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler /** 7118a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler * Resource identifier for a string containing a short description of the wallpaper. 7218a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler */ 7318a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler final int mDescriptionResource; 7418a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler 7518a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler /** 76eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Constructor. 77eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * 78eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param context The Context in which we are parsing the wallpaper. 79eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param service The ResolveInfo returned from the package manager about 80eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * this wallpaper's component. 81eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 82eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public WallpaperInfo(Context context, ResolveInfo service) 83eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn throws XmlPullParserException, IOException { 84eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mService = service; 85eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn ServiceInfo si = service.serviceInfo; 86eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 87eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn PackageManager pm = context.getPackageManager(); 88eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn String settingsActivityComponent = null; 89465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler int thumbnailRes = -1; 9018a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler int authorRes = -1; 9118a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler int descriptionRes = -1; 92eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 93eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn XmlResourceParser parser = null; 94eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn try { 95eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn parser = si.loadXmlMetaData(pm, WallpaperService.SERVICE_META_DATA); 96eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (parser == null) { 97eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn throw new XmlPullParserException("No " 98eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn + WallpaperService.SERVICE_META_DATA + " meta-data"); 99eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 100eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 10120cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn Resources res = pm.getResourcesForApplication(si.applicationInfo); 10220cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn 103eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn AttributeSet attrs = Xml.asAttributeSet(parser); 104eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 105eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn int type; 106eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 107eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn && type != XmlPullParser.START_TAG) { 108eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 109eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 110eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn String nodeName = parser.getName(); 111eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (!"wallpaper".equals(nodeName)) { 112eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn throw new XmlPullParserException( 113eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn "Meta-data does not start with wallpaper tag"); 114eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 115eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 11620cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn TypedArray sa = res.obtainAttributes(attrs, 117eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn com.android.internal.R.styleable.Wallpaper); 118eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn settingsActivityComponent = sa.getString( 119eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn com.android.internal.R.styleable.Wallpaper_settingsActivity); 120465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler 121465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler thumbnailRes = sa.getResourceId( 122465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler com.android.internal.R.styleable.Wallpaper_thumbnail, 123465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler -1); 12418a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler authorRes = sa.getResourceId( 12523ef7b4836d66d31430fedee2aac36275bb30d4bDianne Hackborn com.android.internal.R.styleable.Wallpaper_author, 12618a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler -1); 12718a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler descriptionRes = sa.getResourceId( 12823ef7b4836d66d31430fedee2aac36275bb30d4bDianne Hackborn com.android.internal.R.styleable.Wallpaper_description, 12918a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler -1); 130465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler 131eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn sa.recycle(); 13220cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn } catch (NameNotFoundException e) { 13320cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn throw new XmlPullParserException( 13420cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn "Unable to create context for: " + si.packageName); 135eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } finally { 136eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (parser != null) parser.close(); 137eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 138eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 139eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mSettingsActivityName = settingsActivityComponent; 140465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler mThumbnailResource = thumbnailRes; 14118a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler mAuthorResource = authorRes; 14218a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler mDescriptionResource = descriptionRes; 143eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 144eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 145eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn WallpaperInfo(Parcel source) { 146eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mSettingsActivityName = source.readString(); 147465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler mThumbnailResource = source.readInt(); 14818a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler mAuthorResource = source.readInt(); 14918a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler mDescriptionResource = source.readInt(); 150eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mService = ResolveInfo.CREATOR.createFromParcel(source); 151eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 152eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 153eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 154eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Return the .apk package that implements this wallpaper. 155eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 156eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public String getPackageName() { 157eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mService.serviceInfo.packageName; 158eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 159eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 160eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 161eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Return the class name of the service component that implements 162eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * this wallpaper. 163eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 164eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public String getServiceName() { 165eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mService.serviceInfo.name; 166eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 167eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 168eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 169eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Return the raw information about the Service implementing this 170eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * wallpaper. Do not modify the returned object. 171eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 172eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public ServiceInfo getServiceInfo() { 173eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mService.serviceInfo; 174eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 175eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 176eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 177eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Return the component of the service that implements this wallpaper. 178eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 179eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public ComponentName getComponent() { 180eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return new ComponentName(mService.serviceInfo.packageName, 181eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mService.serviceInfo.name); 182eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 183eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 184eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 185eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Load the user-displayed label for this wallpaper. 186eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * 187eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param pm Supply a PackageManager used to load the wallpaper's 188eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * resources. 189eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 190eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public CharSequence loadLabel(PackageManager pm) { 191eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mService.loadLabel(pm); 192eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 193eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 194eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 195eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Load the user-displayed icon for this wallpaper. 196eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * 197eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param pm Supply a PackageManager used to load the wallpaper's 198eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * resources. 199eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 200eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public Drawable loadIcon(PackageManager pm) { 201eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mService.loadIcon(pm); 202eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 203eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 204eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 205465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler * Load the thumbnail image for this wallpaper. 206465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler * 207465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler * @param pm Supply a PackageManager used to load the wallpaper's 208465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler * resources. 209465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler */ 210465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler public Drawable loadThumbnail(PackageManager pm) { 211465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler if (mThumbnailResource < 0) return null; 212465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler 213465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler return pm.getDrawable(mService.serviceInfo.packageName, 214465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler mThumbnailResource, 2158aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn mService.serviceInfo.applicationInfo); 216465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler } 21718a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler 21818a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler /** 21918a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler * Return a string indicating the author(s) of this wallpaper. 22018a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler */ 22118a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler public CharSequence loadAuthor(PackageManager pm) throws NotFoundException { 22218a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler if (mAuthorResource <= 0) throw new NotFoundException(); 2238aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn String packageName = mService.resolvePackageName; 2248aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn ApplicationInfo applicationInfo = null; 2258aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (packageName == null) { 2268aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn packageName = mService.serviceInfo.packageName; 2278aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn applicationInfo = mService.serviceInfo.applicationInfo; 2288aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 2298aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn return pm.getText(packageName, mAuthorResource, applicationInfo); 23018a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler } 23118a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler 23218a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler /** 23318a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler * Return a brief summary of this wallpaper's behavior. 23418a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler */ 23518a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler public CharSequence loadDescription(PackageManager pm) throws NotFoundException { 2368aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn String packageName = mService.resolvePackageName; 2378aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn ApplicationInfo applicationInfo = null; 2388aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (packageName == null) { 2398aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn packageName = mService.serviceInfo.packageName; 2408aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn applicationInfo = mService.serviceInfo.applicationInfo; 2418aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 2428aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn if (mService.serviceInfo.descriptionRes != 0) { 2438aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn return pm.getText(packageName, mService.serviceInfo.descriptionRes, 2448aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn applicationInfo); 2458aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn 2468aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn } 24718a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler if (mDescriptionResource <= 0) throw new NotFoundException(); 2488aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn return pm.getText(packageName, mDescriptionResource, 2498aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn mService.serviceInfo.applicationInfo); 25018a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler } 251465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler 252465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler /** 253eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Return the class name of an activity that provides a settings UI for 254eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * the wallpaper. You can launch this activity be starting it with 255eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * an {@link android.content.Intent} whose action is MAIN and with an 256eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * explicit {@link android.content.ComponentName} 257eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * composed of {@link #getPackageName} and the class name returned here. 258eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * 259eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * <p>A null will be returned if there is no settings activity associated 260eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * with the wallpaper. 261eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 262eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public String getSettingsActivity() { 263eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mSettingsActivityName; 264eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 265eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 266eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public void dump(Printer pw, String prefix) { 267eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn pw.println(prefix + "Service:"); 268eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mService.dump(pw, prefix + " "); 269eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn pw.println(prefix + "mSettingsActivityName=" + mSettingsActivityName); 270eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 271eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 272eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn @Override 273eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public String toString() { 274eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return "WallpaperInfo{" + mService.serviceInfo.name 275eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn + ", settings: " 276eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn + mSettingsActivityName + "}"; 277eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 278eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 279eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 280eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Used to package this object into a {@link Parcel}. 281eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * 282eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param dest The {@link Parcel} to be written. 283eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param flags The flags used for parceling. 284eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 285eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public void writeToParcel(Parcel dest, int flags) { 286eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dest.writeString(mSettingsActivityName); 287465ccb8a4083f5fdda429336f7f093c818eb78e5Daniel Sandler dest.writeInt(mThumbnailResource); 28818a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler dest.writeInt(mAuthorResource); 28918a509d8fa3ff31aeb8a503f1f2a3dd63bd359d7Daniel Sandler dest.writeInt(mDescriptionResource); 290eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mService.writeToParcel(dest, flags); 291eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 292eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 293eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 294eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Used to make this class parcelable. 295eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 296eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public static final Parcelable.Creator<WallpaperInfo> CREATOR = new Parcelable.Creator<WallpaperInfo>() { 297eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public WallpaperInfo createFromParcel(Parcel source) { 298eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return new WallpaperInfo(source); 299eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 300eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 301eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public WallpaperInfo[] newArray(int size) { 302eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return new WallpaperInfo[size]; 303eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 304eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn }; 305eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 306eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public int describeContents() { 307eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return 0; 308eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 309eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn} 310