summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2012-06-01 17:17:08 -0700
committerAdam Cohen <adamcohen@google.com>2012-06-04 12:18:04 -0700
commit06dff35763bc46884b6464a9bf4406d32cdcaea4 (patch)
tree197f97d8c6e43df01730841136db5bbd9c4f515d /src
parent1fa57ee628a135dbbf34af43765ecf9d43c37cbc (diff)
downloadandroid_packages_apps_Trebuchet-06dff35763bc46884b6464a9bf4406d32cdcaea4.tar.gz
android_packages_apps_Trebuchet-06dff35763bc46884b6464a9bf4406d32cdcaea4.tar.bz2
android_packages_apps_Trebuchet-06dff35763bc46884b6464a9bf4406d32cdcaea4.zip
Fixing issue where widgets could be inflated in wrong orientation (issue 6584646)
Change-Id: I24ea7f59345e8f62daf36c13cb43e1ab0180e805
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher2/Launcher.java25
-rw-r--r--src/com/android/launcher2/LauncherAppWidgetHostView.java22
-rw-r--r--src/com/android/launcher2/LauncherModel.java4
3 files changed, 51 insertions, 0 deletions
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index b2f27b960..3354d49bd 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -682,6 +682,31 @@ public final class Launcher extends Activity
// Resets the previous all apps icon press state
mAppsCustomizeContent.resetDrawableState();
}
+ // It is possible that widgets can receive updates while launcher is not in the foreground.
+ // Consequently, the widgets will be inflated in the orientation of the foreground activity
+ // (framework issue). On resuming, we ensure that any widgets are inflated for the current
+ // orientation.
+ reinflateWidgetsIfNecessary();
+ }
+
+ void reinflateWidgetsIfNecessary() {
+ for (LauncherAppWidgetInfo info: LauncherModel.getWidgets()) {
+ LauncherAppWidgetHostView lahv = (LauncherAppWidgetHostView) info.hostView;
+ if (lahv != null && lahv.orientationChangedSincedInflation()) {
+ AppWidgetProviderInfo pInfo = lahv.getAppWidgetInfo();
+
+ // Remove the current widget which is inflated with the wrong orientation
+ getWorkspace().getParentCellLayoutForView(lahv).removeView(lahv);
+ // Re-inflate the widget using the correct orientation
+ AppWidgetHostView widget = mAppWidgetHost.createView(this, info.appWidgetId, pInfo);
+
+ // Add the new widget back
+ widget.setTag(info);
+ info.hostView = widget;
+ getWorkspace().addInScreen(widget, info.container, info.screen,
+ info.cellX, info.cellY, info.spanX, info.spanY);
+ }
+ }
}
@Override
diff --git a/src/com/android/launcher2/LauncherAppWidgetHostView.java b/src/com/android/launcher2/LauncherAppWidgetHostView.java
index e34196ee6..9970c7675 100644
--- a/src/com/android/launcher2/LauncherAppWidgetHostView.java
+++ b/src/com/android/launcher2/LauncherAppWidgetHostView.java
@@ -18,10 +18,14 @@ package com.android.launcher2;
import android.appwidget.AppWidgetHostView;
import android.content.Context;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.os.Parcel;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.RemoteViews;
import com.android.launcher.R;
@@ -31,9 +35,12 @@ import com.android.launcher.R;
public class LauncherAppWidgetHostView extends AppWidgetHostView {
private CheckLongPressHelper mLongPressHelper;
private LayoutInflater mInflater;
+ private Context mContext;
+ private int mPreviousOrientation;
public LauncherAppWidgetHostView(Context context) {
super(context);
+ mContext = context;
mLongPressHelper = new CheckLongPressHelper(this);
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@@ -43,6 +50,21 @@ public class LauncherAppWidgetHostView extends AppWidgetHostView {
return mInflater.inflate(R.layout.appwidget_error, this, false);
}
+ @Override
+ public void updateAppWidget(RemoteViews remoteViews) {
+ // Store the orientation in which the widget was inflated
+ mPreviousOrientation = mContext.getResources().getConfiguration().orientation;
+ super.updateAppWidget(remoteViews);
+ }
+
+ public boolean orientationChangedSincedInflation() {
+ int orientation = mContext.getResources().getConfiguration().orientation;
+ if (mPreviousOrientation != orientation) {
+ return true;
+ }
+ return false;
+ }
+
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Consume any touch events for ourselves after longpress is triggered
if (mLongPressHelper.hasPerformedLongPress()) {
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index fc1a26d4b..1b17ef952 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -377,6 +377,10 @@ public class LauncherModel extends BroadcastReceiver {
return items;
}
+ static ArrayList<LauncherAppWidgetInfo> getWidgets() {
+ return sAppWidgets;
+ }
+
/**
* Find a folder in the db, creating the FolderInfo if necessary, and adding it to folderList.
*/