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