merge from froyo-plus-aosp

Change-Id: I6c6ee9c9567f5aef7e1beb585296c1e2fb884e9a
This commit is contained in:
The Android Open Source Project
2010-06-14 11:48:15 -07:00
13 changed files with 426 additions and 3 deletions

View File

@@ -22,6 +22,7 @@ import android.graphics.drawable.Drawable;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class IconPreferenceScreen extends Preference {
@@ -48,4 +49,26 @@ public class IconPreferenceScreen extends Preference {
imageView.setImageDrawable(mIcon);
}
}
/**
* Sets the icon for this Preference with a Drawable.
*
* @param icon The icon for this Preference
*/
public void setIcon(Drawable icon) {
if ((icon == null && mIcon != null) || (icon != null && !icon.equals(mIcon))) {
mIcon = icon;
notifyChanged();
}
}
/**
* Returns the icon of this Preference.
*
* @return The icon.
* @see #setIcon(Drawable)
*/
public Drawable getIcon() {
return mIcon;
}
}

View File

@@ -30,6 +30,9 @@ public class Settings extends PreferenceActivity {
private static final String KEY_SEARCH_SETTINGS = "search_settings";
private static final String KEY_DOCK_SETTINGS = "dock_settings";
private static final String KEY_OPERATOR_SETTINGS = "operator_settings";
private static final String KEY_MANUFACTURER_SETTINGS = "manufacturer_settings";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -46,6 +49,11 @@ public class Settings extends PreferenceActivity {
if (getResources().getBoolean(R.bool.has_dock_settings) == false && dockSettings != null) {
parent.removePreference(dockSettings);
}
Utils.updatePreferenceToSpecificActivityFromMetaDataOrRemove(this, parent,
KEY_OPERATOR_SETTINGS);
Utils.updatePreferenceToSpecificActivityFromMetaDataOrRemove(this, parent,
KEY_MANUFACTURER_SETTINGS);
}
@Override

View File

@@ -22,8 +22,14 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.SystemProperties;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.content.res.Resources.NotFoundException;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceGroup;
import android.text.TextUtils;
import java.util.List;
@@ -34,6 +40,24 @@ public class Utils {
*/
public static final int UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY = 1;
/**
* Name of the meta-data item that should be set in the AndroidManifest.xml
* to specify the icon that should be displayed for the preference.
*/
private static final String META_DATA_PREFERENCE_ICON = "com.android.settings.icon";
/**
* Name of the meta-data item that should be set in the AndroidManifest.xml
* to specify the title that should be displayed for the preference.
*/
private static final String META_DATA_PREFERENCE_TITLE = "com.android.settings.title";
/**
* Name of the meta-data item that should be set in the AndroidManifest.xml
* to specify the summary text that should be displayed for the preference.
*/
private static final String META_DATA_PREFERENCE_SUMMARY = "com.android.settings.summary";
/**
* Finds a matching activity for a preference's intent. If a matching
* activity is not found, it will remove the preference.
@@ -89,11 +113,98 @@ public class Utils {
return true;
}
/**
* Finds a matching activity for a preference's intent. If a matching
* activity is not found, it will remove the preference. The icon, title and
* summary of the preference will also be updated with the values retrieved
* from the activity's meta-data elements. If no meta-data elements are
* specified then the preference title will be set to match the label of the
* activity, an icon and summary text will not be displayed.
*
* @param context The context.
* @param parentPreferenceGroup The preference group that contains the
* preference whose intent is being resolved.
* @param preferenceKey The key of the preference whose intent is being
* resolved.
*
* @return Whether an activity was found. If false, the preference was
* removed.
*
* @see {@link #META_DATA_PREFERENCE_ICON}
* {@link #META_DATA_PREFERENCE_TITLE}
* {@link #META_DATA_PREFERENCE_SUMMARY}
*/
public static boolean updatePreferenceToSpecificActivityFromMetaDataOrRemove(Context context,
PreferenceGroup parentPreferenceGroup, String preferenceKey) {
IconPreferenceScreen preference = (IconPreferenceScreen)parentPreferenceGroup
.findPreference(preferenceKey);
if (preference == null) {
return false;
}
Intent intent = preference.getIntent();
if (intent != null) {
// Find the activity that is in the system image
PackageManager pm = context.getPackageManager();
List<ResolveInfo> list = pm.queryIntentActivities(intent, PackageManager.GET_META_DATA);
int listSize = list.size();
for (int i = 0; i < listSize; i++) {
ResolveInfo resolveInfo = list.get(i);
if ((resolveInfo.activityInfo.applicationInfo.flags
& ApplicationInfo.FLAG_SYSTEM) != 0) {
Drawable icon = null;
String title = null;
String summary = null;
// Get the activity's meta-data
try {
Resources res = pm
.getResourcesForApplication(resolveInfo.activityInfo.packageName);
Bundle metaData = resolveInfo.activityInfo.metaData;
if (res != null && metaData != null) {
icon = res.getDrawable(metaData.getInt(META_DATA_PREFERENCE_ICON));
title = res.getString(metaData.getInt(META_DATA_PREFERENCE_TITLE));
summary = res.getString(metaData.getInt(META_DATA_PREFERENCE_SUMMARY));
}
} catch (NameNotFoundException e) {
// Ignore
} catch (NotFoundException e) {
// Ignore
}
// Set the preference title to the activity's label if no
// meta-data is found
if (TextUtils.isEmpty(title)) {
title = resolveInfo.loadLabel(pm).toString();
}
// Set icon, title and summary for the preference
preference.setIcon(icon);
preference.setTitle(title);
preference.setSummary(summary);
// Replace the intent with this specific activity
preference.setIntent(new Intent().setClassName(
resolveInfo.activityInfo.packageName,
resolveInfo.activityInfo.name));
return true;
}
}
}
// Did not find a matching activity, so remove the preference
parentPreferenceGroup.removePreference(preference);
return false;
}
/**
* Returns true if Monkey is running.
*/
public static boolean isMonkeyRunning() {
return SystemProperties.getBoolean("ro.monkey", false);
}
}

View File

@@ -204,7 +204,7 @@ public class QuickLaunchSettings extends PreferenceActivity implements
return true;
}
public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
// Open the clear shortcut dialog
Preference pref = (Preference) getPreferenceScreen().getRootAdapter().getItem(position);
@@ -314,7 +314,7 @@ public class QuickLaunchSettings extends PreferenceActivity implements
String intentUri = c.getString(intentColumn);
PackageManager packageManager = getPackageManager();
try {
Intent intent = Intent.getIntent(intentUri);
Intent intent = Intent.parseUri(intentUri, 0);
ResolveInfo info = packageManager.resolveActivity(intent, 0);
if (info != null) {
title = info.loadLabel(packageManager);