Merge "Showing widgets in a disabled state, when running in safe mode" into ub-now-queens
This commit is contained in:
@@ -44,6 +44,8 @@
|
||||
<string name="activity_not_available">App isn\'t available</string>
|
||||
<!-- SafeMode shortcut error string -->
|
||||
<string name="safemode_shortcut_error">Downloaded app disabled in Safe mode</string>
|
||||
<!-- SafeMode widget error string -->
|
||||
<string name="safemode_widget_error">Widgets disabled in Safe mode</string>
|
||||
<!-- Labels for the tabs in the customize drawer -->
|
||||
<string name="widgets_tab_label">Widgets</string>
|
||||
|
||||
|
||||
@@ -2535,6 +2535,11 @@ public class Launcher extends Activity
|
||||
* Event handler for the app widget view which has not fully restored.
|
||||
*/
|
||||
public void onClickPendingWidget(final PendingAppWidgetHostView v) {
|
||||
if (mIsSafeModeEnabled) {
|
||||
Toast.makeText(this, R.string.safemode_widget_error, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
final LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) v.getTag();
|
||||
if (v.isReadyForClickSetup()) {
|
||||
int widgetId = info.appWidgetId;
|
||||
@@ -2787,10 +2792,13 @@ public class Launcher extends Activity
|
||||
*/
|
||||
protected void onClickAddWidgetButton(View view) {
|
||||
if (LOGD) Log.d(TAG, "onClickAddWidgetButton");
|
||||
showAllApps(true, AppsCustomizePagedView.ContentType.Widgets, true);
|
||||
|
||||
if (mLauncherCallbacks != null) {
|
||||
mLauncherCallbacks.onClickAddWidgetButton(view);
|
||||
if (mIsSafeModeEnabled) {
|
||||
Toast.makeText(this, R.string.safemode_widget_error, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
showAllApps(true, AppsCustomizePagedView.ContentType.Widgets, true);
|
||||
if (mLauncherCallbacks != null) {
|
||||
mLauncherCallbacks.onClickAddWidgetButton(view);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4588,8 +4596,9 @@ public class Launcher extends Activity
|
||||
final Workspace workspace = mWorkspace;
|
||||
|
||||
AppWidgetProviderInfo appWidgetInfo;
|
||||
if (((item.restoreStatus & LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) == 0) &&
|
||||
((item.restoreStatus & LauncherAppWidgetInfo.FLAG_ID_NOT_VALID) != 0)) {
|
||||
if (!mIsSafeModeEnabled
|
||||
&& ((item.restoreStatus & LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) == 0)
|
||||
&& ((item.restoreStatus & LauncherAppWidgetInfo.FLAG_ID_NOT_VALID) != 0)) {
|
||||
|
||||
appWidgetInfo = mModel.findAppWidgetProviderInfoWithComponent(this, item.providerName);
|
||||
if (appWidgetInfo == null) {
|
||||
@@ -4639,7 +4648,7 @@ public class Launcher extends Activity
|
||||
LauncherModel.updateItemInDatabase(this, item);
|
||||
}
|
||||
|
||||
if (item.restoreStatus == LauncherAppWidgetInfo.RESTORE_COMPLETED) {
|
||||
if (!mIsSafeModeEnabled && item.restoreStatus == LauncherAppWidgetInfo.RESTORE_COMPLETED) {
|
||||
final int appWidgetId = item.appWidgetId;
|
||||
appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
|
||||
if (DEBUG_WIDGETS) {
|
||||
@@ -4649,7 +4658,8 @@ public class Launcher extends Activity
|
||||
item.hostView = mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo);
|
||||
} else {
|
||||
appWidgetInfo = null;
|
||||
PendingAppWidgetHostView view = new PendingAppWidgetHostView(this, item);
|
||||
PendingAppWidgetHostView view = new PendingAppWidgetHostView(this, item,
|
||||
mIsSafeModeEnabled);
|
||||
view.updateIcon(mIconCache);
|
||||
item.hostView = view;
|
||||
item.hostView.updateAppWidget(null);
|
||||
|
||||
@@ -2278,7 +2278,7 @@ public class LauncherModel extends BroadcastReceiver
|
||||
// App restore has started. Update the flag
|
||||
appWidgetInfo.restoreStatus |=
|
||||
LauncherAppWidgetInfo.FLAG_RESTORE_STARTED;
|
||||
} else if (REMOVE_UNRESTORED_ICONS) {
|
||||
} else if (REMOVE_UNRESTORED_ICONS && !isSafeMode) {
|
||||
Launcher.addDumpLog(TAG,
|
||||
"Unrestored widget removed: " + component, true);
|
||||
itemsToRemove.add(id);
|
||||
|
||||
@@ -41,9 +41,9 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView implemen
|
||||
private final LauncherAppWidgetInfo mInfo;
|
||||
private final int mStartState;
|
||||
private final Intent mIconLookupIntent;
|
||||
private final boolean mDisabledForSafeMode;
|
||||
|
||||
private Bitmap mIcon;
|
||||
private PreloadIconDrawable mDrawable;
|
||||
|
||||
private Drawable mCenterDrawable;
|
||||
private Drawable mTopCornerDrawable;
|
||||
@@ -53,11 +53,13 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView implemen
|
||||
private final TextPaint mPaint;
|
||||
private Layout mSetupTextLayout;
|
||||
|
||||
public PendingAppWidgetHostView(Context context, LauncherAppWidgetInfo info) {
|
||||
public PendingAppWidgetHostView(Context context, LauncherAppWidgetInfo info,
|
||||
boolean disabledForSafeMode) {
|
||||
super(context);
|
||||
mInfo = info;
|
||||
mStartState = info.restoreStatus;
|
||||
mIconLookupIntent = new Intent().setComponent(info.providerName);
|
||||
mDisabledForSafeMode = disabledForSafeMode;
|
||||
|
||||
mPaint = new TextPaint();
|
||||
mPaint.setColor(0xFFFFFFFF);
|
||||
@@ -106,14 +108,21 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView implemen
|
||||
return;
|
||||
}
|
||||
mIcon = icon;
|
||||
if (mDrawable != null) {
|
||||
mDrawable.setCallback(null);
|
||||
mDrawable = null;
|
||||
if (mCenterDrawable != null) {
|
||||
mCenterDrawable.setCallback(null);
|
||||
mCenterDrawable = null;
|
||||
}
|
||||
if (mIcon != null) {
|
||||
// The view displays two modes, one with a setup icon and another with a preload icon
|
||||
// in the center.
|
||||
if (isReadyForClickSetup()) {
|
||||
// The view displays three modes,
|
||||
// 1) App icon in the center
|
||||
// 2) Preload icon in the center
|
||||
// 3) Setup icon in the center and app icon in the top right corner.
|
||||
if (mDisabledForSafeMode) {
|
||||
FastBitmapDrawable disabledIcon = Utilities.createIconDrawable(mIcon);
|
||||
disabledIcon.setGhostModeEnabled(true);
|
||||
mCenterDrawable = disabledIcon;
|
||||
mTopCornerDrawable = null;
|
||||
} else if (isReadyForClickSetup()) {
|
||||
mCenterDrawable = getResources().getDrawable(R.drawable.ic_setting);
|
||||
mTopCornerDrawable = new FastBitmapDrawable(mIcon);
|
||||
} else {
|
||||
@@ -123,8 +132,9 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView implemen
|
||||
}
|
||||
|
||||
FastBitmapDrawable drawable = Utilities.createIconDrawable(mIcon);
|
||||
mDrawable = new PreloadIconDrawable(drawable, sPreloaderTheme);
|
||||
mDrawable.setCallback(this);
|
||||
mCenterDrawable = new PreloadIconDrawable(drawable, sPreloaderTheme);
|
||||
mCenterDrawable.setCallback(this);
|
||||
mTopCornerDrawable = null;
|
||||
applyState();
|
||||
}
|
||||
mDrawableSizeChanged = true;
|
||||
@@ -133,12 +143,12 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView implemen
|
||||
|
||||
@Override
|
||||
protected boolean verifyDrawable(Drawable who) {
|
||||
return (who == mDrawable) || super.verifyDrawable(who);
|
||||
return (who == mCenterDrawable) || super.verifyDrawable(who);
|
||||
}
|
||||
|
||||
public void applyState() {
|
||||
if (mDrawable != null) {
|
||||
mDrawable.setLevel(Math.max(mInfo.installProgress, 0));
|
||||
if (mCenterDrawable != null) {
|
||||
mCenterDrawable.setLevel(Math.max(mInfo.installProgress, 0));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,23 +168,30 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView implemen
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
if (mDrawable != null) {
|
||||
if (mCenterDrawable == null) {
|
||||
// Nothing to draw
|
||||
return;
|
||||
}
|
||||
|
||||
if (mTopCornerDrawable == null) {
|
||||
if (mDrawableSizeChanged) {
|
||||
int outset = (mCenterDrawable instanceof PreloadIconDrawable) ?
|
||||
((PreloadIconDrawable) mCenterDrawable).getOutset() : 0;
|
||||
int maxSize = LauncherAppState.getInstance().getDynamicGrid()
|
||||
.getDeviceProfile().iconSizePx + 2 * mDrawable.getOutset();
|
||||
.getDeviceProfile().iconSizePx + 2 * outset;
|
||||
int size = Math.min(maxSize, Math.min(
|
||||
getWidth() - getPaddingLeft() - getPaddingRight(),
|
||||
getHeight() - getPaddingTop() - getPaddingBottom()));
|
||||
|
||||
mRect.set(0, 0, size, size);
|
||||
mRect.inset(mDrawable.getOutset(), mDrawable.getOutset());
|
||||
mRect.inset(outset, outset);
|
||||
mRect.offsetTo((getWidth() - mRect.width()) / 2, (getHeight() - mRect.height()) / 2);
|
||||
mDrawable.setBounds(mRect);
|
||||
mCenterDrawable.setBounds(mRect);
|
||||
mDrawableSizeChanged = false;
|
||||
}
|
||||
|
||||
mDrawable.draw(canvas);
|
||||
} else if ((mCenterDrawable != null) && (mTopCornerDrawable != null)) {
|
||||
mCenterDrawable.draw(canvas);
|
||||
} else {
|
||||
// Draw the top corner icon and "Setup" text is possible
|
||||
if (mDrawableSizeChanged) {
|
||||
DeviceProfile grid = getDeviceProfile();
|
||||
int iconSize = grid.iconSizePx;
|
||||
|
||||
Reference in New Issue
Block a user