diff options
-rw-r--r-- | res/values-fa/strings.xml | 10 | ||||
-rw-r--r-- | src/com/android/launcher2/AppWidgetResizeFrame.java | 24 | ||||
-rw-r--r-- | src/com/android/launcher2/AppsCustomizePagedView.java | 3 | ||||
-rw-r--r-- | src/com/android/launcher2/CellLayout.java | 54 | ||||
-rw-r--r-- | src/com/android/launcher2/LauncherModel.java | 17 |
5 files changed, 67 insertions, 41 deletions
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 4b769aa..9f48ef2 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -21,13 +21,13 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="application_name" msgid="8424725141379931883">"راه انداز"</string> <string name="home" msgid="5921706419368316758">"صفحهٔ اصلی"</string> - <string name="uid_name" msgid="3371120195364560632">"برنامه های Android Core"</string> + <string name="uid_name" msgid="3371120195364560632">"برنامههای Android Core"</string> <string name="folder_name" msgid="8551881338202938211"></string> <string name="chooser_wallpaper" msgid="6063168087625352235">"انتخاب تصویر زمینه از"</string> <string name="wallpaper_instructions" msgid="4215640646180727542">"تنظیم تصویر زمینه"</string> <string name="pick_wallpaper" msgid="5630222540525626723">"تصاویر زمینه"</string> <string name="activity_not_found" msgid="217823393239365967">"برنامه نصب نشده است."</string> - <string name="widgets_tab_label" msgid="9145860100000983599">"ابزارک ها"</string> + <string name="widgets_tab_label" msgid="9145860100000983599">"ابزارکها"</string> <string name="long_press_widget_to_add" msgid="7395697462851217506">"برای انتخاب یک ابزارک لمس کنید و نگه دارید."</string> <string name="market" msgid="2652226429823445833">"فروشگاه"</string> <string name="external_drop_widget_error" msgid="2285187188524172774">"این مورد را نمیتوان در این صفحهٔ اصلی رها کرد."</string> @@ -39,7 +39,7 @@ <string name="menu_item_add_item" msgid="6233177331075781114">"افزودن به صفحهٔ اصلی"</string> <string name="group_applications" msgid="2103752818818161976">"برنامهها"</string> <string name="group_shortcuts" msgid="9133529424900391877">"میانبرها"</string> - <string name="group_widgets" msgid="6704978494073105844">"ابزارک ها"</string> + <string name="group_widgets" msgid="6704978494073105844">"ابزارکها"</string> <string name="group_wallpapers" msgid="1568191644272224858">"تصاویر زمینه"</string> <string name="completely_out_of_space" msgid="1759078539443491182">"فضای بیشتری در صفحات نمایش اصلی شما موجود نیست."</string> <string name="out_of_space" msgid="8365249326091984698">"اتاق دیگری در این صفحهٔ اصلی موجود نیست."</string> @@ -50,7 +50,7 @@ <string name="shortcut_duplicate" msgid="4757756326465060694">"میانبر \"<xliff:g id="NAME">%s</xliff:g>\" در حال حاضر وجود دارد."</string> <string name="title_select_shortcut" msgid="1873670208166882222">"انتخاب میانبر"</string> <string name="title_select_application" msgid="1793455815754848652">"انتخاب برنامه"</string> - <string name="all_apps_button_label" msgid="2578400570124163469">"برنامه های کاربردی"</string> + <string name="all_apps_button_label" msgid="2578400570124163469">"برنامههای کاربردی"</string> <string name="all_apps_home_button_label" msgid="1022222300329398558">"صفحهٔ اصلی"</string> <string name="delete_zone_label_workspace" msgid="7153615831493049150">"حذف"</string> <string name="delete_zone_label_all_apps" msgid="6664588234817475108">"حذف نصب"</string> @@ -63,7 +63,7 @@ <string name="accessibility_delete_button" msgid="3628162007991023603">"حذف"</string> <string name="delete_zone_label_all_apps_system_app" msgid="3683920959591819044">"حذف نصب بهروزرسانی"</string> <string name="menu_add" msgid="3065046628354640854">"افزودن"</string> - <string name="menu_manage_apps" msgid="2308685199463588895">"مدیریت برنامه ها"</string> + <string name="menu_manage_apps" msgid="2308685199463588895">"مدیریت برنامهها"</string> <string name="menu_wallpaper" msgid="5837429080911269832">"تصویر زمینه"</string> <string name="menu_search" msgid="4826514464423239041">"جستجو"</string> <string name="menu_notifications" msgid="6424587053194766192">"اعلانها"</string> diff --git a/src/com/android/launcher2/AppWidgetResizeFrame.java b/src/com/android/launcher2/AppWidgetResizeFrame.java index e8b1dc0..2070eb6 100644 --- a/src/com/android/launcher2/AppWidgetResizeFrame.java +++ b/src/com/android/launcher2/AppWidgetResizeFrame.java @@ -53,6 +53,9 @@ public class AppWidgetResizeFrame extends FrameLayout { private int mBackgroundPadding; private int mTouchTargetWidth; + private int mTopTouchRegionAdjustment = 0; + private int mBottomTouchRegionAdjustment = 0; + int[] mDirectionVector = new int[2]; final int SNAP_DURATION = 150; @@ -139,10 +142,12 @@ public class AppWidgetResizeFrame extends FrameLayout { public boolean beginResizeIfPointInRegion(int x, int y) { boolean horizontalActive = (mResizeMode & AppWidgetProviderInfo.RESIZE_HORIZONTAL) != 0; boolean verticalActive = (mResizeMode & AppWidgetProviderInfo.RESIZE_VERTICAL) != 0; + mLeftBorderActive = (x < mTouchTargetWidth) && horizontalActive; mRightBorderActive = (x > getWidth() - mTouchTargetWidth) && horizontalActive; - mTopBorderActive = (y < mTouchTargetWidth) && verticalActive; - mBottomBorderActive = (y > getHeight() - mTouchTargetWidth) && verticalActive; + mTopBorderActive = (y < mTouchTargetWidth + mTopTouchRegionAdjustment) && verticalActive; + mBottomBorderActive = (y > getHeight() - mTouchTargetWidth + mBottomTouchRegionAdjustment) + && verticalActive; boolean anyBordersActive = mLeftBorderActive || mRightBorderActive || mTopBorderActive || mBottomBorderActive; @@ -378,13 +383,20 @@ public class AppWidgetResizeFrame extends FrameLayout { int newX = mWidgetView.getLeft() - mBackgroundPadding + xOffset + mWidgetPaddingLeft; int newY = mWidgetView.getTop() - mBackgroundPadding + yOffset + mWidgetPaddingTop; - // We need to make sure the frame stays within the bounds of the CellLayout + // We need to make sure the frame's touchable regions lie fully within the bounds of the + // DragLayer. We allow the actual handles to be clipped, but we shift the touch regions + // down accordingly to provide a proper touch target. if (newY < 0) { - newHeight -= -newY; - newY = 0; + // In this case we shift the touch region down to start at the top of the DragLayer + mTopTouchRegionAdjustment = -newY; + } else { + mTopTouchRegionAdjustment = 0; } if (newY + newHeight > mDragLayer.getHeight()) { - newHeight -= newY + newHeight - mDragLayer.getHeight(); + // In this case we shift the touch region up to end at the bottom of the DragLayer + mBottomTouchRegionAdjustment = -(newY + newHeight - mDragLayer.getHeight()); + } else { + mBottomTouchRegionAdjustment = 0; } if (!animate) { diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java index 84bdc96..80fc62f 100644 --- a/src/com/android/launcher2/AppsCustomizePagedView.java +++ b/src/com/android/launcher2/AppsCustomizePagedView.java @@ -1736,7 +1736,6 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen ApplicationInfo info = list.get(i); int removeIndex = findAppByComponent(mApps, info); if (removeIndex > -1) { - Log.d(TAG, "Removing app in removeAppsWithoutInvalidate: " + info); mApps.remove(removeIndex); } } @@ -1746,8 +1745,6 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen for (String pn : packageNames) { int removeIndex = findAppByPackage(mApps, pn); while (removeIndex > -1) { - Log.d(TAG, "Removing app in removeAppsWithPackageNameWithoutInvalidate: " - + mApps.get(removeIndex)); mApps.remove(removeIndex); removeIndex = findAppByPackage(mApps, pn); } diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java index aa8c132..3ad1336 100644 --- a/src/com/android/launcher2/CellLayout.java +++ b/src/com/android/launcher2/CellLayout.java @@ -1538,7 +1538,6 @@ public class CellLayout extends ViewGroup { int x = cellX + direction[0]; int y = cellY + direction[1]; while (x >= 0 && x + spanX <= mCountX && y >= 0 && y + spanY <= mCountY) { - boolean fail = false; for (int i = 0; i < spanX; i++) { for (int j = 0; j < spanY; j++) { @@ -1581,8 +1580,9 @@ public class CellLayout extends ViewGroup { return success; } - // This method looks in the specified direction to see if there is an additional view - // immediately adjecent in that direction + // This method looks in the specified direction to see if there are additional views adjacent + // to the current set of views in the. If there is, then these views are added to the current + // set of views. This is performed iteratively, giving a cascading push behaviour. private boolean addViewInDirection(ArrayList<View> views, Rect boundingRect, int[] direction, boolean[][] occupied, View dragView, ItemConfiguration currentState) { boolean found = false; @@ -1591,23 +1591,27 @@ public class CellLayout extends ViewGroup { Rect r0 = new Rect(boundingRect); Rect r1 = new Rect(); + // First, we consider the rect of the views that we are trying to translate int deltaX = 0; int deltaY = 0; if (direction[1] < 0) { - r0.set(r0.left, r0.top - 1, r0.right, r0.bottom); + r0.set(r0.left, r0.top - 1, r0.right, r0.bottom - 1); deltaY = -1; } else if (direction[1] > 0) { - r0.set(r0.left, r0.top, r0.right, r0.bottom + 1); + r0.set(r0.left, r0.top + 1, r0.right, r0.bottom + 1); deltaY = 1; } else if (direction[0] < 0) { - r0.set(r0.left - 1, r0.top, r0.right, r0.bottom); + r0.set(r0.left - 1, r0.top, r0.right - 1, r0.bottom); deltaX = -1; } else if (direction[0] > 0) { - r0.set(r0.left, r0.top, r0.right + 1, r0.bottom); + r0.set(r0.left + 1, r0.top, r0.right + 1, r0.bottom); deltaX = 1; } + // Now we see which views, if any, are being overlapped by shifting the current group + // of views in the desired direction. for (int i = 0; i < childCount; i++) { + // We don't need to worry about views already in our group, or the current drag view. View child = mShortcutsAndWidgets.getChildAt(i); if (views.contains(child) || child == dragView) continue; CellAndSpan c = currentState.map.get(child); @@ -1618,20 +1622,30 @@ public class CellLayout extends ViewGroup { if (!lp.canReorder) { return false; } - boolean pushed = false; - for (int x = c.x; x < c.x + c.spanX; x++) { - for (int y = c.y; y < c.y + c.spanY; y++) { - boolean inBounds = x - deltaX >= 0 && x -deltaX < mCountX - && y - deltaY >= 0 && y - deltaY < mCountY; - if (inBounds && occupied[x - deltaX][y - deltaY]) { - pushed = true; + // First we verify that the view in question is at the border of the extents + // of the block of items we are pushing + if ((direction[0] < 0 && c.x == r0.left) || + (direction[0] > 0 && c.x == r0.right - 1) || + (direction[1] < 0 && c.y == r0.top) || + (direction[1] > 0 && c.y == r0.bottom - 1)) { + boolean pushed = false; + // Since the bounding rect is a course description of the region (there can + // be holes at the edge of the block), we need to check to verify that a solid + // piece is intersecting. This ensures that interlocking is possible. + for (int x = c.x; x < c.x + c.spanX; x++) { + for (int y = c.y; y < c.y + c.spanY; y++) { + if (occupied[x - deltaX][y - deltaY]) { + pushed = true; + break; + } + if (pushed) break; } } - } - if (pushed) { - views.add(child); - boundingRect.union(c.x, c.y, c.x + c.spanX, c.y + c.spanY); - found = true; + if (pushed) { + views.add(child); + boundingRect.union(c.x, c.y, c.x + c.spanX, c.y + c.spanY); + found = true; + } } } } @@ -1672,7 +1686,7 @@ public class CellLayout extends ViewGroup { int top = boundingRect.top; int left = boundingRect.left; // We mark more precisely which parts of the bounding rect are truly occupied, allowing - // for tetris-style interlocking. + // for interlocking. for (View v: dup) { CellAndSpan c = currentState.map.get(v); markCellsForView(c.x - left, c.y - top, c.spanX, c.spanY, blockOccupied, true); diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java index e8674ce..7dcea91 100644 --- a/src/com/android/launcher2/LauncherModel.java +++ b/src/com/android/launcher2/LauncherModel.java @@ -1939,20 +1939,23 @@ public class LauncherModel extends BroadcastReceiver { ArrayList<ApplicationInfo> modified = null; if (mBgAllAppsList.added.size() > 0) { - added = mBgAllAppsList.added; - mBgAllAppsList.added = new ArrayList<ApplicationInfo>(); + added = new ArrayList<ApplicationInfo>(mBgAllAppsList.added); + mBgAllAppsList.added.clear(); } if (mBgAllAppsList.modified.size() > 0) { - modified = mBgAllAppsList.modified; - mBgAllAppsList.modified = new ArrayList<ApplicationInfo>(); + modified = new ArrayList<ApplicationInfo>(mBgAllAppsList.modified); + mBgAllAppsList.modified.clear(); } - // We may be removing packages that have no associated launcher application, so we // pass through the removed package names directly. // NOTE: We flush the icon cache aggressively in removePackage() above. final ArrayList<String> removedPackageNames = new ArrayList<String>(); - for (int i = 0; i < N; ++i) { - removedPackageNames.add(packages[i]); + if (mBgAllAppsList.removed.size() > 0) { + mBgAllAppsList.removed.clear(); + + for (int i = 0; i < N; ++i) { + removedPackageNames.add(packages[i]); + } } final Callbacks callbacks = mCallbacks != null ? mCallbacks.get() : null; |