Loading src/com/android/documentsui/BaseActivity.java +4 −1 Original line number Diff line number Diff line Loading @@ -429,7 +429,7 @@ public abstract class BaseActivity if (isUsePeekPreviewFlagEnabled()) { mPeekViewManager = new PeekViewManager(this); mPeekViewManager.initFragment(getSupportFragmentManager()); mPeekViewManager.initFragment(getSupportFragmentManager(), savedInstanceState); } } Loading Loading @@ -1031,6 +1031,9 @@ public abstract class BaseActivity super.onSaveInstanceState(state); state.putParcelable(Shared.EXTRA_STATE, mState); mSearchManager.onSaveInstanceState(state); if (isUsePeekPreviewFlagEnabled()) { mPeekViewManager.onSaveInstanceState(state); } } @Override Loading src/com/android/documentsui/peek/PeekFragment.kt +43 −6 Original line number Diff line number Diff line Loading @@ -25,30 +25,57 @@ import androidx.fragment.app.Fragment import com.android.documentsui.R import com.android.documentsui.base.DocumentInfo import com.google.android.material.appbar.MaterialToolbar import java.io.FileNotFoundException class PeekFragment : Fragment() { companion object { const val TAG = "PeekFragment" private const val TAG = "PeekFragment" private const val PEEK_DOC_INFO = "PEEK_DOC_INFO" } private lateinit var viewManager: PeekViewManager private lateinit var toolbar: MaterialToolbar private var docInfo: DocumentInfo? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view = inflater.inflate(R.layout.peek_layout, container, /* attachToRoot= */ false) toolbar = view.findViewById(R.id.peek_toolbar) toolbar.setNavigationOnClickListener { if (!::viewManager.isInitialized) { Log.e(TAG, "PeekViewManager has not been initialized") } else { viewManager.setContainerVisibility(false) } clearAndHide() } return view } // Called after the fragment has been created and its previous view state has been restored. // This is where the preview is rerendered, when applicable, and additional view states can be // restored. override fun onViewStateRestored(savedInstanceState: Bundle?) { super.onViewStateRestored(savedInstanceState) if (savedInstanceState == null) { return } val doc = savedInstanceState.getParcelable(PEEK_DOC_INFO, DocumentInfo::class.java) if (doc != null) { // Update potentially stale document info. Clear and hide the Peek overlay if an // exception is caught during the process. try { doc.updateSelf(doc.userId.getContentResolver(context), doc.userId) updateView(doc) } catch (e: FileNotFoundException) { Log.e(TAG, "Stale document info: $e") clearAndHide() } } } override fun onSaveInstanceState(state: Bundle) { super.onSaveInstanceState(state) state.putParcelable(PEEK_DOC_INFO, docInfo) } fun setViewManager(viewManager: PeekViewManager) { this.viewManager = viewManager } Loading @@ -58,6 +85,16 @@ class PeekFragment : Fragment() { Log.e(TAG, "Toolbar has not been initialized") return } docInfo = doc toolbar.title = doc.displayName } fun clearAndHide() { if (!::viewManager.isInitialized || !::toolbar.isInitialized) { Log.e(TAG, "Toolbar or PeekViewManager have not been initialized") return } toolbar.title = "" viewManager.setContainerVisibility(false) } } src/com/android/documentsui/peek/PeekViewManager.kt +34 −6 Original line number Diff line number Diff line Loading @@ -16,11 +16,13 @@ package com.android.documentsui.peek import android.app.Activity import android.os.Bundle import android.util.Log import android.view.View import android.widget.FrameLayout import androidx.fragment.app.FragmentManager import com.android.documentsui.R import androidx.core.view.isVisible import androidx.fragment.app.FragmentTransaction import com.android.documentsui.base.DocumentInfo import com.android.documentsui.util.FlagUtils.Companion.isUsePeekPreviewFlagEnabled Loading @@ -32,14 +34,16 @@ open class PeekViewManager( private val mActivity: Activity ) { companion object { const val TAG = "PeekViewManager" private const val TAG = "PeekViewManager" private const val PEEK_OVERLAY_ACTIVE = "PEEK_OVERLAY_ACTIVE" } private lateinit var peekFragment: PeekFragment private lateinit var container: FrameLayout open fun initFragment( fm: FragmentManager fm: FragmentManager, savedInstanceState: Bundle? ) { if (!isUsePeekPreviewFlagEnabled()) { Log.e(TAG, "Attempting to create PeekViewManager while Peek disabled") Loading @@ -53,11 +57,27 @@ open class PeekViewManager( } this.container = container // Initialize Peek fragment. The fragment manager automatically handles state restoration: // the fragment might already exist. val existingFragment = fm.findFragmentById(R.id.peek_overlay) if (existingFragment == null) { peekFragment = PeekFragment() peekFragment.setViewManager(this) val ft: FragmentTransaction = fm.beginTransaction() ft.replace(R.id.peek_overlay, peekFragment) ft.commitAllowingStateLoss() } else { peekFragment = existingFragment as PeekFragment } peekFragment.setViewManager(this) // Restore Peek overlay if necessary. if (savedInstanceState != null && savedInstanceState.getBoolean( PEEK_OVERLAY_ACTIVE, false ) ) { setContainerVisibility(true) } } open fun peekDocument(doc: DocumentInfo) { Loading @@ -69,6 +89,14 @@ open class PeekViewManager( setContainerVisibility(true) } fun onSaveInstanceState(state: Bundle) { if (!::container.isInitialized) { Log.e(TAG, "lateinit container not initialized") return } state.putBoolean(PEEK_OVERLAY_ACTIVE, container.isVisible) } fun setContainerVisibility(visible: Boolean) { if (!::container.isInitialized) { Log.e(TAG, "Container has not been initialized") Loading tests/common/com/android/documentsui/testing/TestPeekViewManager.kt +5 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.documentsui.testing import android.app.Activity import android.os.Bundle import androidx.fragment.app.FragmentManager import com.android.documentsui.base.DocumentInfo import com.android.documentsui.peek.PeekViewManager Loading @@ -24,7 +25,10 @@ class TestPeekViewManager(mActivity: Activity) : PeekViewManager(mActivity) { val peekDocument = TestEventListener<DocumentInfo>() override fun initFragment(fm: FragmentManager) { override fun initFragment( fm: FragmentManager, savedInstanceState: Bundle? ) { throw UnsupportedOperationException() } Loading tests/functional/com/android/documentsui/ActivityTestJunit4.kt +1 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ abstract class ActivityTestJunit4<T : Activity?> { @JvmField protected var mDocsHelper: DocumentsProviderHelper? = null @JvmField protected var mActivityScenario: ActivityScenario<T?>? = null private var initialScreenOffTimeoutValue: String? = null private var initialSleepTimeoutValue: String? = null Loading Loading
src/com/android/documentsui/BaseActivity.java +4 −1 Original line number Diff line number Diff line Loading @@ -429,7 +429,7 @@ public abstract class BaseActivity if (isUsePeekPreviewFlagEnabled()) { mPeekViewManager = new PeekViewManager(this); mPeekViewManager.initFragment(getSupportFragmentManager()); mPeekViewManager.initFragment(getSupportFragmentManager(), savedInstanceState); } } Loading Loading @@ -1031,6 +1031,9 @@ public abstract class BaseActivity super.onSaveInstanceState(state); state.putParcelable(Shared.EXTRA_STATE, mState); mSearchManager.onSaveInstanceState(state); if (isUsePeekPreviewFlagEnabled()) { mPeekViewManager.onSaveInstanceState(state); } } @Override Loading
src/com/android/documentsui/peek/PeekFragment.kt +43 −6 Original line number Diff line number Diff line Loading @@ -25,30 +25,57 @@ import androidx.fragment.app.Fragment import com.android.documentsui.R import com.android.documentsui.base.DocumentInfo import com.google.android.material.appbar.MaterialToolbar import java.io.FileNotFoundException class PeekFragment : Fragment() { companion object { const val TAG = "PeekFragment" private const val TAG = "PeekFragment" private const val PEEK_DOC_INFO = "PEEK_DOC_INFO" } private lateinit var viewManager: PeekViewManager private lateinit var toolbar: MaterialToolbar private var docInfo: DocumentInfo? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view = inflater.inflate(R.layout.peek_layout, container, /* attachToRoot= */ false) toolbar = view.findViewById(R.id.peek_toolbar) toolbar.setNavigationOnClickListener { if (!::viewManager.isInitialized) { Log.e(TAG, "PeekViewManager has not been initialized") } else { viewManager.setContainerVisibility(false) } clearAndHide() } return view } // Called after the fragment has been created and its previous view state has been restored. // This is where the preview is rerendered, when applicable, and additional view states can be // restored. override fun onViewStateRestored(savedInstanceState: Bundle?) { super.onViewStateRestored(savedInstanceState) if (savedInstanceState == null) { return } val doc = savedInstanceState.getParcelable(PEEK_DOC_INFO, DocumentInfo::class.java) if (doc != null) { // Update potentially stale document info. Clear and hide the Peek overlay if an // exception is caught during the process. try { doc.updateSelf(doc.userId.getContentResolver(context), doc.userId) updateView(doc) } catch (e: FileNotFoundException) { Log.e(TAG, "Stale document info: $e") clearAndHide() } } } override fun onSaveInstanceState(state: Bundle) { super.onSaveInstanceState(state) state.putParcelable(PEEK_DOC_INFO, docInfo) } fun setViewManager(viewManager: PeekViewManager) { this.viewManager = viewManager } Loading @@ -58,6 +85,16 @@ class PeekFragment : Fragment() { Log.e(TAG, "Toolbar has not been initialized") return } docInfo = doc toolbar.title = doc.displayName } fun clearAndHide() { if (!::viewManager.isInitialized || !::toolbar.isInitialized) { Log.e(TAG, "Toolbar or PeekViewManager have not been initialized") return } toolbar.title = "" viewManager.setContainerVisibility(false) } }
src/com/android/documentsui/peek/PeekViewManager.kt +34 −6 Original line number Diff line number Diff line Loading @@ -16,11 +16,13 @@ package com.android.documentsui.peek import android.app.Activity import android.os.Bundle import android.util.Log import android.view.View import android.widget.FrameLayout import androidx.fragment.app.FragmentManager import com.android.documentsui.R import androidx.core.view.isVisible import androidx.fragment.app.FragmentTransaction import com.android.documentsui.base.DocumentInfo import com.android.documentsui.util.FlagUtils.Companion.isUsePeekPreviewFlagEnabled Loading @@ -32,14 +34,16 @@ open class PeekViewManager( private val mActivity: Activity ) { companion object { const val TAG = "PeekViewManager" private const val TAG = "PeekViewManager" private const val PEEK_OVERLAY_ACTIVE = "PEEK_OVERLAY_ACTIVE" } private lateinit var peekFragment: PeekFragment private lateinit var container: FrameLayout open fun initFragment( fm: FragmentManager fm: FragmentManager, savedInstanceState: Bundle? ) { if (!isUsePeekPreviewFlagEnabled()) { Log.e(TAG, "Attempting to create PeekViewManager while Peek disabled") Loading @@ -53,11 +57,27 @@ open class PeekViewManager( } this.container = container // Initialize Peek fragment. The fragment manager automatically handles state restoration: // the fragment might already exist. val existingFragment = fm.findFragmentById(R.id.peek_overlay) if (existingFragment == null) { peekFragment = PeekFragment() peekFragment.setViewManager(this) val ft: FragmentTransaction = fm.beginTransaction() ft.replace(R.id.peek_overlay, peekFragment) ft.commitAllowingStateLoss() } else { peekFragment = existingFragment as PeekFragment } peekFragment.setViewManager(this) // Restore Peek overlay if necessary. if (savedInstanceState != null && savedInstanceState.getBoolean( PEEK_OVERLAY_ACTIVE, false ) ) { setContainerVisibility(true) } } open fun peekDocument(doc: DocumentInfo) { Loading @@ -69,6 +89,14 @@ open class PeekViewManager( setContainerVisibility(true) } fun onSaveInstanceState(state: Bundle) { if (!::container.isInitialized) { Log.e(TAG, "lateinit container not initialized") return } state.putBoolean(PEEK_OVERLAY_ACTIVE, container.isVisible) } fun setContainerVisibility(visible: Boolean) { if (!::container.isInitialized) { Log.e(TAG, "Container has not been initialized") Loading
tests/common/com/android/documentsui/testing/TestPeekViewManager.kt +5 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.documentsui.testing import android.app.Activity import android.os.Bundle import androidx.fragment.app.FragmentManager import com.android.documentsui.base.DocumentInfo import com.android.documentsui.peek.PeekViewManager Loading @@ -24,7 +25,10 @@ class TestPeekViewManager(mActivity: Activity) : PeekViewManager(mActivity) { val peekDocument = TestEventListener<DocumentInfo>() override fun initFragment(fm: FragmentManager) { override fun initFragment( fm: FragmentManager, savedInstanceState: Bundle? ) { throw UnsupportedOperationException() } Loading
tests/functional/com/android/documentsui/ActivityTestJunit4.kt +1 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ abstract class ActivityTestJunit4<T : Activity?> { @JvmField protected var mDocsHelper: DocumentsProviderHelper? = null @JvmField protected var mActivityScenario: ActivityScenario<T?>? = null private var initialScreenOffTimeoutValue: String? = null private var initialSleepTimeoutValue: String? = null Loading