Update Settings for new Dreams architecture.

Additionally, hide all Dreams settings if the feature is
disabled (R.bool.config_enableDreams).

(Depends on change Idfe9d430)

Change-Id: Ifa05f125e411ca58605c33481de26cd29a926807
This commit is contained in:
Daniel Sandler
2012-02-01 14:14:18 -05:00
parent c8732db7e5
commit 47c991f78c
3 changed files with 108 additions and 33 deletions

View File

@@ -83,6 +83,11 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
mAccelerometer.setPersistent(false); mAccelerometer.setPersistent(false);
mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER); mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER);
if (mScreenSaverPreference != null
&& getResources().getBoolean(
com.android.internal.R.bool.config_enableDreams) == false) {
getPreferenceScreen().removePreference(mScreenSaverPreference);
}
mScreenTimeoutPreference = (ListPreference) findPreference(KEY_SCREEN_TIMEOUT); mScreenTimeoutPreference = (ListPreference) findPreference(KEY_SCREEN_TIMEOUT);
final long currentTimeout = Settings.System.getLong(resolver, SCREEN_OFF_TIMEOUT, final long currentTimeout = Settings.System.getLong(resolver, SCREEN_OFF_TIMEOUT,
@@ -108,6 +113,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found"); Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found");
} }
} }
} }
private void updateTimeoutPreferenceDescription(long currentTimeout) { private void updateTimeoutPreferenceDescription(long currentTimeout) {

View File

@@ -25,11 +25,17 @@ import android.content.ContentResolver;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.preference.Preference; import android.preference.Preference;
import android.provider.Settings; import android.provider.Settings;
import android.service.dreams.IDreamManager;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
@@ -43,6 +49,7 @@ import android.widget.ImageView;
import android.widget.ListAdapter; import android.widget.ListAdapter;
import android.widget.TextView; import android.widget.TextView;
import java.text.Collator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
@@ -51,10 +58,13 @@ import java.util.List;
public class DreamComponentPreference extends Preference { public class DreamComponentPreference extends Preference {
private static final String TAG = "DreamComponentPreference"; private static final String TAG = "DreamComponentPreference";
private static final boolean SHOW_DOCK_APPS_TOO = true; private static final boolean SHOW_DOCK_APPS = false;
private static final boolean SHOW_DREAM_SERVICES = true;
private static final boolean SHOW_DREAM_ACTIVITIES = false;
private final PackageManager pm; private final PackageManager pm;
private final ContentResolver resolver; private final ContentResolver resolver;
private final Collator sCollator = Collator.getInstance();
public DreamComponentPreference(Context context, AttributeSet attrs) { public DreamComponentPreference(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
@@ -65,30 +75,50 @@ public class DreamComponentPreference extends Preference {
} }
private void refreshFromSettings() { private void refreshFromSettings() {
String component = Settings.Secure.getString(resolver, SCREENSAVER_COMPONENT); ComponentName cn = null;
if (component == null) { IDreamManager dm = IDreamManager.Stub.asInterface(
component = getContext().getResources().getString( ServiceManager.getService("dreams"));
com.android.internal.R.string.config_defaultDreamComponent); try {
cn = dm.getDreamComponent();
} catch (RemoteException ex) {
setSummary("(unknown)");
return;
} }
if (component != null) {
ComponentName cn = ComponentName.unflattenFromString(component); try {
setSummary(pm.getActivityInfo(cn, 0).loadLabel(pm));
} catch (PackageManager.NameNotFoundException ex) {
try { try {
setSummary(pm.getActivityInfo(cn, 0).loadLabel(pm)); setSummary(pm.getServiceInfo(cn, 0).loadLabel(pm));
} catch (PackageManager.NameNotFoundException ex) { } catch (PackageManager.NameNotFoundException ex2) {
setSummary("(unknown)"); setSummary("(unknown)");
} }
} }
} }
final static Comparator<ResolveInfo> sResolveInfoComparator = new Comparator<ResolveInfo>() { // Group by package, then by name.
Comparator<ResolveInfo> sResolveInfoComparator = new Comparator<ResolveInfo>() {
@Override @Override
public int compare(ResolveInfo a, ResolveInfo b) { public int compare(ResolveInfo a, ResolveInfo b) {
int cmp = a.activityInfo.applicationInfo.packageName.compareTo( CharSequence sa, sb;
b.activityInfo.applicationInfo.packageName);
if (cmp == 0) { ApplicationInfo aia = a.activityInfo != null ? a.activityInfo.applicationInfo : a.serviceInfo.applicationInfo;
cmp = a.activityInfo.name.compareTo(b.activityInfo.name); ApplicationInfo aib = b.activityInfo != null ? b.activityInfo.applicationInfo : b.serviceInfo.applicationInfo;
if (!aia.equals(aib)) {
sa = pm.getApplicationLabel(aia);
sb = pm.getApplicationLabel(aib);
} else {
sa = a.loadLabel(pm);
if (sa == null) {
sa = (a.activityInfo != null) ? a.activityInfo.name : a.serviceInfo.name;
}
sb = b.loadLabel(pm);
if (sb == null) {
sb = (b.activityInfo != null) ? b.activityInfo.name : b.serviceInfo.name;
}
} }
return cmp; return sCollator.compare(sa.toString(), sb.toString());
} }
}; };
@@ -102,12 +132,20 @@ public class DreamComponentPreference extends Preference {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
results = new ArrayList<ResolveInfo>(pm.queryIntentActivities(choosy, 0)); results = new ArrayList<ResolveInfo>();
if (SHOW_DREAM_ACTIVITIES) {
results.addAll(pm.queryIntentActivities(choosy, PackageManager.GET_META_DATA));
}
if (SHOW_DREAM_SERVICES) {
results.addAll(pm.queryIntentServices(choosy, PackageManager.GET_META_DATA));
}
// Group by package // Group by package
Collections.sort(results, sResolveInfoComparator); Collections.sort(results, sResolveInfoComparator);
if (SHOW_DOCK_APPS_TOO) { if (SHOW_DOCK_APPS) {
choosy = new Intent(Intent.ACTION_MAIN) choosy = new Intent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_DESK_DOCK); .addCategory(Intent.CATEGORY_DESK_DOCK);
@@ -137,6 +175,22 @@ public class DreamComponentPreference extends Preference {
return (long) position; return (long) position;
} }
private CharSequence loadDescription(ResolveInfo ri) {
CharSequence desc = null;
if (ri != null) {
Bundle metaData = (ri.activityInfo != null) ? ri.activityInfo.metaData : ri.serviceInfo.metaData;
Log.d(TAG, "loadDescription: ri=" + ri + " metaData=" + metaData);
if (metaData != null) {
desc = metaData.getCharSequence("android.screensaver.description");
Log.d(TAG, "loadDescription: desc=" + desc);
if (desc != null) {
desc = desc.toString().trim();
}
}
}
return desc;
}
@Override @Override
public View getView(int position, View convertView, ViewGroup parent) { public View getView(int position, View convertView, ViewGroup parent) {
View row = (convertView != null) View row = (convertView != null)
@@ -159,16 +213,21 @@ public class DreamComponentPreference extends Preference {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
ResolveInfo ri = (ResolveInfo)list.getItem(which); ResolveInfo ri = (ResolveInfo)list.getItem(which);
ActivityInfo act = ri.activityInfo; String pn = (ri.activityInfo != null) ? ri.activityInfo.applicationInfo.packageName
ComponentName cn = new ComponentName( : ri.serviceInfo.applicationInfo.packageName;
act.applicationInfo.packageName, String n = (ri.activityInfo != null) ? ri.activityInfo.name : ri.serviceInfo.name;
act.name); ComponentName cn = new ComponentName(pn, n);
Intent intent = new Intent(Intent.ACTION_MAIN).setComponent(cn);
setSummary(ri.loadLabel(pm)); setSummary(ri.loadLabel(pm));
//getContext().startActivity(intent); //getContext().startActivity(intent);
Settings.Secure.putString(resolver, SCREENSAVER_COMPONENT, cn.flattenToString()); IDreamManager dm = IDreamManager.Stub.asInterface(
ServiceManager.getService("dreams"));
try {
dm.setDreamComponent(cn);
} catch (RemoteException ex) {
// too bad, so sad, oh mom, oh dad
}
} }
}) })
.create(); .create();

View File

@@ -28,8 +28,11 @@ import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.preference.Preference; import android.preference.Preference;
import android.provider.Settings; import android.provider.Settings;
import android.service.dreams.IDreamManager;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
@@ -65,13 +68,20 @@ public class DreamTesterPreference extends Preference {
if (component != null) { if (component != null) {
ComponentName cn = ComponentName.unflattenFromString(component); ComponentName cn = ComponentName.unflattenFromString(component);
Log.v(TAG, "cn=" + cn); Log.v(TAG, "cn=" + cn);
Intent intent = new Intent(Intent.ACTION_MAIN) // Intent intent = new Intent(Intent.ACTION_MAIN)
.setComponent(cn) // .setComponent(cn)
.addFlags( // .addFlags(
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS // Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
) // )
.putExtra("android.dreams.TEST", true); // .putExtra("android.dreams.TEST", true);
getContext().startActivity(intent); // getContext().startService(intent);
IDreamManager dm = IDreamManager.Stub.asInterface(
ServiceManager.getService("dreams"));
try {
dm.testDream(cn);
} catch (RemoteException ex) {
// too bad, so sad, oh mom, oh dad
}
} }
} }
} }