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 java.io.IOException; 203330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport java.util.List; 213330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 223330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport org.xmlpull.v1.XmlPullParserException; 233330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 243330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.app.Activity; 253330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.app.WallpaperInfo; 263330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.app.WallpaperManager; 273330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.os.Bundle; 283330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.os.Parcelable; 293330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.content.ComponentName; 303330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.content.Intent; 313330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.content.pm.PackageManager; 323330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.content.pm.PackageManager.NameNotFoundException; 333330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.content.pm.ResolveInfo; 343330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.content.pm.ServiceInfo; 353330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.service.wallpaper.WallpaperService; 363330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornimport android.util.Log; 373330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 383330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackbornpublic class LiveWallpaperChange extends Activity { 393330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn private static final String TAG = "CHANGE_LIVE_WALLPAPER"; 403330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 413330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn @Override 423330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn protected void onCreate(Bundle savedInstanceState) { 433330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn super.onCreate(savedInstanceState); 443330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 453330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Parcelable obj = getIntent().getParcelableExtra( 463330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT); 473330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn if (obj == null || !(obj instanceof ComponentName)) { 483330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Log.w(TAG, "No LIVE_WALLPAPER_COMPONENT extra supplied"); 493330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn finish(); 503330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn return; 513330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 523330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 533330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn ComponentName comp = (ComponentName)obj; 543330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 553330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn // Get the information about this component. Implemented this way 563330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn // to not allow us to direct the caller to a service that is not a 573330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn // live wallpaper. 583330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Intent queryIntent = new Intent(WallpaperService.SERVICE_INTERFACE); 593330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn queryIntent.setPackage(comp.getPackageName()); 603330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn List<ResolveInfo> list = getPackageManager().queryIntentServices( 613330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn queryIntent, PackageManager.GET_META_DATA); 623330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn if (list != null) { 633330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn for (int i=0; i<list.size(); i++) { 643330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn ResolveInfo ri = list.get(i); 653330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn if (ri.serviceInfo.name.equals(comp.getClassName())) { 663330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn WallpaperInfo info = null; 673330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn try { 683330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn info = new WallpaperInfo(this, ri); 693330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } catch (XmlPullParserException e) { 703330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Log.w(TAG, "Bad wallpaper " + ri.serviceInfo, e); 713330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn finish(); 723330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn return; 733330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } catch (IOException e) { 743330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Log.w(TAG, "Bad wallpaper " + ri.serviceInfo, e); 753330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn finish(); 763330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn return; 773330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 783330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE); 793330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn intent.setClassName(info.getPackageName(), info.getServiceName()); 803330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn LiveWallpaperPreview.showPreview(this, 0, intent, info); 813330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn finish(); 823330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn return; 833330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 843330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 853330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 863330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn 873330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn Log.w(TAG, "Not a live wallpaper: " + comp); 883330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn finish(); 893330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn } 903330e415f17012e42ba6c1a2e2df5dd6392f3af7Dianne Hackborn} 91