diff options
author | Dianne Hackborn <hackbod@google.com> | 2009-08-08 20:56:11 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2009-08-08 21:01:32 -0700 |
commit | e25e4e4c57e68d3c3b33d25e06430faca90abea7 (patch) | |
tree | c2b3ab5897acfb243c23557954e60cdef8395249 | |
parent | ede25bc845e18e39037c08224bdeea21ca5b3ee8 (diff) | |
download | packages_apps_Settings-e25e4e4c57e68d3c3b33d25e06430faca90abea7.zip packages_apps_Settings-e25e4e4c57e68d3c3b33d25e06430faca90abea7.tar.gz packages_apps_Settings-e25e4e4c57e68d3c3b33d25e06430faca90abea7.tar.bz2 |
Add new activity for picking live wallpapers.
-rw-r--r-- | AndroidManifest.xml | 11 | ||||
-rw-r--r-- | res/values/strings.xml | 5 | ||||
-rw-r--r-- | src/com/android/settings/LiveWallpaperPickActivity.java | 129 |
3 files changed, 145 insertions, 0 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 2565914..420c09a 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" /> + <!-- Standard picker for live wallpapers --> + <activity android:name="LiveWallpaperPickActivity" + android:label="@string/live_wallpaper_picker_title" + android:theme="@*android:style/Theme.Dialog.Alert"> + <intent-filter> + <action android:name="android.service.wallpaper.LIVE_WALLPAPER_CHOOSER" /> + <action android:name="android.intent.action.SET_WALLPAPER" /> + <category android:name="android.intent.category.DEFAULT" /> + </intent-filter> + </activity> + <activity android:name="UsageStats" android:label="@string/usage_stats_label"> <intent-filter> <action android:name="android.intent.action.MAIN" /> diff --git a/res/values/strings.xml b/res/values/strings.xml index 683fdb5..b7be599 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1523,11 +1523,16 @@ found in the list of installed applications.</string> (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. --> <string name="gadget_picker_title">Choose gadget</string> + <!-- Title for the screen that lets the user choose a widget to add to the home screen (or other screens that can host widgets). Note to translators: we're still determining the final name for Gadgets/Widgets, so please translate both for now. --> <string name="widget_picker_title">Choose widget</string> + <!-- Title for the screen that lets the user choose a live wallpaper to use + for the system. --> + <string name="live_wallpaper_picker_title">Live wallpaper</string> + <!-- Used to display "Details for UID 1234" in BatteryHistory --> <string name="battery_history_details_for">Details for UID %d</string> diff --git a/src/com/android/settings/LiveWallpaperPickActivity.java b/src/com/android/settings/LiveWallpaperPickActivity.java new file mode 100644 index 0000000..62d8e3c --- /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<ResolveInfo> ris, + List<PickAdapter.Item> 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<PickAdapter.Item> getItems() { + List<PickAdapter.Item> items = new ArrayList<PickAdapter.Item>(); + + putInstalledAppWidgets(items); + + // Sort all items together by label + Collections.sort(items, new Comparator<PickAdapter.Item>() { + 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<PickAdapter.Item> items) { + List<ResolveInfo> ris = mPackageManager.queryIntentServices( + new Intent(WallpaperService.SERVICE_INTERFACE), 0); + putAppWidgetItems(ris, items); + } +} |