Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
e
os
BlissLauncher
Commits
d13159f2
Commit
d13159f2
authored
Dec 14, 2021
by
Amit Kumar
💻
Browse files
Fix folder pager issue
parent
10dac382
Pipeline
#151769
passed with stage
in 2 minutes and 35 seconds
Changes
6
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
app/src/main/java/foundation/e/blisslauncher/core/customviews/Folder.kt
View file @
d13159f2
...
...
@@ -22,6 +22,7 @@ import android.view.accessibility.AccessibilityEvent
import
android.view.inputmethod.EditorInfo
import
android.widget.TextView
import
android.widget.TextView.OnEditorActionListener
import
androidx.viewpager.widget.ViewPager
import
foundation.e.blisslauncher.R
import
foundation.e.blisslauncher.core.database.model.FolderItem
import
foundation.e.blisslauncher.core.database.model.LauncherItem
...
...
@@ -127,7 +128,7 @@ class Folder @JvmOverloads constructor(
fun
startDrag
(
v
:
View
,
options
:
DragOptions
):
Boolean
{
val
tag
=
v
.
tag
if
(
tag
is
LauncherItem
)
{
val
item
:
LauncherItem
=
tag
as
LauncherItem
val
item
:
LauncherItem
=
tag
mEmptyCellRank
=
item
.
cell
mCurrentDragView
=
v
dragController
!!
.
addDragListener
(
this
)
...
...
@@ -264,6 +265,7 @@ class Folder @JvmOverloads constructor(
}
override
fun
onAdd
(
item
:
LauncherItem
)
{
// mContent.adapter?.notifyDataSetChanged()
}
override
fun
onTitleChanged
(
title
:
CharSequence
?)
{}
...
...
@@ -291,7 +293,9 @@ class Folder @JvmOverloads constructor(
}
override
fun
onItemsChanged
(
animate
:
Boolean
)
{
mContent
.
adapter
?.
notifyDataSetChanged
()
updateTextViewFocus
()
invalidate
()
}
override
fun
onDragStart
(
dragObject
:
DropTarget
.
DragObject
,
options
:
DragOptions
)
{
...
...
@@ -380,6 +384,21 @@ class Folder @JvmOverloads constructor(
val
mDeviceProfile
:
VariantDeviceProfile
=
launcher
.
deviceProfile
mContent
.
adapter
=
FolderPagerAdapter
(
context
,
mInfo
.
items
,
mDeviceProfile
)
mContent
.
addOnPageChangeListener
(
object
:
ViewPager
.
OnPageChangeListener
{
override
fun
onPageScrolled
(
position
:
Int
,
positionOffset
:
Float
,
positionOffsetPixels
:
Int
)
{
}
override
fun
onPageSelected
(
position
:
Int
)
{
updateTextViewFocus
()
}
override
fun
onPageScrollStateChanged
(
state
:
Int
)
{
}
})
// We use same size for height and width as we want to look it like square
val
height
=
mDeviceProfile
.
cellHeightPx
*
3
+
resources
.
getDimensionPixelSize
(
R
.
dimen
.
folder_padding
)
...
...
@@ -389,8 +408,6 @@ class Folder @JvmOverloads constructor(
(
mDeviceProfile
.
cellHeightPx
+
mDeviceProfile
.
iconDrawablePaddingPx
*
2
)
*
3
+
resources
.
getDimensionPixelSize
(
R
.
dimen
.
folder_padding
)
*
2
mPageIndicator
.
setViewPager
(
mContent
)
// In case any children didn't come across during loading, clean up the folder accordingly
folderIcon
?.
post
{
if
(
getItemCount
()
<=
1
)
{
...
...
@@ -452,7 +469,17 @@ class Folder @JvmOverloads constructor(
// Just verify that the folder hasn't already been added to the DragLayer.
// There was a one-off crash where the folder had a parent already.
if
(
parent
==
null
)
{
dragLayer
.
addView
(
this
,
BaseDragLayer
.
LayoutParams
(
ViewGroup
.
LayoutParams
.
MATCH_PARENT
,
ViewGroup
.
LayoutParams
.
MATCH_PARENT
))
mContent
.
adapter
=
FolderPagerAdapter
(
context
,
mInfo
.
items
,
launcher
.
deviceProfile
)
mPageIndicator
.
setViewPager
(
mContent
)
dragLayer
.
addView
(
this
,
BaseDragLayer
.
LayoutParams
(
ViewGroup
.
LayoutParams
.
MATCH_PARENT
,
ViewGroup
.
LayoutParams
.
MATCH_PARENT
)
)
}
else
{
Log
.
e
(
TAG
,
...
...
@@ -471,6 +498,7 @@ class Folder @JvmOverloads constructor(
// dropping. One resulting issue is that replaceFolderWithFinalItem() can be called twice.
mDeleteFolderOnDropCompleted
=
false
// centerAboutIcon()
Log
.
i
(
TAG
,
"animateOpen: "
+
mContent
.
getItemCount
()
+
" "
+
mInfo
.
items
.
size
)
val
anim
:
AnimatorSet
=
FolderAnimationManager
(
this
,
true
/* isOpening */
).
animator
anim
.
play
(
ObjectAnimator
.
ofFloat
(
launcher
.
getLauncherPagedView
(),
View
.
ALPHA
,
0f
))
.
with
(
ObjectAnimator
.
ofFloat
(
launcher
.
hotseat
,
View
.
ALPHA
,
0f
))
...
...
@@ -614,6 +642,23 @@ class Folder @JvmOverloads constructor(
var
mOnExitAlarmListener
:
OnAlarmListener
=
OnAlarmListener
{
completeDragExit
()
}
override
fun
onDropCompleted
(
target
:
View
?,
d
:
DropTarget
.
DragObject
?,
success
:
Boolean
)
{
if
(
success
)
{
if
(
mDeleteFolderOnDropCompleted
&&
!
mItemAddedBackToSelfViaIcon
&&
target
!==
this
)
{
replaceFolderWithFinalItem
()
}
}
else
{
// The drag failed, we need to return the item to the folder
mContent
.
adapter
?.
notifyDataSetChanged
()
}
mDeleteFolderOnDropCompleted
=
false
mDragInProgress
=
false
mItemAddedBackToSelfViaIcon
=
false
mCurrentDragView
=
null
// Reordering may have occured, and we need to save the new item locations. We do this once
// at the end to prevent unnecessary database operations.
launcher
.
getLauncherPagedView
().
updateDatabase
()
}
override
fun
onBackPressed
():
Boolean
{
...
...
app/src/main/java/foundation/e/blisslauncher/core/customviews/LauncherPagedView.java
View file @
d13159f2
...
...
@@ -333,7 +333,10 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V
LauncherItem
launcherItem
=
launcherItems
.
get
(
i
);
View
appView
;
if
(
launcherItem
.
itemType
==
Constants
.
ITEM_TYPE_FOLDER
)
{
FolderIcon
folderIcon
=
FolderIcon
.
Companion
.
fromXml
(
R
.
layout
.
folder_icon
,
getScreenWithId
(
launcherItem
.
screenId
),
(
FolderItem
)
launcherItem
);
FolderIcon
folderIcon
=
FolderIcon
.
Companion
.
fromXml
(
R
.
layout
.
folder_icon
,
getScreenWithId
(
launcherItem
.
screenId
),
(
FolderItem
)
launcherItem
);
folderIcon
.
applyFromFolderItem
((
FolderItem
)
launcherItem
);
appView
=
folderIcon
;
}
else
{
...
...
@@ -1527,7 +1530,7 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V
/**
* Unbinds the view for the specified item, and removes the item and all its children.
*
* @param v the view being removed.
* @param v
the view being removed.
* @param itemInfo the {@link LauncherItem} for this view.
*/
public
boolean
removeItem
(
View
v
,
final
LauncherItem
itemInfo
)
{
...
...
@@ -1683,7 +1686,7 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V
if
(
d
.
dragSource
!=
this
||
mDragInfo
==
null
)
{
final
int
[]
touchXY
=
new
int
[]{(
int
)
mDragViewVisualCenter
[
0
],
(
int
)
mDragViewVisualCenter
[
1
]};
//onDropExternal(touchXY, dropTargetLayout, d);
//
onDropExternal(touchXY, dropTargetLayout, d);
}
else
{
final
View
cell
=
mDragInfo
.
getCell
();
boolean
droppedOnOriginalCellDuringTransition
=
false
;
...
...
@@ -1899,52 +1902,51 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V
LauncherItem
sourceItem
=
(
LauncherItem
)
newView
.
getTag
();
LauncherItem
destItem
=
(
LauncherItem
)
targetView
.
getTag
();
Rect
folderLocation
=
new
Rect
();
// if the drag started here, we need to remove it from the workspace
if
(!
external
)
{
getParentCellLayoutForView
(
mDragInfo
.
getCell
()).
removeView
(
mDragInfo
.
getCell
());
}
targetView
.
clearAnimation
();
target
.
removeView
(
targetView
);
FolderItem
fi
=
new
FolderItem
();
final
FolderItem
fi
=
new
FolderItem
();
fi
.
title
=
getResources
().
getString
(
R
.
string
.
untitled
);
fi
.
id
=
String
.
valueOf
(
System
.
currentTimeMillis
());
fi
.
items
=
new
ArrayList
<>();
fi
.
container
=
destItem
.
container
;
fi
.
screenId
=
destItem
.
screenId
;
fi
.
cell
=
destItem
.
cell
;
// Create the view
FolderIcon
newFolder
=
FolderIcon
.
Companion
.
fromXml
(
R
.
layout
.
folder_icon
,
target
,
fi
);
addInScreen
(
newFolder
,
fi
);
// Force measure the new folder icon
CellLayout
parent
=
getParentCellLayoutForView
(
newFolder
);
parent
.
measureChild
(
newFolder
);
sourceItem
.
container
=
Long
.
parseLong
(
fi
.
id
);
destItem
.
container
=
Long
.
parseLong
(
fi
.
id
);
sourceItem
.
screenId
=
-
1
;
destItem
.
screenId
=
-
1
;
sourceItem
.
cell
=
fi
.
items
.
size
();
fi
.
items
.
add
(
sourceItem
);
destItem
.
cell
=
fi
.
items
.
size
();
fi
.
items
.
add
(
destItem
);
Drawable
folderIcon
=
new
GraphicsUtil
(
getContext
()).
generateFolderIcon
(
getContext
(),
sourceItem
.
icon
,
destItem
.
icon
);
fi
.
icon
=
folderIcon
;
fi
.
container
=
container
;
fi
.
screenId
=
screenId
;
fi
.
cell
=
targetCell
[
1
]
*
mLauncher
.
getDeviceProfile
().
getInv
()
.
getNumColumns
()
+
targetCell
[
0
];
FolderIcon
folderView
=
(
FolderIcon
)
LayoutInflater
.
from
(
getContext
())
.
inflate
(
R
.
layout
.
folder_icon
,
null
,
false
);
folderView
.
applyFromShortcutItem
(
fi
);
folderView
.
setOnClickListener
(
ItemClickHandler
.
INSTANCE
);
folderView
.
setOnLongClickListener
(
ItemLongClickListener
.
INSTANCE_WORKSPACE
);
fi
.
addListener
(
folderView
);
addInScreen
(
folderView
,
fi
);
// if the drag started here, we need to remove it from the workspace
if
(!
external
)
{
getParentCellLayoutForView
(
mDragInfo
.
getCell
()).
removeView
(
mDragInfo
.
getCell
());
}
//Add animation here.
dragView
.
remove
();
destItem
.
cell
=
0
;
sourceItem
.
cell
=
1
;
newFolder
.
addItem
(
destItem
);
newFolder
.
addItem
(
sourceItem
);
updateDatabase
(
getWorkspaceAndHotseatCellLayouts
());
// Clear drag view
dragView
.
remove
();
dragView
=
null
;
invalidate
();
post
(()
->
{
if
(
fi
.
cell
%
2
==
0
)
{
f
older
View
newF
older
.
startAnimation
(
AnimationUtils
.
loadAnimation
(
getContext
(),
R
.
anim
.
wobble
));
}
else
{
f
older
View
.
startAnimation
(
AnimationUtils
newF
older
.
startAnimation
(
AnimationUtils
.
loadAnimation
(
getContext
(),
R
.
anim
.
wobble_reverse
));
}
f
older
View
.
applyUninstallIconState
(
false
);
newF
older
.
applyUninstallIconState
(
false
);
});
return
true
;
}
...
...
@@ -1965,16 +1967,12 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V
if
(!
mAddToExistingFolderOnDrop
)
return
false
;
mAddToExistingFolderOnDrop
=
false
;
if
((
dropOverView
instanceof
IconTextView
)
&&
(
dropOverView
.
getTag
()
instanceof
FolderItem
))
{
FolderItem
fi
=
(
FolderItem
)
dropOverView
.
getTag
();
LauncherItem
sourceItem
=
(
LauncherItem
)
newView
.
getTag
();
sourceItem
.
container
=
Long
.
parseLong
(
fi
.
id
);
sourceItem
.
screenId
=
-
1
;
sourceItem
.
cell
=
fi
.
items
.
size
();
fi
.
items
.
add
(
sourceItem
);
fi
.
icon
=
new
GraphicsUtil
(
getContext
()).
generateFolderIcon
(
getContext
(),
fi
);
((
IconTextView
)
dropOverView
).
applyFromShortcutItem
(
fi
);
if
(
dropOverView
instanceof
FolderIcon
)
{
FolderIcon
folderIcon
=
(
FolderIcon
)
dropOverView
;
if
(
folderIcon
.
acceptDrop
())
{
LauncherItem
item
=
d
.
dragInfo
;
folderIcon
.
addItem
(
item
);
}
// if the drag started here, we need to remove it from the workspace
if
(!
external
)
{
getParentCellLayoutForView
(
mDragInfo
.
getCell
()).
removeView
(
mDragInfo
.
getCell
());
...
...
@@ -2298,6 +2296,10 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V
return
alarmPending
;
}
public
boolean
isWobbling
()
{
return
wobbleExpireAlarm
.
alarmPending
();
}
@Override
public
boolean
acceptDrop
(
DragObject
dragObject
)
{
CellLayout
dropTargetLayout
=
mDropToLayout
;
...
...
app/src/main/java/foundation/e/blisslauncher/core/database/model/FolderItem.java
View file @
d13159f2
...
...
@@ -2,7 +2,9 @@ package foundation.e.blisslauncher.core.database.model;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
import
foundation.e.blisslauncher.core.Utilities
;
import
foundation.e.blisslauncher.core.utils.Constants
;
import
java.util.ArrayList
;
...
...
@@ -50,6 +52,27 @@ public class FolderItem extends LauncherItem {
}
}
/**
* Add an app or shortcut
*
* @param item
*/
public
void
add
(
LauncherItem
item
,
boolean
animate
)
{
add
(
item
,
items
.
size
(),
animate
);
}
/**
* Add an app or shortcut for a specified rank.
*/
public
void
add
(
LauncherItem
item
,
int
rank
,
boolean
animate
)
{
rank
=
Utilities
.
boundToRange
(
rank
,
0
,
items
.
size
());
items
.
add
(
rank
,
item
);
for
(
int
i
=
0
;
i
<
listeners
.
size
();
i
++)
{
listeners
.
get
(
i
).
onAdd
(
item
);
}
itemsChanged
(
animate
);
}
public
interface
FolderListener
{
void
onAdd
(
LauncherItem
item
);
void
onTitleChanged
(
CharSequence
title
);
...
...
app/src/main/java/foundation/e/blisslauncher/core/touch/ItemClickHandler.java
View file @
d13159f2
...
...
@@ -53,6 +53,10 @@ public class ItemClickHandler {
return;
}*/
if
(
launcher
.
getLauncherPagedView
().
isWobbling
())
{
return
;
}
if
(
v
instanceof
IconTextView
)
{
boolean
result
=
((
IconTextView
)
v
).
tryToHandleUninstallClick
(
launcher
);
if
(
result
)
return
;
...
...
app/src/main/java/foundation/e/blisslauncher/features/folder/FolderIcon.kt
View file @
d13159f2
...
...
@@ -8,6 +8,7 @@ import android.view.ViewGroup
import
foundation.e.blisslauncher.core.customviews.Folder
import
foundation.e.blisslauncher.core.database.model.FolderItem
import
foundation.e.blisslauncher.core.database.model.LauncherItem
import
foundation.e.blisslauncher.core.touch.ItemClickHandler
import
foundation.e.blisslauncher.core.utils.GraphicsUtil
import
foundation.e.blisslauncher.features.notification.FolderDotInfo
import
foundation.e.blisslauncher.features.test.IconTextView
...
...
@@ -34,6 +35,7 @@ class FolderIcon @JvmOverloads constructor(
val
icon
=
LayoutInflater
.
from
(
group
.
context
)
.
inflate
(
resId
,
group
,
false
)
as
FolderIcon
icon
.
tag
=
folderInfo
icon
.
setOnClickListener
(
ItemClickHandler
.
INSTANCE
)
icon
.
folderItem
=
folderInfo
val
folder
=
Folder
.
fromXml
(
icon
.
launcher
).
apply
{
this
.
dragController
=
launcher
.
dragController
...
...
@@ -105,4 +107,16 @@ class FolderIcon @JvmOverloads constructor(
fun
removeListeners
()
{
folderItem
.
removeListener
(
this
)
}
fun
acceptDrop
():
Boolean
{
return
!(
folder
?.
isDestroyed
()
?:
true
)
}
fun
addItem
(
item
:
LauncherItem
)
{
addItem
(
item
,
true
)
}
fun
addItem
(
item
:
LauncherItem
?,
animate
:
Boolean
)
{
folderItem
.
add
(
item
,
animate
)
}
}
app/src/main/java/foundation/e/blisslauncher/features/folder/FolderPagerAdapter.java
View file @
d13159f2
package
foundation.e.blisslauncher.features.folder
;
import
android.content.Context
;
import
android.util.Log
;
import
android.view.Gravity
;
import
android.view.LayoutInflater
;
import
android.view.View
;
...
...
@@ -96,4 +97,9 @@ public class FolderPagerAdapter extends PagerAdapter {
)
{
container
.
removeView
((
View
)
object
);
}
@Override
public
void
notifyDataSetChanged
()
{
super
.
notifyDataSetChanged
();
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment