package com.google.android.diskusage; import android.os.Build; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.MenuItem.OnMenuItemClickListener; import com.google.android.diskusage.datasource.DataSource; import com.google.android.diskusage.entity.FileSystemEntry; import com.google.android.diskusage.entity.FileSystemFile; import com.google.android.diskusage.entity.FileSystemSpecial; import com.google.android.diskusage.entity.FileSystemSuperRoot; public abstract class DiskUsageMenu { protected final DiskUsage diskusage; protected String searchPattern; private FileSystemEntry selectedEntity; protected FileSystemSuperRoot masterRoot; SearchManager searchManager = new SearchManager(this); protected MenuItem searchMenuItem; protected MenuItem showMenuItem; protected MenuItem rescanMenuItem; protected MenuItem deleteMenuItem; protected MenuItem rendererMenuItem; protected MenuItem filterMenuItem; public DiskUsageMenu(DiskUsage diskusage) { this.diskusage = diskusage; } public static DiskUsageMenu getInstance(DiskUsage diskusage) { final int sdkVersion = DataSource.get().getAndroidVersion(); if (sdkVersion < Build.VERSION_CODES.CUPCAKE) { return new DiskUsageMenuPreCupcake(diskusage); } if (sdkVersion >= Build.VERSION_CODES.HONEYCOMB) { return new DiskUsageMenuHoneycomb(diskusage); } else { return new DiskUsageMenuFroyo(diskusage); } } public abstract void onCreate(); public abstract boolean readyToFinish(); public abstract void searchRequest(); public abstract MenuItem makeSearchMenuEntry(Menu menu); public final void onSaveInstanceState(Bundle outState) { outState.putString("search", searchPattern); } public final void onRestoreInstanceState(Bundle inState) { searchPattern = inState.getString("search"); } public void wrapAndSetContentView(View view, FileSystemSuperRoot newRoot) { this.masterRoot = newRoot; updateMenu(); } public void applyPattern(String searchQuery) { if (searchQuery == null || masterRoot == null) return; if (searchQuery.length() == 0) { searchManager.cancelSearch(); finishedSearch(masterRoot, searchQuery); } else { searchManager.search(searchQuery); } } public boolean finishedSearch(FileSystemSuperRoot newRoot, String searchQuery) { boolean matched = newRoot != null; if (!matched) newRoot = masterRoot; diskusage.applyPatternNewRoot(newRoot, searchQuery); return matched; } public void addRescanMenuEntry(Menu menu) { menu.add(getString(R.string.button_rescan)) .setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { diskusage.rescan(); return true; } }); } public void update(FileSystemEntry position) { this.selectedEntity = position; updateMenu(); } private String getString(int id) { return diskusage.getString(id); } public boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); searchMenuItem = makeSearchMenuEntry(menu); showMenuItem = menu.add(getString(R.string.button_show)); showMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { if (selectedEntity != null) { diskusage.view(selectedEntity); } return true; } }); rescanMenuItem = menu.add(getString(R.string.button_rescan)); rescanMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { diskusage.rescan(); return true; } }); deleteMenuItem = menu.add(getString(R.string.button_delete)); deleteMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { diskusage.askForDeletion(selectedEntity); return true; } }); rendererMenuItem = menu.add("Renderer"); rendererMenuItem.setVisible( diskusage.rendererManager.isHardwareRendererSupported()); rendererMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { diskusage.rendererManager.switchRenderer(masterRoot); return true; } }); filterMenuItem = menu.add(getString(R.string.change_filter)); filterMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { diskusage.showFilterDialog(); return true; } }); updateMenu(); return true; } private void updateMenu() { if (showMenuItem == null) return; if (diskusage.fileSystemState == null) { searchMenuItem.setEnabled(false); showMenuItem.setEnabled(false); rescanMenuItem.setEnabled(false); deleteMenuItem.setEnabled(false); rendererMenuItem.setEnabled(false); return; } if (diskusage.fileSystemState.sdcardIsEmpty()) { searchMenuItem.setEnabled(false); showMenuItem.setEnabled(false); rescanMenuItem.setEnabled(true); deleteMenuItem.setEnabled(false); rendererMenuItem.setEnabled(false); } rendererMenuItem.setEnabled(true); final boolean isGPU = diskusage.fileSystemState.isGPU(); rendererMenuItem.setTitle(isGPU ? "Software Renderer" : "Hardware Renderer"); rescanMenuItem.setEnabled(true); searchMenuItem.setEnabled(true); boolean view = !(selectedEntity == diskusage.fileSystemState.masterRoot.children[0] || selectedEntity instanceof FileSystemSpecial); showMenuItem.setEnabled(view); boolean fileOrNotSearching = searchPattern == null || selectedEntity.children == null; deleteMenuItem.setEnabled(view && selectedEntity instanceof FileSystemFile && fileOrNotSearching); boolean isAppUsage = diskusage instanceof AppUsage; deleteMenuItem.setVisible(!isAppUsage); filterMenuItem.setVisible(isAppUsage); } // @Override // public boolean onPrepareOptionsMenu(Menu menu) { // //Log.d("DiskUsage", "onCreateContextMenu"); // menu.clear(); // platform.addSearchMenuEntry(menu); // if (fileSystemState == null) return true; // // boolean showFileMenu = addShowMenuEntry(menu); // addRendererSwitchItem(menu); // addRescanMenuEntry(menu); // // final FileSystemEntry menuForEntry = selectedEntity; // menu.add(str(R.string.button_delete)) // .setEnabled(showFileMenu && menuForEntry instanceof FileSystemFile) // .setOnMenuItemClickListener(new OnMenuItemClickListener() { // public boolean onMenuItemClick(MenuItem item) { // askForDeletion(menuForEntry); // return true; // } // }); // return true; // } // @Override // FIXME AppUsage // public final boolean onPrepareOptionsMenu(Menu menu) { // //Log.d("DiskUsage", "onCreateContextMenu"); // menu.clear(); // platform.addSearchMenuEntry(menu); // if (fileSystemState == null) return true; // addShowMenuEntry(menu); // addRendererSwitchItem(menu); // addRescanMenuEntry(menu); // // menu.add(getString(R.string.change_filter)) // .setOnMenuItemClickListener(new OnMenuItemClickListener() { // public boolean onMenuItemClick(MenuItem item) { // showFilterDialog(); // return true; // } // }); // return true; // } // }