13330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn/* 23330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * Copyright (C) 2009 The Android Open Source Project 33330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * 43330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 53330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * you may not use this file except in compliance with the License. 63330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * You may obtain a copy of the License at 73330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * 83330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 93330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * 103330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 113330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 123330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * See the License for the specific language governing permissions and 143330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn * limitations under the License. 153330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn */ 163330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 173330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornpackage com.android.wallpaper.livepicker; 183330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 193330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.app.WallpaperInfo; 203330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.app.WallpaperManager; 213330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.content.ComponentName; 223330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.content.Intent; 233330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.content.pm.PackageManager; 243330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.content.pm.ResolveInfo; 25702996867bf80dd6652a46303cc06568e6f78369Sunny Goyalimport android.os.Parcelable; 263330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.service.wallpaper.WallpaperService; 273330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.util.Log; 283330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 29702996867bf80dd6652a46303cc06568e6f78369Sunny Goyalimport org.xmlpull.v1.XmlPullParserException; 30702996867bf80dd6652a46303cc06568e6f78369Sunny Goyal 31702996867bf80dd6652a46303cc06568e6f78369Sunny Goyalimport java.io.IOException; 32702996867bf80dd6652a46303cc06568e6f78369Sunny Goyalimport java.util.List; 33702996867bf80dd6652a46303cc06568e6f78369Sunny Goyal 34702996867bf80dd6652a46303cc06568e6f78369Sunny Goyalpublic class LiveWallpaperChange extends LiveWallpaperPreview { 353330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn private static final String TAG = "CHANGE_LIVE_WALLPAPER"; 363330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 373330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn @Override 38702996867bf80dd6652a46303cc06568e6f78369Sunny Goyal protected void init() { 393330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Parcelable obj = getIntent().getParcelableExtra( 403330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT); 413330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn if (obj == null || !(obj instanceof ComponentName)) { 423330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Log.w(TAG, "No LIVE_WALLPAPER_COMPONENT extra supplied"); 433330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn finish(); 443330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn return; 453330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 463330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 473330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn ComponentName comp = (ComponentName)obj; 483330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 493330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn // Get the information about this component. Implemented this way 503330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn // to not allow us to direct the caller to a service that is not a 513330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn // live wallpaper. 523330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Intent queryIntent = new Intent(WallpaperService.SERVICE_INTERFACE); 533330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn queryIntent.setPackage(comp.getPackageName()); 543330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn List<ResolveInfo> list = getPackageManager().queryIntentServices( 553330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn queryIntent, PackageManager.GET_META_DATA); 563330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn if (list != null) { 573330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn for (int i=0; i<list.size(); i++) { 583330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn ResolveInfo ri = list.get(i); 593330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn if (ri.serviceInfo.name.equals(comp.getClassName())) { 60702996867bf80dd6652a46303cc06568e6f78369Sunny Goyal WallpaperInfo info; 613330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn try { 623330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn info = new WallpaperInfo(this, ri); 63702996867bf80dd6652a46303cc06568e6f78369Sunny Goyal } catch (XmlPullParserException|IOException e) { 643330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Log.w(TAG, "Bad wallpaper " + ri.serviceInfo, e); 653330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn finish(); 663330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn return; 673330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 68702996867bf80dd6652a46303cc06568e6f78369Sunny Goyal 69702996867bf80dd6652a46303cc06568e6f78369Sunny Goyal initUI(info); 703330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn return; 713330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 723330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 733330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 743330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 753330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Log.w(TAG, "Not a live wallpaper: " + comp); 763330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn finish(); 773330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 783330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn} 79