summaryrefslogtreecommitdiffstats
path: root/services/java
diff options
context:
space:
mode:
Diffstat (limited to 'services/java')
-rw-r--r--services/java/com/android/server/AppWidgetService.java11
-rw-r--r--services/java/com/android/server/AppWidgetServiceImpl.java79
2 files changed, 79 insertions, 11 deletions
diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java
index 343e70d..385681e 100644
--- a/services/java/com/android/server/AppWidgetService.java
+++ b/services/java/com/android/server/AppWidgetService.java
@@ -215,15 +215,18 @@ class AppWidgetService extends IAppWidgetService.Stub
}
@Override
- public void bindAppWidgetId(int appWidgetId, ComponentName provider) throws RemoteException {
- getImplForUser(UserHandle.getCallingUserId()).bindAppWidgetId(appWidgetId, provider);
+ public void bindAppWidgetId(int appWidgetId, ComponentName provider, Bundle options)
+ throws RemoteException {
+ getImplForUser(UserHandle.getCallingUserId()).bindAppWidgetId(appWidgetId, provider,
+ options);
}
@Override
public boolean bindAppWidgetIdIfAllowed(
- String packageName, int appWidgetId, ComponentName provider) throws RemoteException {
+ String packageName, int appWidgetId, ComponentName provider, Bundle options)
+ throws RemoteException {
return getImplForUser(UserHandle.getCallingUserId()).bindAppWidgetIdIfAllowed(
- packageName, appWidgetId, provider);
+ packageName, appWidgetId, provider, options);
}
@Override
diff --git a/services/java/com/android/server/AppWidgetServiceImpl.java b/services/java/com/android/server/AppWidgetServiceImpl.java
index 57ab921..95d7623 100644
--- a/services/java/com/android/server/AppWidgetServiceImpl.java
+++ b/services/java/com/android/server/AppWidgetServiceImpl.java
@@ -316,6 +316,8 @@ class AppWidgetServiceImpl {
pw.print(info.updatePeriodMillis);
pw.print(" resizeMode=");
pw.print(info.resizeMode);
+ pw.print(info.widgetCategory);
+ pw.print(info.widgetFeatures);
pw.print(" autoAdvanceViewId=");
pw.print(info.autoAdvanceViewId);
pw.print(" initialLayout=#");
@@ -527,7 +529,7 @@ class AppWidgetServiceImpl {
}
}
- private void bindAppWidgetIdImpl(int appWidgetId, ComponentName provider) {
+ private void bindAppWidgetIdImpl(int appWidgetId, ComponentName provider, Bundle options) {
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mAppWidgetIds) {
@@ -550,6 +552,17 @@ class AppWidgetServiceImpl {
}
id.provider = p;
+ if (options == null) {
+ options = new Bundle();
+ }
+ id.options = options;
+
+ // We need to provide a default value for the widget category if it is not specified
+ if (!options.containsKey(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY)) {
+ options.putInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY,
+ AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN);
+ }
+
p.instances.add(id);
int instancesSize = p.instances.size();
if (instancesSize == 1) {
@@ -572,14 +585,14 @@ class AppWidgetServiceImpl {
}
}
- public void bindAppWidgetId(int appWidgetId, ComponentName provider) {
+ public void bindAppWidgetId(int appWidgetId, ComponentName provider, Bundle options) {
mContext.enforceCallingPermission(android.Manifest.permission.BIND_APPWIDGET,
"bindAppWidgetId appWidgetId=" + appWidgetId + " provider=" + provider);
- bindAppWidgetIdImpl(appWidgetId, provider);
+ bindAppWidgetIdImpl(appWidgetId, provider, options);
}
public boolean bindAppWidgetIdIfAllowed(
- String packageName, int appWidgetId, ComponentName provider) {
+ String packageName, int appWidgetId, ComponentName provider, Bundle options) {
try {
mContext.enforceCallingPermission(android.Manifest.permission.BIND_APPWIDGET, null);
} catch (SecurityException se) {
@@ -587,7 +600,7 @@ class AppWidgetServiceImpl {
return false;
}
}
- bindAppWidgetIdImpl(appWidgetId, provider);
+ bindAppWidgetIdImpl(appWidgetId, provider, options);
return true;
}
@@ -873,15 +886,18 @@ class AppWidgetServiceImpl {
if (id == null) {
return;
}
+
Provider p = id.provider;
- id.options = options;
+ // Merge the options
+ id.options.putAll(options);
// send the broacast saying that this appWidgetId has been deleted
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_OPTIONS_CHANGED);
intent.setComponent(p.info.provider);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id.appWidgetId);
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options);
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, id.options);
mContext.sendBroadcastAsUser(intent, new UserHandle(mUserId));
+ saveStateLocked();
}
}
@@ -1325,6 +1341,8 @@ class AppWidgetServiceImpl {
com.android.internal.R.styleable.AppWidgetProviderInfo_updatePeriodMillis, 0);
info.initialLayout = sa.getResourceId(
com.android.internal.R.styleable.AppWidgetProviderInfo_initialLayout, 0);
+ info.initialKeyguardLayout = sa.getResourceId(com.android.internal.R.styleable.
+ AppWidgetProviderInfo_initialKeyguardLayout, 0);
String className = sa
.getString(com.android.internal.R.styleable.AppWidgetProviderInfo_configure);
if (className != null) {
@@ -1339,6 +1357,12 @@ class AppWidgetServiceImpl {
info.resizeMode = sa.getInt(
com.android.internal.R.styleable.AppWidgetProviderInfo_resizeMode,
AppWidgetProviderInfo.RESIZE_NONE);
+ info.widgetCategory = sa.getInt(
+ com.android.internal.R.styleable.AppWidgetProviderInfo_resizeMode,
+ AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN);
+ info.widgetFeatures = sa.getInt(
+ com.android.internal.R.styleable.AppWidgetProviderInfo_resizeMode,
+ AppWidgetProviderInfo.WIDGET_FEATURES_NONE);
sa.recycle();
} catch (Exception e) {
@@ -1476,6 +1500,18 @@ class AppWidgetServiceImpl {
if (id.provider != null) {
out.attribute(null, "p", Integer.toHexString(id.provider.tag));
}
+ if (id.options != null) {
+ out.attribute(null, "min_width", Integer.toHexString(id.options.getInt(
+ AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH)));
+ out.attribute(null, "min_height", Integer.toHexString(id.options.getInt(
+ AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT)));
+ out.attribute(null, "max_width", Integer.toHexString(id.options.getInt(
+ AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH)));
+ out.attribute(null, "max_height", Integer.toHexString(id.options.getInt(
+ AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT)));
+ out.attribute(null, "host_category", Integer.toHexString(id.options.getInt(
+ AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY)));
+ }
out.endTag(null, "g");
}
@@ -1496,6 +1532,7 @@ class AppWidgetServiceImpl {
}
}
+ @SuppressWarnings("unused")
void readStateFromFileLocked(FileInputStream stream) {
boolean success = false;
try {
@@ -1569,6 +1606,34 @@ class AppWidgetServiceImpl {
mNextAppWidgetId = id.appWidgetId + 1;
}
+ Bundle options = new Bundle();
+ String minWidthString = parser.getAttributeValue(null, "min_width");
+ if (minWidthString != null) {
+ options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH,
+ Integer.parseInt(minWidthString, 16));
+ }
+ String minHeightString = parser.getAttributeValue(null, "min_height");
+ if (minWidthString != null) {
+ options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT,
+ Integer.parseInt(minHeightString, 16));
+ }
+ String maxWidthString = parser.getAttributeValue(null, "max_height");
+ if (minWidthString != null) {
+ options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH,
+ Integer.parseInt(maxWidthString, 16));
+ }
+ String maxHeightString = parser.getAttributeValue(null, "max_height");
+ if (minWidthString != null) {
+ options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT,
+ Integer.parseInt(maxHeightString, 16));
+ }
+ String categoryString = parser.getAttributeValue(null, "host_category");
+ if (minWidthString != null) {
+ options.putInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY,
+ Integer.parseInt(categoryString, 16));
+ }
+ id.options = options;
+
String providerString = parser.getAttributeValue(null, "p");
if (providerString != null) {
// there's no provider if it hasn't been bound yet.