@@ -18,8 +18,6 @@ import android.view.MenuInflater
1818import android.view.MenuItem
1919import android.view.View
2020import android.view.ViewGroup
21- import androidx.annotation.DrawableRes
22- import androidx.annotation.StringRes
2321import androidx.annotation.VisibleForTesting
2422import androidx.core.content.res.ResourcesCompat
2523import androidx.core.view.MenuHost
@@ -35,15 +33,13 @@ import com.nextcloud.client.di.Injectable
3533import com.nextcloud.client.network.ClientFactory
3634import com.nextcloud.client.network.ClientFactory.CreationException
3735import com.nextcloud.client.preferences.AppPreferences
38- import com.nextcloud.utils.extensions.getTypedActivity
3936import com.owncloud.android.R
40- import com.owncloud.android.databinding.ListFragmentBinding
37+ import com.owncloud.android.databinding.AlbumsFragmentBinding
4138import com.owncloud.android.datamodel.SyncedFolderProvider
4239import com.owncloud.android.lib.common.OwnCloudClient
4340import com.owncloud.android.lib.common.utils.Log_OC
4441import com.owncloud.android.operations.albums.ReadAlbumsOperation
4542import com.owncloud.android.operations.albums.ReadAlbumsOperation.PhotoAlbumEntry
46- import com.owncloud.android.ui.activity.FileActivity
4743import com.owncloud.android.ui.activity.FileDisplayActivity
4844import com.owncloud.android.ui.adapter.albums.AlbumFragmentInterface
4945import com.owncloud.android.ui.adapter.albums.AlbumsAdapter
@@ -62,7 +58,7 @@ class AlbumsFragment : Fragment(), AlbumFragmentInterface, Injectable {
6258 private var client: OwnCloudClient ? = null
6359 private var optionalUser: Optional <User >? = null
6460
65- private lateinit var binding: ListFragmentBinding
61+ private lateinit var binding: AlbumsFragmentBinding
6662
6763 @Inject
6864 lateinit var viewThemeUtils: ViewThemeUtils
@@ -118,19 +114,19 @@ class AlbumsFragment : Fragment(), AlbumFragmentInterface, Injectable {
118114 }
119115
120116 override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ): View {
121- binding = ListFragmentBinding .inflate(inflater, container, false )
117+ binding = AlbumsFragmentBinding .inflate(inflater, container, false )
122118 return binding.root
123119 }
124120
125121 override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
126122 super .onViewCreated(view, savedInstanceState)
127123 optionalUser = Optional .of(accountManager.user)
128- if (optionalUser?.isPresent == false ) {
129- showError()
130- }
131124 createMenu()
132125 setupContainingList()
133126 setupContent()
127+ binding.createAlbum.setOnClickListener {
128+ showCreateAlbumDialog()
129+ }
134130 }
135131
136132 private fun createMenu () {
@@ -144,11 +140,7 @@ class AlbumsFragment : Fragment(), AlbumFragmentInterface, Injectable {
144140 override fun onMenuItemSelected (menuItem : MenuItem ): Boolean {
145141 return when (menuItem.itemId) {
146142 R .id.action_create_new_album -> {
147- CreateAlbumDialogFragment .newInstance()
148- .show(
149- requireActivity().supportFragmentManager,
150- CreateAlbumDialogFragment .TAG
151- )
143+ showCreateAlbumDialog()
152144 true
153145 }
154146
@@ -158,17 +150,15 @@ class AlbumsFragment : Fragment(), AlbumFragmentInterface, Injectable {
158150 }, viewLifecycleOwner, Lifecycle .State .RESUMED )
159151 }
160152
161- private fun showError () {
162- setMessageForEmptyList(
163- R .string.albums_no_results_headline,
164- resources.getString(R .string.account_not_found),
165- R .drawable.ic_notification,
166- false
167- )
153+ private fun showCreateAlbumDialog () {
154+ CreateAlbumDialogFragment .newInstance()
155+ .show(
156+ requireActivity().supportFragmentManager,
157+ CreateAlbumDialogFragment .TAG
158+ )
168159 }
169160
170161 private fun setupContent () {
171- binding.listRoot.setEmptyView(binding.emptyList.emptyListView)
172162 binding.listRoot.setHasFixedSize(true )
173163 if (isGridView) {
174164 val layoutManager = GridLayoutManager (requireContext(), maxColumnSize)
@@ -183,7 +173,6 @@ class AlbumsFragment : Fragment(), AlbumFragmentInterface, Injectable {
183173 private fun setupContainingList () {
184174 viewThemeUtils.androidx.themeSwipeRefreshLayout(binding.swipeContainingList)
185175 binding.swipeContainingList.setOnRefreshListener {
186- binding.swipeContainingList.isRefreshing = true
187176 fetchAndSetData()
188177 }
189178 }
@@ -198,32 +187,22 @@ class AlbumsFragment : Fragment(), AlbumFragmentInterface, Injectable {
198187 }
199188
200189 private fun fetchAndSetData () {
190+ binding.swipeContainingList.isRefreshing = true
201191 initializeAdapter()
202- setEmptyListLoadingMessage( )
192+ updateEmptyView( false )
203193 lifecycleScope.launch(Dispatchers .IO ) {
204194 val getRemoteNotificationOperation = ReadAlbumsOperation ()
205195 val result = client?.let { getRemoteNotificationOperation.execute(it) }
206196 withContext(Dispatchers .Main ) {
207197 if (result?.isSuccess == true && result.resultData != null ) {
208198 if (result.resultData.isEmpty()) {
209- setMessageForEmptyList(
210- R .string.albums_no_results_headline,
211- resources.getString(R .string.albums_no_results_message),
212- R .drawable.ic_notification,
213- false
214- )
199+ updateEmptyView(true )
215200 }
216201 populateList(result.resultData)
217202 } else {
218203 Log_OC .d(TAG , result?.logMessage)
219204 // show error
220- setMessageForEmptyList(
221- R .string.albums_no_results_headline,
222- result?.getLogMessage(requireContext())
223- ? : resources.getString(R .string.albums_no_results_message),
224- R .drawable.ic_notification,
225- false
226- )
205+ updateEmptyView(true )
227206 }
228207 hideRefreshLayoutLoader()
229208 }
@@ -262,35 +241,9 @@ class AlbumsFragment : Fragment(), AlbumFragmentInterface, Injectable {
262241 binding.listRoot.adapter = adapter
263242 }
264243
265- private fun setMessageForEmptyList (
266- @StringRes headline : Int , message : String ,
267- @DrawableRes icon : Int , tintIcon : Boolean
268- ) {
269- binding.emptyList.emptyListViewHeadline.setText(headline)
270- binding.emptyList.emptyListViewText.text = message
271-
272- if (tintIcon) {
273- if (context != null ) {
274- binding.emptyList.emptyListIcon.setImageDrawable(
275- viewThemeUtils.platform.tintPrimaryDrawable(requireContext(), icon)
276- )
277- }
278- } else {
279- binding.emptyList.emptyListIcon.setImageResource(icon)
280- }
281-
282- binding.emptyList.emptyListIcon.visibility = View .VISIBLE
283- binding.emptyList.emptyListViewText.visibility = View .VISIBLE
284- }
285-
286- private fun setEmptyListLoadingMessage () {
287- val fileActivity = this .getTypedActivity(FileActivity ::class .java)
288- fileActivity?.connectivityService?.isNetworkAndServerAvailable { result: Boolean? ->
289- if (! result!! ) return @isNetworkAndServerAvailable
290- binding.emptyList.emptyListViewHeadline.setText(R .string.file_list_loading)
291- binding.emptyList.emptyListViewText.text = " "
292- binding.emptyList.emptyListIcon.visibility = View .GONE
293- }
244+ private fun updateEmptyView (isEmpty : Boolean ) {
245+ binding.emptyViewLayout.visibility = if (isEmpty) View .VISIBLE else View .GONE
246+ binding.listRoot.visibility = if (isEmpty) View .GONE else View .VISIBLE
294247 }
295248
296249 override fun onResume () {
0 commit comments