diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 256591447cf..420c09a4782 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -559,6 +559,17 @@ android:permission="android.permission.BIND_APPWIDGET" android:theme="@android:style/Theme.NoDisplay" android:exported="true" /> + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 683fdb5e60b..b7be599ad0b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1523,11 +1523,16 @@ found in the list of installed applications. (or other screens that can host gadgets). Note to translators: we're still determining the final name for Gadgets/Widgets, so please translate both for now. --> Choose gadget + Choose widget + + Live wallpaper + Details for UID %d diff --git a/src/com/android/settings/LiveWallpaperPickActivity.java b/src/com/android/settings/LiveWallpaperPickActivity.java new file mode 100644 index 00000000000..62d8e3c9bfd --- /dev/null +++ b/src/com/android/settings/LiveWallpaperPickActivity.java @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2009 The Android Open Source 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 com.android.settings; + +import android.app.WallpaperManager; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.RemoteException; +import android.service.wallpaper.WallpaperService; +import android.util.Log; + +import java.text.Collator; +import java.util.List; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +/** + * Displays a list of live wallpapers, allowing the user to select one + * and make it the system global wallpaper. + */ +public class LiveWallpaperPickActivity extends ActivityPicker { + private static final String TAG = "LiveWallpaperPickActivity"; + private static final boolean LOGD = false; + + private PackageManager mPackageManager; + private WallpaperManager mWallpaperManager; + + @Override + public void onCreate(Bundle icicle) { + mPackageManager = getPackageManager(); + mWallpaperManager = WallpaperManager.getInstance(this); + + super.onCreate(icicle); + + // Set default return data + setResult(RESULT_CANCELED); + } + + /** + * {@inheritDoc} + */ + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intent = getIntentForPosition(which); + try { + mWallpaperManager.getIWallpaperManager().setWallpaperComponent( + intent.getComponent()); + this.setResult(RESULT_OK); + } catch (RemoteException e) { + // do nothing + } catch (RuntimeException e) { + Log.w(TAG, "Failure setting wallpaper", e); + } + finish(); + } + + /** + * Create list entries for the given {@link AppWidgetProviderInfo} widgets, + * inserting extras if provided. + */ + void putAppWidgetItems(List ris, + List items) { + final int size = ris.size(); + for (int i = 0; i < size; i++) { + ServiceInfo si = ris.get(i).serviceInfo; + + CharSequence label = si.loadLabel(mPackageManager); + Drawable icon = si.loadIcon(mPackageManager); + + PickAdapter.Item item = new PickAdapter.Item(this, label, icon); + + item.packageName = si.packageName; + item.className = si.name; + + items.add(item); + } + } + + /** + * Build and return list of items to be shown in dialog. This will mix both + * installed {@link AppWidgetProviderInfo} and those provided through + * {@link AppWidgetManager#EXTRA_CUSTOM_INFO}, sorting them alphabetically. + */ + @Override + protected List getItems() { + List items = new ArrayList(); + + putInstalledAppWidgets(items); + + // Sort all items together by label + Collections.sort(items, new Comparator() { + Collator mCollator = Collator.getInstance(); + public int compare(PickAdapter.Item lhs, PickAdapter.Item rhs) { + return mCollator.compare(lhs.label, rhs.label); + } + }); + + return items; + } + + /** + * Create list entries for installed {@link AppWidgetProviderInfo} widgets. + */ + void putInstalledAppWidgets(List items) { + List ris = mPackageManager.queryIntentServices( + new Intent(WallpaperService.SERVICE_INTERFACE), 0); + putAppWidgetItems(ris, items); + } +}