diff --git a/framework/src/main/java/de/arcus/framework/utils/SelectionList.java b/framework/src/main/java/de/arcus/framework/utils/SelectionList.java index 34785c8..22f398f 100644 --- a/framework/src/main/java/de/arcus/framework/utils/SelectionList.java +++ b/framework/src/main/java/de/arcus/framework/utils/SelectionList.java @@ -120,11 +120,13 @@ public abstract class SelectionList { // Set the selection state setSelected(item, state); - // Change the background - if (state) - view.setBackgroundColor(view.getResources().getColor(mResColorSelected)); - else - view.setBackgroundColor(view.getResources().getColor(mResColorNormal)); + if (view != null) { + // Change the background + if (state) + view.setBackgroundColor(view.getResources().getColor(mResColorSelected)); + else + view.setBackgroundColor(view.getResources().getColor(mResColorNormal)); + } } /** diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java index c409918..f49c7e7 100644 --- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java +++ b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java @@ -48,6 +48,11 @@ public class ActionModeTitle implements ActionMode.Callback { */ private SelectedTrackList mSelectionList; + /** + * Flag to not close the activity when action mode is closing + */ + private boolean mDoNotCloseActivity; + public ActionModeTitle(Context context, SelectedTrackList selectionList) { mContext = context; mSelectionList = selectionList; @@ -87,13 +92,25 @@ public class ActionModeTitle implements ActionMode.Callback { selectedTrack.export(mContext); } + // Do not close the activity + mDoNotCloseActivity = true; + // Clear the selection SelectedTrackList.getInstance().clear(); + return true; + case R.id.action_select_all: + // We are in the track list + if (mSelectionList.getActivity() instanceof MusicTrackListActivity) { + MusicTrackListActivity trackDetailActivity = (MusicTrackListActivity)mSelectionList.getActivity(); + + trackDetailActivity.selectAll(); + } - // Close the action mode - //mode.finish(); return true; case R.id.action_deselect_all: + // Do not close the activity + mDoNotCloseActivity = true; + // Clear the selection SelectedTrackList.getInstance().clear(); @@ -127,7 +144,7 @@ public class ActionModeTitle implements ActionMode.Callback { @Override public void onDestroyActionMode(ActionMode mode) { // We are in the music track list - if (mSelectionList.getActivity() instanceof MusicTrackListActivity) { + if (mSelectionList.getActivity() instanceof MusicTrackListActivity && !mDoNotCloseActivity) { // Clear the action mode SelectedTrackList.getInstance().clearActionMode(); diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicTrackListActivity.java b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicTrackListActivity.java index edf4058..3cfd2a8 100644 --- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicTrackListActivity.java +++ b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicTrackListActivity.java @@ -136,4 +136,16 @@ public class MusicTrackListActivity extends AppCompatActivity { if (musicTrackDetailFragment != null) musicTrackDetailFragment.updateListView(); } + + /** + * Select all items + */ + public void selectAll() { + // Gets the music list fragment + MusicTrackListFragment musicTrackDetailFragment = (MusicTrackListFragment) getSupportFragmentManager() + .findFragmentById(R.id.track_detail_container); + + if (musicTrackDetailFragment != null) + musicTrackDetailFragment.selectAll(); + } } diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicContainerListFragment.java b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicContainerListFragment.java index db19b75..218b6be 100644 --- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicContainerListFragment.java +++ b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicContainerListFragment.java @@ -103,6 +103,7 @@ public class MusicContainerListFragment extends ListFragment { getListView().invalidateViews(); } + /** * @param list Set the list */ diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java index 67a9d76..cb5beca 100644 --- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java +++ b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java @@ -72,6 +72,8 @@ public class MusicTrackListFragment extends Fragment { */ private ListView mListView; + private MusicTrackListAdapter mMusicTrackAdapter; + /** * Mandatory empty constructor for the fragment manager to instantiate the * fragment (e.g. upon screen orientation changes). @@ -87,6 +89,20 @@ public class MusicTrackListFragment extends Fragment { mListView.invalidateViews(); } + /** + * Select all items + */ + public void selectAll() { + // Select all tracks + for(int i = 0; i < mMusicTrackAdapter.getCount(); i++ ) { + MusicTrack musicTrack = mMusicTrackAdapter.getItem(i); + + selectTrack(musicTrack, null, false); + } + + updateListView(); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -114,9 +130,9 @@ public class MusicTrackListFragment extends Fragment { // Show the dummy content as text in a TextView. if (mMusicTrackList != null) { mListView = (ListView)rootView.findViewById(R.id.list_music_track); - final MusicTrackListAdapter musicTrackAdapter = new MusicTrackListAdapter(getActivity()); + mMusicTrackAdapter = new MusicTrackListAdapter(getActivity()); - musicTrackAdapter.setShowArtworks(mMusicTrackList.getShowArtworkInTrack()); + mMusicTrackAdapter.setShowArtworks(mMusicTrackList.getShowArtworkInTrack()); View headerView = inflater.inflate(R.layout.header_music_track_list, mListView, false); headerView.setEnabled(false); @@ -140,9 +156,9 @@ public class MusicTrackListFragment extends Fragment { mListView.addHeaderView(headerView); - musicTrackAdapter.setList(mMusicTrackList.getMusicTrackList()); + mMusicTrackAdapter.setList(mMusicTrackList.getMusicTrackList()); - mListView.setAdapter(musicTrackAdapter); + mListView.setAdapter(mMusicTrackAdapter); // Click on one list item mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @@ -154,29 +170,10 @@ public class MusicTrackListFragment extends Fragment { position -= 1; // Gets the selected track - MusicTrack musicTrack = musicTrackAdapter.getItem(position); + MusicTrack musicTrack = mMusicTrackAdapter.getItem(position); - // Track is available - if (musicTrack.isOfflineAvailable()) { - - // Default structure - String pathStructure = "{album-artist}/{album}/{disc=CD $}/{no=$$.} {title}.mp3"; - - // Track is exported from a group (playlist or artist) - if (!TextUtils.isEmpty(musicTrack.getContainerName())) - { - pathStructure = "{group}/{group-no=$$.} {title}.mp3"; - } - - // Build the path - String path = MusicPathBuilder.Build(musicTrack, pathStructure); - - // Path to the public music folder - path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + "/" + path; - - // Toggles the music track - SelectedTrackList.getInstance().toggle(new SelectedTrack(musicTrack.getId(), path), view); - } + // Toggle the track + selectTrack(musicTrack, view, true); } } }); @@ -184,4 +181,38 @@ public class MusicTrackListFragment extends Fragment { return rootView; } + + /** + * Select a track + * @param musicTrack The track + * @param view The view + * @param toggle If you want to toggle the selection set this to true + */ + private void selectTrack(MusicTrack musicTrack, View view, boolean toggle) { + // Track is available + if (musicTrack.isOfflineAvailable()) { + + // Default structure + String pathStructure = "{album-artist}/{album}/{disc=CD $}/{no=$$.} {title}.mp3"; + + // Track is exported from a group (playlist or artist) + if (!TextUtils.isEmpty(musicTrack.getContainerName())) + { + pathStructure = "{group}/{group-no=$$.} {title}.mp3"; + } + + // Build the path + String path = MusicPathBuilder.Build(musicTrack, pathStructure); + + // Path to the public music folder + path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + "/" + path; + + if (toggle) { + // Toggles the music track + SelectedTrackList.getInstance().toggle(new SelectedTrack(musicTrack.getId(), path), view); + } else { + SelectedTrackList.getInstance().setSelected(new SelectedTrack(musicTrack.getId(), path), true, view); + } + } + } }