package com.architjn.acjmusicplayer.ui.layouts.fragments; import android.Manifest; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.afollestad.async.Async; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import com.architjn.acjmusicplayer.R; import com.architjn.acjmusicplayer.ui.layouts.activity.MainActivity; import com.architjn.acjmusicplayer.utils.ListSongs; import com.architjn.acjmusicplayer.utils.PermissionChecker; import com.architjn.acjmusicplayer.utils.Utils; import com.architjn.acjmusicplayer.utils.adapters.AlbumListAdapter; import com.architjn.acjmusicplayer.utils.decorations.AlbumListSpacesItemDecoration; import com.architjn.acjmusicplayer.utils.items.Album; import java.util.ArrayList; /** * Created by architjn on 27/11/15. */ public class AlbumsListFragment extends Fragment { private Context context; private View mainView; private RecyclerView gv; private AlbumListAdapter adapter; private PermissionChecker permissionChecker; private View emptyView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_albums, container, false); mainView = view; System.gc(); context = mainView.getContext(); initViews(); return view; } private void initViews() { gv = (RecyclerView) mainView.findViewById(R.id.albumsListContainer); emptyView = mainView.findViewById(R.id.album_empty_view); AlbumListAdapter.onceAnimated = false; checkForPermissionsNeeded(false); } private void checkForPermissionsNeeded(boolean askDirectly) { permissionChecker = new PermissionChecker(context, getActivity(), mainView); permissionChecker.check(Manifest.permission.WRITE_EXTERNAL_STORAGE, getResources().getString(R.string.storage_permission), new PermissionChecker.OnPermissionResponse() { @Override public void onAccepted() { setList(); } @Override public void onDecline() { cantProceedDialog(); } }, askDirectly); } private void cantProceedDialog() { new MaterialDialog.Builder(context) .title(R.string.cant_proceed) .content(R.string.cant_proceed_msg) .positiveText(R.string.ok) .negativeText(R.string.close) .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction) { checkForPermissionsNeeded(true); } }) .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction) { getActivity().finish(); } }) .show(); } private void setList() { new Thread(new Runnable() { public void run() { final ArrayList<Album> albumList = ListSongs.getAlbumList(context); final GridLayoutManager gridLayoutManager = new GridLayoutManager(mainView.getContext(), 2); getActivity().runOnUiThread(new Runnable() { @Override public void run() { gridLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); gridLayoutManager.scrollToPosition(0); gv.setLayoutManager(gridLayoutManager); gv.addItemDecoration(new AlbumListSpacesItemDecoration(new Utils(context).dpToPx(1))); adapter = new AlbumListAdapter(mainView.getContext(), albumList, gv); gv.setAdapter(adapter); } }); if (albumList.size() < 1) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { listIsEmpty(); } }); } } }).start(); } public void listIsEmpty() { emptyView.setVisibility(View.VISIBLE); gv.setVisibility(View.GONE); } public int dpToPx(int dp) { DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT)); } @Override public void onDestroy() { super.onDestroy(); Async.cancelAll(); } public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { permissionChecker.onRequestPermissionsResult(requestCode, permissions, grantResults); } public void onBackPress() { ((MainActivity) getActivity()).killActivity(); } }