package com.amaze.filemanager.utils; import com.amaze.filemanager.ui.drawer.Item; import com.cloudrail.si.interfaces.CloudStorage; import com.cloudrail.si.services.Box; import com.cloudrail.si.services.Dropbox; import com.cloudrail.si.services.GoogleDrive; import com.cloudrail.si.services.OneDrive; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Created by arpitkh996 on 20-01-2016. */ //Central data being used across activity,fragments and classes public class DataUtils { public static final int DELETE = 0, COPY = 1, MOVE = 2, NEW_FOLDER = 3, RENAME = 4, NEW_FILE = 5, EXTRACT = 6, COMPRESS = 7; public static final String DRIVE = "drive", SMB = "smb", BOOKS = "books", HISTORY = "Table1", HIDDEN = "Table2", LIST = "list", GRID = "grid"; private ArrayList<String> hiddenfiles = new ArrayList<>(), gridfiles = new ArrayList<>(), listfiles = new ArrayList<>(), history = new ArrayList<>(), storages = new ArrayList<>(); private ArrayList<Item> list = new ArrayList<>(); private ArrayList<String[]> servers = new ArrayList<>(), books = new ArrayList<>(); private ArrayList<CloudStorage> accounts = new ArrayList<>(4); private DataChangeListener dataChangeListener; public DataUtils() { } public int containsServer(String[] a) { return contains(a, servers); } public int containsServer(String path) { if (servers == null) return -1; int i = 0; for (String[] x : servers) { if (x[1].equals(path)) return i; i++; } return -1; } public int containsBooks(String[] a) { return contains(a, books); } /*public int containsAccounts(CloudEntry cloudEntry) { return contains(a, accounts); }*/ /** * Checks whether cloud account of certain type is present or not * @param serviceType the {@link OpenMode} of account to check * @return the index of account, -1 if not found */ public synchronized int containsAccounts(OpenMode serviceType) { int i = 0; for (CloudStorage storage : accounts) { switch (serviceType) { case BOX: if (storage instanceof Box) return i; break; case DROPBOX: if (storage instanceof Dropbox) return i; break; case GDRIVE: if (storage instanceof GoogleDrive) return i; break; case ONEDRIVE: if (storage instanceof OneDrive) return i; break; default: return -1; } i++; } return -1; } public void clear() { hiddenfiles = new ArrayList<>(); gridfiles = new ArrayList<>(); listfiles = new ArrayList<>(); history = new ArrayList<>(); storages = new ArrayList<>(); servers = new ArrayList<>(); books = new ArrayList<>(); accounts = new ArrayList<>(); } public void registerOnDataChangedListener(DataChangeListener l) { dataChangeListener = l; } int contains(String a, ArrayList<String[]> b) { int i = 0; for (String[] x : b) { if (x[1].equals(a)) return i; i++; } return -1; } int contains(String[] a, ArrayList<String[]> b) { if (b == null) return -1; int i = 0; for (String[] x : b) { if (x[0].equals(a[0]) && x[1].equals(a[1])) return i; i++; } return -1; } public void removeBook(int i) { if (books.size() > i) books.remove(i); } public synchronized void removeAccount(OpenMode serviceType) { for (CloudStorage storage : accounts) { switch (serviceType) { case BOX: if (storage instanceof Box) accounts.remove(storage); break; case DROPBOX: if (storage instanceof Dropbox) accounts.remove(storage); break; case GDRIVE: if (storage instanceof GoogleDrive) accounts.remove(storage); break; case ONEDRIVE: if (storage instanceof OneDrive) accounts.remove(storage); break; default: return; } } } public void removeServer(int i) { if (servers.size() > i) servers.remove(i); } public void addBook(String[] i) { books.add(i); } public void addBook(String[] i, boolean refreshdrawer) { if (refreshdrawer && dataChangeListener != null) dataChangeListener.onBookAdded(i, true); books.add(i); } public synchronized void addAccount(CloudStorage storage) { accounts.add(storage); } public void addServer(String[] i) { servers.add(i); } public void addHiddenFile(String i) { hiddenfiles.add(i); if (dataChangeListener != null) dataChangeListener.onHiddenFileAdded(i); } public void removeHiddenFile(String i) { hiddenfiles.remove(i); if (dataChangeListener != null) dataChangeListener.onHiddenFileRemoved(i); } public ArrayList<String> getHistory() { return history; } public void addHistoryFile(String i) { history.add(i); if (dataChangeListener != null) dataChangeListener.onHistoryAdded(i); } public void sortBook() { Collections.sort(books, new BookSorter()); } public void setServers(ArrayList<String[]> servers) { if (servers != null) this.servers = servers; } public synchronized void setBooks(ArrayList<String[]> books) { if (books != null) this.books = books; } public synchronized void setAccounts(ArrayList<CloudStorage> accounts) { if (accounts != null) this.accounts = accounts; } public synchronized ArrayList<String[]> getServers() { return servers; } public synchronized ArrayList<String[]> getBooks() { return books; } public synchronized ArrayList<CloudStorage> getAccounts() { return accounts; } public synchronized CloudStorage getAccount(OpenMode serviceType) { for (CloudStorage storage : accounts) { switch (serviceType) { case BOX: if (storage instanceof Box) return storage; break; case DROPBOX: if (storage instanceof Dropbox) return storage; break; case GDRIVE: if (storage instanceof GoogleDrive) return storage; break; case ONEDRIVE: if (storage instanceof OneDrive) return storage; break; default: return null; } } return null; } public ArrayList<String> getHiddenfiles() { return hiddenfiles; } public void setHiddenfiles(ArrayList<String> hiddenfiles) { if (hiddenfiles != null) this.hiddenfiles = hiddenfiles; } public ArrayList<String> getGridFiles() { return gridfiles; } public void setGridfiles(ArrayList<String> gridfiles) { if (gridfiles != null) this.gridfiles = gridfiles; } public ArrayList<String> getListfiles() { return listfiles; } public void setListfiles(ArrayList<String> listfiles) { if (listfiles != null) this.listfiles = listfiles; } public void clearHistory() { history = new ArrayList<>(); if (dataChangeListener != null) dataChangeListener.onHistoryCleared(); } public synchronized List<String> getStorages() { return storages; } public synchronized void setStorages(ArrayList<String> storages) { this.storages = storages; } public ArrayList<Item> getList() { return list; } public synchronized void setList(ArrayList<Item> list) { this.list = list; } //Callbacks to do original changes in database (and ui if required) public interface DataChangeListener { void onHiddenFileAdded(String path); void onHiddenFileRemoved(String path); void onHistoryAdded(String path); void onBookAdded(String path[], boolean refreshdrawer); void onHistoryCleared(); } }