Fixing dimensions for AppWidgetProviderInfo not getting updated properly

for PinItemRequest

Test: Manually tested on device
Change-Id: I7bbf7e93e052ef25c2a4a98ff0795ef500f68cc0
This commit is contained in:
Sunny Goyal
2017-01-19 15:07:36 -08:00
parent a0ad738594
commit 970d4b4626
8 changed files with 28 additions and 31 deletions

View File

@@ -9849,7 +9849,7 @@ package android.content.pm {
method public boolean accept(android.os.Bundle);
method public boolean accept();
method public int describeContents();
method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo();
method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo(android.content.Context);
method public int getRequestType();
method public android.content.pm.ShortcutInfo getShortcutInfo();
method public boolean isValid();

View File

@@ -10277,7 +10277,7 @@ package android.content.pm {
method public boolean accept(android.os.Bundle);
method public boolean accept();
method public int describeContents();
method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo();
method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo(android.content.Context);
method public int getRequestType();
method public android.content.pm.ShortcutInfo getShortcutInfo();
method public boolean isValid();

View File

@@ -9877,7 +9877,7 @@ package android.content.pm {
method public boolean accept(android.os.Bundle);
method public boolean accept();
method public int describeContents();
method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo();
method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo(android.content.Context);
method public int getRequestType();
method public android.content.pm.ShortcutInfo getShortcutInfo();
method public boolean isValid();

View File

@@ -36,7 +36,6 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.DisplayMetrics;
import android.util.SparseArray;
import android.util.TypedValue;
import android.widget.RemoteViews;
import android.widget.RemoteViews.OnClickHandler;
@@ -381,15 +380,7 @@ public class AppWidgetHost {
// Convert complex to dp -- we are getting the AppWidgetProviderInfo from the
// AppWidgetService, which doesn't have our context, hence we need to do the
// conversion here.
appWidget.minWidth =
TypedValue.complexToDimensionPixelSize(appWidget.minWidth, mDisplayMetrics);
appWidget.minHeight =
TypedValue.complexToDimensionPixelSize(appWidget.minHeight, mDisplayMetrics);
appWidget.minResizeWidth =
TypedValue.complexToDimensionPixelSize(appWidget.minResizeWidth, mDisplayMetrics);
appWidget.minResizeHeight =
TypedValue.complexToDimensionPixelSize(appWidget.minResizeHeight, mDisplayMetrics);
appWidget.updateDimensions(mDisplayMetrics);
synchronized (mViews) {
v = mViews.get(appWidgetId);
}

View File

@@ -31,7 +31,6 @@ import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.widget.RemoteViews;
import com.android.internal.appwidget.IAppWidgetService;
@@ -760,7 +759,7 @@ public class AppWidgetManager {
}
for (AppWidgetProviderInfo info : providers.getList()) {
// Converting complex to dp.
convertSizesToPixels(info);
info.updateDimensions(mDisplayMetrics);
}
return providers.getList();
} catch (RemoteException e) {
@@ -782,7 +781,7 @@ public class AppWidgetManager {
AppWidgetProviderInfo info = mService.getAppWidgetInfo(mPackageName, appWidgetId);
if (info != null) {
// Converting complex to dp.
convertSizesToPixels(info);
info.updateDimensions(mDisplayMetrics);
}
return info;
} catch (RemoteException e) {
@@ -1072,18 +1071,6 @@ public class AppWidgetManager {
}
}
private void convertSizesToPixels(AppWidgetProviderInfo info) {
// Converting complex to dp.
info.minWidth = TypedValue.complexToDimensionPixelSize(info.minWidth,
mDisplayMetrics);
info.minHeight = TypedValue.complexToDimensionPixelSize(info.minHeight,
mDisplayMetrics);
info.minResizeWidth = TypedValue.complexToDimensionPixelSize(info.minResizeWidth,
mDisplayMetrics);
info.minResizeHeight = TypedValue.complexToDimensionPixelSize(info.minResizeHeight,
mDisplayMetrics);
}
/**
* Request to pin an app widget on the current launcher. It's up to the launcher to accept this
* request (optionally showing a user confirmation). If the request is accepted, the caller will

View File

@@ -26,6 +26,8 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.content.ComponentName;
import android.os.UserHandle;
import android.util.DisplayMetrics;
import android.util.TypedValue;
/**
* Describes the meta data for an installed AppWidget provider. The fields in this class
@@ -378,6 +380,17 @@ public class AppWidgetProviderInfo implements Parcelable {
return loadDefaultIcon ? providerInfo.loadIcon(context.getPackageManager()) : null;
}
/**
* @hide
*/
public void updateDimensions(DisplayMetrics displayMetrics) {
// Converting complex to dp.
minWidth = TypedValue.complexToDimensionPixelSize(minWidth, displayMetrics);
minHeight = TypedValue.complexToDimensionPixelSize(minHeight, displayMetrics);
minResizeWidth = TypedValue.complexToDimensionPixelSize(minResizeWidth, displayMetrics);
minResizeHeight = TypedValue.complexToDimensionPixelSize(minResizeHeight, displayMetrics);
}
/**
* Parcelable.Creator that instantiates AppWidgetProviderInfo objects
*/

View File

@@ -1249,8 +1249,13 @@ public class LauncherApps {
* {@link #REQUEST_TYPE_APPWIDGET} request.
*/
@Nullable
public AppWidgetProviderInfo getAppWidgetProviderInfo() {
return mAppWidgetInfo;
public AppWidgetProviderInfo getAppWidgetProviderInfo(Context context) {
if (mAppWidgetInfo != null) {
AppWidgetProviderInfo info = mAppWidgetInfo.clone();
info.updateDimensions(context.getResources().getDisplayMetrics());
return info;
}
return null;
}
/**

View File

@@ -83,7 +83,8 @@ public class ShortcutManagerTest9 extends BaseShortcutManagerTest {
private void assertPinItemRequest(PinItemRequest actualRequest, String className) {
assertNotNull(actualRequest);
assertEquals(PinItemRequest.REQUEST_TYPE_APPWIDGET, actualRequest.getRequestType());
assertEquals(className, actualRequest.getAppWidgetProviderInfo().provider.getClassName());
assertEquals(className, actualRequest.getAppWidgetProviderInfo(getTestContext())
.provider.getClassName());
}
public void testNotForeground() {