package com.garethevans.church.opensongtablet; import android.app.Activity; import android.content.Context; import java.io.File; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; public class ListSongFiles extends Activity { static Collator coll; // OLD ONE public static void listSongFolders() { FullscreenActivity.allfilesforsearch.clear(); File songfolder = new File(FullscreenActivity.dir.getAbsolutePath()); File[] tempmyitems = null; if (songfolder.isDirectory()) { tempmyitems = songfolder.listFiles(); } // Go through this list and check if the item is a directory or a file. int tempnumitems; if (tempmyitems != null && tempmyitems.length>0) { tempnumitems = tempmyitems.length; } else { tempnumitems = 0; } int numactualdirs = 0; for (int x=0; x<tempnumitems; x++) { if (tempmyitems[x] != null && tempmyitems[x].isDirectory()){ numactualdirs ++; } } //Now set the size of the temp arrays ArrayList<String> tempProperDirectories = new ArrayList<>(); //Now read the stuff into the temp array for (int x=0; x<tempnumitems; x++) { if (tempmyitems[x] != null && tempmyitems[x].isDirectory()) { tempProperDirectories.add(tempmyitems[x].getName()); } } //Sort these arrays // Add locale sort coll = Collator.getInstance(FullscreenActivity.locale); coll.setStrength(Collator.SECONDARY); Collections.sort(tempProperDirectories, coll); // Because the MAIN folder doesn't exist as a listed folder, it is just the root, // We need to add it as the first folder manually. // All other folders go as an index 1 higher FullscreenActivity.mSongFolderNames = new String[numactualdirs+1]; FullscreenActivity.mSongFolderNames = tempProperDirectories.toArray(FullscreenActivity.mSongFolderNames); // Now go through each folder and add the file names to these arrays FullscreenActivity.childSongs = new String[numactualdirs+1][]; // Add the MAIN folder first File[] temp_mainfiles = songfolder.listFiles(); int main_numfiles = 0; if (songfolder.isDirectory() && temp_mainfiles != null) { main_numfiles = temp_mainfiles.length; } // Go through this list and check if the item is a directory or a file. if (temp_mainfiles != null && main_numfiles>0 && songfolder.isDirectory()) { main_numfiles = temp_mainfiles.length; } else { main_numfiles = 0; } //Now set the size of the temp arrays ArrayList<String> tempMainProperFiles= new ArrayList<>(); int temp_mainnumfilescount = 0; for (int x=0; x<main_numfiles; x++) { if (temp_mainfiles[x] != null && !temp_mainfiles[x].isDirectory() && temp_mainfiles[x].isFile()){ tempMainProperFiles.add(temp_mainfiles[x].getName()); FullscreenActivity.allfilesforsearch.add(temp_mainfiles[x].getName() + " %%% " + FullscreenActivity.mainfoldername); temp_mainnumfilescount++; } } //Sort these arrays // Add locale sort Collections.sort(tempMainProperFiles,coll); //Collections.sort(tempMainProperFiles, String.CASE_INSENSITIVE_ORDER); FullscreenActivity.childSongs[0] = new String[temp_mainnumfilescount]; FullscreenActivity.childSongs[0] = tempMainProperFiles.toArray(FullscreenActivity.childSongs[0]); for (int w=0;w<numactualdirs;w++) { File currsongfolder = new File(FullscreenActivity.dir.getAbsolutePath() + "/"+FullscreenActivity.mSongFolderNames[w]); File[] tempmyfiles = currsongfolder.listFiles(); // Go through this list and check if the item is a directory or a file. int tempnumfiles; if (tempmyfiles != null && tempmyfiles.length>0) { tempnumfiles = tempmyfiles.length; } else { tempnumfiles = 0; } int numactualfiles = 0; for (int x=0; x<tempnumfiles; x++) { if (tempmyfiles[x] != null && tempmyfiles[x].isFile()){ numactualfiles ++; } } //Now set the size of the temp arrays ArrayList<String> tempProperFiles= new ArrayList<>(); //Now read the stuff into the temp array for (int x=0; x<numactualfiles; x++) { if (tempmyfiles[x] != null && tempmyfiles[x].isFile()) { tempProperFiles.add(tempmyfiles[x].getName()); } } //Sort these arrays // Add locale sort Collections.sort(tempProperFiles,coll); //Collections.sort(tempProperFiles, String.CASE_INSENSITIVE_ORDER); FullscreenActivity.childSongs[w+1] = new String[numactualfiles]; FullscreenActivity.childSongs[w+1] = tempProperFiles.toArray(FullscreenActivity.childSongs[w+1]); for (int f=0; f<tempProperFiles.size(); f++) { try { FullscreenActivity.allfilesforsearch_folder.add(FullscreenActivity.mSongFolderNames[w]); FullscreenActivity.allfilesforsearch_song.add(tempProperFiles.get(f)); FullscreenActivity.allfilesforsearch.add(tempProperFiles.get(f) + " %%% " + FullscreenActivity.mSongFolderNames[w]); } catch (Exception e) { //Something went wrong here e.printStackTrace(); } } } } public static void getAllSongFolders() { FullscreenActivity.allfilesforsearch.clear(); File songfolder = new File(FullscreenActivity.dir.getAbsolutePath()); File[] tempmyitems = null; if (songfolder.isDirectory()) { tempmyitems = songfolder.listFiles(); } //Now set the size of the temp arrays ArrayList<String> firstleveldirectories = new ArrayList<>(); ArrayList<String> secondleveldirectories = new ArrayList<>(); ArrayList<String> tempProperDirectories = new ArrayList<>(); //Now read the folder names for the first level directories if (tempmyitems!=null) { for (File tempmyitem : tempmyitems) { if (tempmyitem != null && tempmyitem.isDirectory()) { firstleveldirectories.add(tempmyitem.getName()); } } } //Now go through the firstlevedirectories and look for subfolders for (int x = 0; x < firstleveldirectories.size(); x++) { File folder = new File(FullscreenActivity.dir.getAbsolutePath() + "/" + firstleveldirectories.get(x)); File[] subfoldersearch = folder.listFiles(); if (subfoldersearch!=null) { for (File aSubfoldersearch : subfoldersearch) { if (aSubfoldersearch != null && aSubfoldersearch.isDirectory()) { secondleveldirectories.add(firstleveldirectories.get(x) + "/" + aSubfoldersearch.getName()); } } } } // Now combine the two arrays and save them as a string array tempProperDirectories.addAll(firstleveldirectories); tempProperDirectories.addAll(secondleveldirectories); coll = Collator.getInstance(FullscreenActivity.locale); coll.setStrength(Collator.SECONDARY); Collections.sort(tempProperDirectories,coll); // Add the main directory - +1 to add the MAIN folder as position 0 FullscreenActivity.mSongFolderNames = new String[tempProperDirectories.size()+1]; FullscreenActivity.mSongFolderNames[0] = FullscreenActivity.mainfoldername; for (int z=0; z<tempProperDirectories.size(); z++) { FullscreenActivity.mSongFolderNames[z+1] = tempProperDirectories.get(z); } } public static void getAllSongFiles() { File foldertoindex; if (FullscreenActivity.whichSongFolder.equals(FullscreenActivity.mainfoldername)) { foldertoindex = FullscreenActivity.dir; } else { foldertoindex = new File(FullscreenActivity.dir + "/" + FullscreenActivity.whichSongFolder); } File[] tempmyFiles = foldertoindex.listFiles(); ArrayList<String> tempProperSongFiles = new ArrayList<>(); if (tempmyFiles!=null) { for (File tempmyFile : tempmyFiles) { if (tempmyFile != null && tempmyFile.isFile()) { tempProperSongFiles.add(tempmyFile.getName()); } } } // Sort the files alphabetically using locale coll = Collator.getInstance(FullscreenActivity.locale); coll.setStrength(Collator.SECONDARY); Collections.sort(tempProperSongFiles, coll); FullscreenActivity.mSongFileNames = new String[tempProperSongFiles.size()]; FullscreenActivity.mSongFileNames = tempProperSongFiles.toArray(FullscreenActivity.mSongFileNames); } // OLD ONE public static void listSongs() { // A temporary array to put the file names into. Do this, sort the array // List the items in the main storage location into a temporary array. // What song folder is being viewed? // If it is MAIN then it is the main one File foldertoindex; if (FullscreenActivity.whichSongFolder.equals(FullscreenActivity.mainfoldername)) { foldertoindex = FullscreenActivity.dir; } else { foldertoindex = new File(FullscreenActivity.dir + "/" + FullscreenActivity.whichSongFolder); } File[] tempmyFiles = foldertoindex.listFiles(); // Go through this list and check if the item is a directory or a file. // Add these to the correct array int tempnumfiles; if (tempmyFiles != null && tempmyFiles.length>0) { tempnumfiles = tempmyFiles.length; } else { tempnumfiles = 0; } int numactualfiles = 0; int numactualdirs = 0; for (int x=0; x<tempnumfiles; x++) { if (tempmyFiles[x] != null && tempmyFiles[x].isFile()) { numactualfiles ++; } else if (tempmyFiles[x] != null){ numactualdirs ++; } } //Now set the size of the temp arrays ArrayList<String> tempProperSongFiles = new ArrayList<>(); ArrayList<String> tempProperDirectories = new ArrayList<>(); //Now read the stuff into the temp arrays for (int x=0; x<tempnumfiles; x++) { if (tempmyFiles[x] != null && tempmyFiles[x].isFile()) { tempProperSongFiles.add(tempmyFiles[x].getName()); } else if (tempmyFiles[x] != null && tempmyFiles[x].isDirectory()) { tempProperDirectories.add(tempmyFiles[x].getName()); } } //Sort these arrays // Add locale sort coll = Collator.getInstance(FullscreenActivity.locale); coll.setStrength(Collator.SECONDARY); Collections.sort(tempProperSongFiles, coll); Collections.sort(tempProperDirectories,coll); //Add folder name to first item of songlist tempProperSongFiles.add(0, FullscreenActivity.whichSongFolder); tempProperDirectories.add(0, FullscreenActivity.mainfoldername); //Make the real arrays one bigger FullscreenActivity.mSongFileNames = new String[numactualfiles+1]; //FullscreenActivity.mSongFileNames = new String[numactualfiles]; FullscreenActivity.mSongFolderNames = new String[numactualdirs+1]; //FullscreenActivity.mSongFolderNames = new String[numactualdirs]; FullscreenActivity.mSongFileNames = tempProperSongFiles.toArray(FullscreenActivity.mSongFileNames); FullscreenActivity.mSongFolderNames = tempProperDirectories.toArray(FullscreenActivity.mSongFolderNames); } public static void getCurrentSongIndex() { // Find the current song index from the song filename // Set them all to 0 FullscreenActivity.currentSongIndex = 0; FullscreenActivity.nextSongIndex = 0; FullscreenActivity.previousSongIndex = 0; // Go through the array if (FullscreenActivity.mSongFileNames!=null && FullscreenActivity.songfilename!=null) { for (int s = 0; s < FullscreenActivity.mSongFileNames.length; s++) { if (FullscreenActivity.mSongFileNames != null && FullscreenActivity.songfilename != null && FullscreenActivity.mSongFileNames[s] != null && FullscreenActivity.mSongFileNames[s].equals(FullscreenActivity.songfilename)) { FullscreenActivity.currentSongIndex = s; if (s > 1) { FullscreenActivity.previousSongIndex = s - 1; } else { FullscreenActivity.previousSongIndex = s; } if (s < FullscreenActivity.mSongFileNames.length - 1) { FullscreenActivity.nextSongIndex = s + 1; } else { FullscreenActivity.nextSongIndex = s; } } } } } public static void deleteSong(Context c) { FullscreenActivity.setView = false; String setFileLocation; if (FullscreenActivity.whichSongFolder.equals(FullscreenActivity.mainfoldername)) { setFileLocation = FullscreenActivity.dir + "/" + FullscreenActivity.songfilename; } else { setFileLocation = FullscreenActivity.dir + "/" + FullscreenActivity.whichSongFolder + "/" + FullscreenActivity.songfilename; } File filetoremove = new File(setFileLocation); if (filetoremove.delete()) { FullscreenActivity.myToastMessage = "\"" + FullscreenActivity.songfilename + "\" " + c.getString(R.string.songhasbeendeleted); } else { FullscreenActivity.myToastMessage = c.getString(R.string.deleteerror_start) + " \"" + FullscreenActivity.songfilename + "\" " + c.getString(R.string.deleteerror_end_song); } } }