Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 00c40636 authored by The Android Open Source Project's avatar The Android Open Source Project
Browse files

merge from open-source master

Change-Id: I7d167c97600bbf25e2ed8872cffecd9fa5b1db7c
parents 97ece591 b2dd9038
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -20,6 +20,20 @@
    android:title="@string/settings_label"
    android:key="parent">

        <!-- Operator hook -->

        <com.android.settings.IconPreferenceScreen
            android:key="operator_settings">
            <intent android:action="com.android.settings.OPERATOR_APPLICATION_SETTING" />
        </com.android.settings.IconPreferenceScreen>

        <!-- Manufacturer hook -->

        <com.android.settings.IconPreferenceScreen
            android:key="manufacturer_settings">
            <intent android:action="com.android.settings.MANUFACTURER_APPLICATION_SETTING" />
        </com.android.settings.IconPreferenceScreen>

        <com.android.settings.IconPreferenceScreen
            android:title="@string/radio_controls_title"
            settings:icon="@drawable/ic_settings_wireless">
+23 −0
Original line number Diff line number Diff line
@@ -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;
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -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
+112 −1
Original line number Diff line number Diff line
@@ -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);
    }

}
+21 −0
Original line number Diff line number Diff line
@@ -30,8 +30,29 @@
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="Operator" android:label="Operator Hook Test" >
            <intent-filter>
                <action android:name="com.android.settings.OPERATOR_APPLICATION_SETTING" />
            </intent-filter>
            <meta-data android:name="com.android.settings.title" android:resource="@string/operator_settings_title" />
            <meta-data android:name="com.android.settings.summary" android:resource="@string/operator_settings_summary" />
            <meta-data android:name="com.android.settings.icon" android:resource="@drawable/ic_settings_applications" />
        </activity>
        <activity android:name="Manufacturer" android:label="Manufacturer Hook Test" >
            <intent-filter>
                <action android:name="com.android.settings.MANUFACTURER_APPLICATION_SETTING" />
            </intent-filter>
            <meta-data android:name="com.android.settings.title" android:resource="@string/manufacturer_settings_title" />
            <meta-data android:name="com.android.settings.summary" android:resource="@string/manufacturer_settings_summary" />
            <meta-data android:name="com.android.settings.icon" android:resource="@drawable/ic_settings_applications" />
        </activity>
    </application>

    <instrumentation android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.android.settings"
        android:label="Settings App Tests">
    </instrumentation>

    <instrumentation android:name="SettingsLaunchPerformance"
        android:targetPackage="com.android.settings"
        android:label="Settings Launch Performance">
Loading