aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/filemanager/ui/dialogs/FilesystemInfoDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/cyanogenmod/filemanager/ui/dialogs/FilesystemInfoDialog.java')
-rw-r--r--src/com/cyanogenmod/filemanager/ui/dialogs/FilesystemInfoDialog.java117
1 files changed, 113 insertions, 4 deletions
diff --git a/src/com/cyanogenmod/filemanager/ui/dialogs/FilesystemInfoDialog.java b/src/com/cyanogenmod/filemanager/ui/dialogs/FilesystemInfoDialog.java
index 392f36fd..5ead3192 100644
--- a/src/com/cyanogenmod/filemanager/ui/dialogs/FilesystemInfoDialog.java
+++ b/src/com/cyanogenmod/filemanager/ui/dialogs/FilesystemInfoDialog.java
@@ -19,37 +19,128 @@ package com.cyanogenmod.filemanager.ui.dialogs;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
+import android.database.Cursor;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.GridLayout;
import android.widget.Switch;
import android.widget.TextView;
-
import com.cyanogenmod.filemanager.FileManagerApplication;
import com.cyanogenmod.filemanager.R;
import com.cyanogenmod.filemanager.console.Console;
import com.cyanogenmod.filemanager.console.ConsoleBuilder;
import com.cyanogenmod.filemanager.model.DiskUsage;
+import com.cyanogenmod.filemanager.model.DiskUsageCategory;
import com.cyanogenmod.filemanager.model.MountPoint;
import com.cyanogenmod.filemanager.preferences.AccessMode;
import com.cyanogenmod.filemanager.preferences.FileManagerSettings;
import com.cyanogenmod.filemanager.preferences.Preferences;
+import com.cyanogenmod.filemanager.providers.MimeTypeIndexProvider;
+import com.cyanogenmod.filemanager.tasks.FetchStatsByTypeTask;
+import com.cyanogenmod.filemanager.tasks.FetchStatsByTypeTask.Listener;
import com.cyanogenmod.filemanager.ui.ThemeManager;
import com.cyanogenmod.filemanager.ui.ThemeManager.Theme;
import com.cyanogenmod.filemanager.ui.widgets.DiskUsageGraph;
import com.cyanogenmod.filemanager.util.CommandHelper;
import com.cyanogenmod.filemanager.util.DialogHelper;
import com.cyanogenmod.filemanager.util.FileHelper;
+import com.cyanogenmod.filemanager.util.MimeTypeHelper.MimeTypeCategory;
import com.cyanogenmod.filemanager.util.MountPointHelper;
/**
* A class that wraps a dialog for showing information about a mount point.<br />
* This class display information like mount point name, device name, size, type, ...
*/
-public class FilesystemInfoDialog implements OnClickListener, OnCheckedChangeListener {
+public class FilesystemInfoDialog implements OnClickListener, OnCheckedChangeListener, Listener {
+
+ @Override
+ public void onCursor(Cursor cursor) {
+ if (cursor == null) {
+ Log.w(TAG, "Cursor is null");
+ return;
+ }
+ if (mDiskUsage == null) {
+ Log.w(TAG, "No disk usage available!");
+ return;
+ }
+ mDiskUsage.clearUsageCategories();
+ while(cursor.moveToNext()) {
+ String fileRoot = cursor.getString(cursor.getColumnIndex(MimeTypeIndexProvider
+ .COLUMN_FILE_ROOT));
+ String categoryString = cursor.getString(cursor.getColumnIndex(MimeTypeIndexProvider
+ .COLUMN_CATEGORY));
+ long size = cursor.getLong(cursor.getColumnIndex(MimeTypeIndexProvider.COLUMN_SIZE));
+ MimeTypeCategory category = MimeTypeCategory.valueOf(categoryString);
+ DiskUsageCategory usageCategory = new DiskUsageCategory(category, size);
+ mDiskUsage.addUsageCategory(usageCategory);
+
+ // [TODO][MSB]: Unhandled case: No data, sync in progress, ready to draw
+ // * Should check if 0 length, then wait on uri notification?
+ // ** This should only happen if you are using it without a sync ever having happened
+ // ** before.
+ // * Should always wait on uri notification and update drawing?
+ // * Otherwise if we have data then we are good to go!
+ // * Also should think of a way to dispatch and index refresh (alarm manager? file
+ // ** observer?)
+
+ }
+
+ this.mDiskUsageGraph.post(new Runnable() {
+ @Override
+ public void run() {
+ //Animate disk usage graph
+ FilesystemInfoDialog.this.mDiskUsageGraph.drawDiskUsage(mDiskUsage);
+ if (mIsInUsageTab) {
+ if (mLegendLayout.getVisibility() != View.VISIBLE) {
+ populateLegend();
+ mLegendLayout.setVisibility(View.VISIBLE);
+ }
+ }
+ isFetching = false;
+ }
+ });
+ }
+
+ private void populateLegend() {
+ if (mLegendLayout == null) {
+ Log.w(TAG, "Unable to find view for legend");
+ return;
+ }
+ mLegendLayout.removeAllViews();
+ LayoutInflater inflater = LayoutInflater.from(mContext);
+ int index = 0;
+ if (mDiskUsage == null) {
+ Log.w(TAG, "No disk usage information");
+ return;
+ }
+ for (DiskUsageCategory category : mDiskUsage.getUsageCategoryList()) {
+ View ll = inflater.inflate(R.layout.disk_usage_category_view, null, false);
+ View colorView = ll.findViewById(R.id.v_legend_swatch);
+ index = (index < DiskUsageGraph.COLOR_LIST.size()) ? index : 0; // normalize index
+ colorView.setBackgroundColor(DiskUsageGraph.COLOR_LIST.get(index));
+ TextView titleView = (TextView) ll.findViewById(R.id.tv_legend_title);
+ String localizedName = MimeTypeCategory.getFriendlyLocalizedNames(mContext)[category
+ .getCategory().ordinal()];
+ titleView.setText(localizedName);
+ mLegendLayout.addView(ll);
+ index++;
+ }
+ }
+
+ boolean isFetching;
+ FetchStatsByTypeTask mFetchStatsByTypeTask;
+ private void fetchStats(String fileRoot) {
+ if (!isFetching) {
+ isFetching = true;
+ mFetchStatsByTypeTask.execute(fileRoot);
+ } else {
+ Log.w(TAG, "Already fetching data...");
+ }
+ }
/**
* An interface to communicate when the user change the mount state
@@ -87,11 +178,13 @@ public class FilesystemInfoDialog implements OnClickListener, OnCheckedChangeLis
*/
DiskUsageGraph mDiskUsageGraph;
private TextView mInfoMsgView;
+ private GridLayout mLegendLayout;
private OnMountListener mOnMountListener;
private boolean mIsMountAllowed;
private final boolean mIsAdvancedMode;
+ private boolean mIsInUsageTab = false;
/**
* Constructor of <code>FilesystemInfoDialog</code>.
@@ -108,6 +201,8 @@ public class FilesystemInfoDialog implements OnClickListener, OnCheckedChangeLis
//Save data
this.mMountPoint = mountPoint;
+ mFetchStatsByTypeTask = new FetchStatsByTypeTask(this.mContext, this);
+ fetchStats(mMountPoint.getMountPoint());
this.mDiskUsage = diskUsage;
this.mIsMountAllowed = false;
this.mIsAdvancedMode =
@@ -168,6 +263,8 @@ public class FilesystemInfoDialog implements OnClickListener, OnCheckedChangeLis
this.mDiskUsageGraph =
(DiskUsageGraph)contentView.findViewById(R.id.filesystem_disk_usage_graph);
+ this.mLegendLayout = (GridLayout) contentView.findViewById(R.id.ll_legend);
+
// Set the user preference about free disk space warning level
String fds = Preferences.getSharedPreferences().getString(
FileManagerSettings.SETTINGS_DISK_USAGE_WARNING_LEVEL.getId(),
@@ -255,6 +352,7 @@ public class FilesystemInfoDialog implements OnClickListener, OnCheckedChangeLis
public void onClick(View v) {
switch (v.getId()) {
case R.id.filesystem_info_dialog_tab_info:
+ mIsInUsageTab = false;
if (!this.mInfoViewTab.isSelected()) {
this.mInfoViewTab.setSelected(true);
((TextView)this.mInfoViewTab).setTextAppearance(
@@ -270,9 +368,11 @@ public class FilesystemInfoDialog implements OnClickListener, OnCheckedChangeLis
}
this.mInfoMsgView.setVisibility(
this.mIsMountAllowed || !this.mIsAdvancedMode ? View.GONE : View.VISIBLE);
+ mLegendLayout.setVisibility(View.INVISIBLE);
break;
case R.id.filesystem_info_dialog_tab_disk_usage:
+ mIsInUsageTab = true;
if (!this.mDiskUsageViewTab.isSelected()) {
this.mInfoViewTab.setSelected(false);
((TextView)this.mInfoViewTab).setTextAppearance(
@@ -290,13 +390,19 @@ public class FilesystemInfoDialog implements OnClickListener, OnCheckedChangeLis
@Override
public void run() {
//Animate disk usage graph
- FilesystemInfoDialog.this.mDiskUsageGraph.drawDiskUsage(
- FilesystemInfoDialog.this.mDiskUsage);
+ FilesystemInfoDialog.this.mDiskUsageGraph.drawDiskUsage(mDiskUsage);
+ if (mIsInUsageTab) {
+ if (mLegendLayout.getVisibility() != View.VISIBLE) {
+ populateLegend();
+ mLegendLayout.setVisibility(View.VISIBLE);
+ }
+ }
}
});
break;
case R.id.filesystem_info_msg:
+ mIsInUsageTab = false;
//Change the console
boolean superuser = ConsoleBuilder.changeToPrivilegedConsole(this.mContext);
if (superuser) {
@@ -319,9 +425,12 @@ public class FilesystemInfoDialog implements OnClickListener, OnCheckedChangeLis
this.mInfoMsgView.setVisibility(View.VISIBLE);
this.mIsMountAllowed = false;
}
+ mLegendLayout.setVisibility(View.INVISIBLE);
break;
default:
+ mIsInUsageTab = false;
+ mLegendLayout.setVisibility(View.INVISIBLE);
break;
}
}