Commit 7a965943 authored by Amit Kumar's avatar Amit Kumar 💻
Browse files

Fix recents related bug

parent abd486af
......@@ -54,11 +54,12 @@
android:clearTaskOnLaunch="true"
android:stateNotNeeded="true"
android:windowSoftInputMode="adjustPan"
android:screenOrientation="unspecified"
android:screenOrientation="portrait"
android:configChanges="keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenSize|screenLayout|smallestScreenSize"
android:resizeableActivity="true"
android:resumeWhilePausing="true"
android:taskAffinity=""
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
......@@ -193,6 +194,18 @@
android:resizeableActivity="true"
android:resumeWhilePausing="true"
android:taskAffinity="" />
<activity
android:name=".proxy.ProxyActivityStarter"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
android:exported="false" />
<activity android:name=".quickstep.LockScreenRecentsActivity"
android:theme="@android:style/Theme.NoDisplay"
android:showOnLockScreen="true"
android:directBootAware="true" />
</application>
</manifest>
\ No newline at end of file
......@@ -906,7 +906,7 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V
}
}
void moveToDefaultScreen() {
public void moveToDefaultScreen() {
int page = DEFAULT_PAGE;
if (getNextPage() != page) {
snapToPage(page);
......
......@@ -40,7 +40,7 @@ public class SystemUiController {
public static final int FLAG_DARK_STATUS = 1 << 3;
private final Window mWindow;
private final int[] mStates = new int[2];
private final int[] mStates = new int[3];
public SystemUiController(Window window) {
mWindow = window;
......
......@@ -3,7 +3,10 @@ package foundation.e.blisslauncher.features.test
import android.app.ActivityOptions
import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.res.Configuration
import android.graphics.Point
import android.os.Bundle
import android.os.StrictMode
import android.os.StrictMode.VmPolicy
......@@ -11,12 +14,16 @@ import android.view.LayoutInflater
import android.view.View
import foundation.e.blisslauncher.BlissLauncher
import foundation.e.blisslauncher.R
import foundation.e.blisslauncher.core.customviews.AbstractFloatingView
import foundation.e.blisslauncher.core.customviews.LauncherPagedView
import foundation.e.blisslauncher.core.database.model.LauncherItem
import foundation.e.blisslauncher.core.utils.Constants
import foundation.e.blisslauncher.features.launcher.Hotseat
import foundation.e.blisslauncher.features.test.LauncherState.*
import foundation.e.blisslauncher.features.test.RotationHelper.REQUEST_NONE
import foundation.e.blisslauncher.features.test.dragndrop.DragController
import foundation.e.blisslauncher.features.test.dragndrop.DragLayer
import foundation.e.blisslauncher.features.test.graphics.RotationMode
import foundation.e.blisslauncher.uioverrides.UiFactory
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
......@@ -32,12 +39,28 @@ class TestActivity : BaseDraggingActivity() {
private lateinit var mOldConfig: Configuration
private var mCompositeDisposable: CompositeDisposable? = null
// Type: int
private val RUNTIME_STATE_CURRENT_SCREEN = "launcher.current_screen"
// Type: int
private val RUNTIME_STATE = "launcher.state"
// Type: PendingRequestArgs
private val RUNTIME_STATE_PENDING_REQUEST_ARGS = "launcher.request_args"
// Type: int
private val RUNTIME_STATE_PENDING_REQUEST_CODE = "launcher.request_code"
// Type: ActivityResultInfo
private val RUNTIME_STATE_PENDING_ACTIVITY_RESULT = "launcher.activity_result"
private lateinit var launcherView: View
private lateinit var dragLayer: DragLayer
private lateinit var workspace: LauncherPagedView
private lateinit var hotseat: Hotseat
private lateinit var rotationHelper: RotationHelper
private var mRotationMode = RotationMode.NORMAL
private lateinit var mStateManager: LauncherStateManager
// UI and state for the overview panel
......@@ -71,6 +94,8 @@ class TestActivity : BaseDraggingActivity() {
super.onCreate(savedInstanceState)
TraceHelper.partitionSection("Launcher-onCreate", "super call")
val app = LauncherAppState.getInstance(this)
app.launcher = this
mOldConfig = Configuration(resources.configuration)
initDeviceProfile(BlissLauncher.getApplication(this).invariantDeviceProfile)
dragController = DragController(this)
......@@ -78,12 +103,82 @@ class TestActivity : BaseDraggingActivity() {
mStateManager = LauncherStateManager(this)
launcherView = LayoutInflater.from(this).inflate(R.layout.activity_test, null)
setupViews()
mAppTransitionManager = LauncherAppTransitionManager.newInstance(this)
val internalStateHandled = InternalStateHandler.handleCreate(this, intent)
if (internalStateHandled) {
savedInstanceState?.remove(RUNTIME_STATE)
}
restoreState(savedInstanceState)
mStateManager.reapplyState()
setContentView(launcherView)
rootView.dispatchInsets()
systemUiController.updateUiState(
SystemUiController.UI_STATE_BASE_WINDOW,
false
)
rotationHelper.initialize()
TraceHelper.endSection("Launcher-onCreate")
mStateManager.addStateListener(object : LauncherStateManager.StateListener {
override fun onStateTransitionStart(toState: LauncherState?) {}
override fun onStateTransitionComplete(finalState: LauncherState) {
if (finalState === NORMAL) {
// TODO: may use later
} else if (finalState === OVERVIEW || finalState === OVERVIEW_PEEK) {
// TODO: may use later
} else {
// TODO: may use later
}
}
})
createOrUpdateIconGrid()
}
/**
* Restores the previous state, if it exists.
*
* @param savedState The previous state.
*/
private fun restoreState(savedState: Bundle?) {
if (savedState == null) {
return
}
val stateOrdinal =
savedState.getInt(RUNTIME_STATE, NORMAL.ordinal)
val stateValues = LauncherState.values()
val state = stateValues[stateOrdinal]
if (!state.disableRestore) {
mStateManager.goToState(state, false /* animated */)
}
}
override fun onEnterAnimationComplete() {
super.onEnterAnimationComplete()
UiFactory.onEnterAnimationComplete(this)
rotationHelper.setCurrentTransitionRequest(REQUEST_NONE)
}
override fun onConfigurationChanged(newConfig: Configuration) {
val diff = newConfig.diff(mOldConfig)
if (diff and ActivityInfo.CONFIG_LOCALE != 0) {
//Folder.setLocaleDependentFields(resources, true /* force */)
// TODO: Update folder here.
}
if (diff and (ActivityInfo.CONFIG_ORIENTATION or ActivityInfo.CONFIG_SCREEN_SIZE) != 0) {
//onIdpChanged(mDeviceProfile.inv)
// TODO: update device profile here.
}
mOldConfig.setTo(newConfig)
UiFactory.onLauncherStateOrResumeChanged(this)
super.onConfigurationChanged(newConfig)
}
private fun setupViews() {
dragLayer = findViewById(R.id.drag_layer)
workspace = dragLayer.findViewById(R.id.workspace)
......@@ -99,6 +194,11 @@ class TestActivity : BaseDraggingActivity() {
workspace.bindAndInitFirstScreen(null)
dragController.addDragListener(workspace)
dragController.addDropTarget(workspace)
// Setup the drag controller (drop targets have to be added in reverse order in priority)
// Setup the drag controller (drop targets have to be added in reverse order in priority)
dragController.setMoveTarget(workspace)
}
override fun <T : View> findViewById(id: Int): T {
......@@ -110,9 +210,22 @@ class TestActivity : BaseDraggingActivity() {
private fun initDeviceProfile(idp: InvariantDeviceProfile) {
// Load device specific profile
mDeviceProfile = idp.getDeviceProfile(this)
if (isInMultiWindowMode) {
val display = windowManager.defaultDisplay
val mwSize = Point()
display.getSize(mwSize)
mDeviceProfile = mDeviceProfile.getMultiWindowProfile(this, mwSize)
}
mRotationMode = RotationMode.NORMAL
onDeviceProfileInitiated()
}
override fun onPause() {
super.onPause()
dragController.cancelDrag()
dragController.resetLastGestureUpTime()
}
override fun onResume() {
super.onResume()
if (mOnResumeCallbacks.isNotEmpty()) {
......@@ -131,6 +244,22 @@ class TestActivity : BaseDraggingActivity() {
mCancelTouchController!!.run()
mCancelTouchController = null
}
rotationHelper.destroy()
}
override fun onUserLeaveHint() {
super.onUserLeaveHint()
UiFactory.onLauncherStateOrResumeChanged(this)
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
mStateManager.onWindowFocusChanged()
}
fun getRotationMode(): RotationMode {
return mRotationMode
}
fun getHotseat() = hotseat
......@@ -139,7 +268,7 @@ class TestActivity : BaseDraggingActivity() {
override fun getDragLayer(): DragLayer = dragLayer
override fun <T : View?> getOverviewPanel(): T = overviewPanel as T
override fun <T : View> getOverviewPanel(): T = overviewPanel as T
override fun getRootView(): LauncherRootView = launcherView as LauncherRootView
......@@ -154,6 +283,8 @@ class TestActivity : BaseDraggingActivity() {
fun getAppTransitionManager() = mAppTransitionManager
override fun reapplyUi() {
rootView.dispatchInsets()
getStateManager().reapplyState(true /* cancelCurrentAnimation */)
}
fun isWorkspaceLocked() = false
......@@ -228,6 +359,73 @@ class TestActivity : BaseDraggingActivity() {
mOnResumeCallbacks.add(callback)
}
override fun onNewIntent(intent: Intent?) {
TraceHelper.beginSection("NEW_INTENT")
super.onNewIntent(intent)
val alreadyOnHome = hasWindowFocus() && (intent!!.flags and
Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT
!= Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT)
// Check this condition before handling isActionMain, as this will get reset.
val shouldMoveToDefaultScreen = (alreadyOnHome && isInState(NORMAL)
&& AbstractFloatingView.getTopOpenView(this) == null)
val isActionMain = Intent.ACTION_MAIN == intent!!.action
val internalStateHandled = InternalStateHandler
.handleNewIntent(this, intent, isStarted)
if (isActionMain) {
if (!internalStateHandled) {
// In all these cases, only animate if we're already on home
AbstractFloatingView.closeAllOpenViews(this, isStarted)
if (!isInState(NORMAL)) {
// Only change state, if not already the same. This prevents cancelling any
// animations running as part of resume
mStateManager.goToState(NORMAL)
}
// Reset the apps view
if (!alreadyOnHome) {
// TODO: maybe stop icon giggling or search view here.
}
if (shouldMoveToDefaultScreen && !workspace.isHandlingTouch) {
workspace.post(workspace::moveToDefaultScreen)
}
}
val v = window.peekDecorView()
if (v != null && v.windowToken != null) {
UiThreadHelper.hideKeyboardAsync(this, v.windowToken)
}
}
TraceHelper.endSection("NEW_INTENT")
}
override fun onBackPressed() {
if (finishAutoCancelActionMode()) {
return
}
if (dragController.isDragging()) {
dragController.cancelDrag()
return
}
// Note: There should be at most one log per method call. This is enforced implicitly
// by using if-else statements.
val topView = AbstractFloatingView.getTopOpenView(this)
if (topView != null && topView.onBackPressed()) {
// Handled by the floating view.
} else {
mStateManager.state.onBackPressed(this)
}
}
override fun onTrimMemory(level: Int) {
super.onTrimMemory(level)
UiFactory.onTrimMemory(this, level)
}
companion object {
const val TAG = "Launcher"
const val LOGD = false
......
......@@ -350,13 +350,15 @@ class VariantDeviceProfile(
)
}
fun updateInsets(windowInsets: WindowInsets) {
insets.set(
Rect(
windowInsets.systemWindowInsetLeft, windowInsets.systemWindowInsetTop,
windowInsets.systemWindowInsetRight, windowInsets.systemWindowInsetBottom
fun updateInsets(windowInsets: WindowInsets?) {
windowInsets?.let {
insets.set(
Rect(
it.systemWindowInsetLeft, it.systemWindowInsetTop,
it.systemWindowInsetRight, it.systemWindowInsetBottom
)
)
)
}
updateWorkspacePadding()
}
......
......@@ -82,7 +82,7 @@ public class LayoutUtils {
/*paddingHorz = res.getDimension(dp.isVerticalBarLayout()
? R.dimen.landscape_task_card_horz_space
: R.dimen.portrait_task_card_horz_space);*/
paddingHorz = R.dimen.portrait_task_card_horz_space;
paddingHorz = res.getDimension(R.dimen.portrait_task_card_horz_space);
}
float topIconMargin = res.getDimension(R.dimen.task_thumbnail_top_margin);
......
......@@ -7,7 +7,7 @@ spotless {
}
kotlin {
target "**/*.kt"
ktlint()
ktlint().userData([disabled_rules:"no-wildcard-imports"])
}
kotlinGradle {
// same as kotlin, but for .gradle.kts files (defaults to '*.gradle.kts')
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment