Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f7ee64da authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix when search "storage", there are multiple results" into rvc-dev

parents 38b0d309 9f196efc
Loading
Loading
Loading
Loading
+83 −9
Original line number Diff line number Diff line
@@ -70,6 +70,16 @@ import java.util.List;
public class StorageSettings extends SettingsPreferenceFragment implements Indexable {
    static final String TAG = "StorageSettings";

    private static final String KEY_STORAGE_SETTINGS = "storage_settings";
    private static final String KEY_INTERNAL_STORAGE = "storage_settings_internal_storage";
    private static final String KEY_STORAGE_SETTINGS_VOLUME = "storage_settings_volume_";
    private static final String KEY_STORAGE_SETTINGS_MEMORY_SIZE = "storage_settings_memory_size";
    private static final String KEY_STORAGE_SETTINGS_MEMORY = "storage_settings_memory_available";
    private static final String KEY_STORAGE_SETTINGS_DCIM = "storage_settings_dcim_space";
    private static final String KEY_STORAGE_SETTINGS_MUSIC = "storage_settings_music_space";
    private static final String KEY_STORAGE_SETTINGS_MISC = "storage_settings_misc_space";
    private static final String KEY_STORAGE_SETTINGS_FREE_SPACE = "storage_settings_free_space";

    private static final String TAG_VOLUME_UNMOUNTED = "volume_unmounted";
    private static final String TAG_DISK_INIT = "disk_init";
    private static final int METRICS_CATEGORY = SettingsEnums.DEVICEINFO_STORAGE;
@@ -551,14 +561,14 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index

                    SearchIndexableRaw data = new SearchIndexableRaw(context);
                    data.title = context.getString(R.string.storage_settings);
                    data.key = "storage_settings";
                    data.key = KEY_STORAGE_SETTINGS;
                    data.screenTitle = context.getString(R.string.storage_settings);
                    data.keywords = context.getString(R.string.keywords_storage_settings);
                    result.add(data);

                    data = new SearchIndexableRaw(context);
                    data.title = context.getString(R.string.internal_storage);
                    data.key = "storage_settings_internal_storage";
                    data.key = KEY_INTERNAL_STORAGE;
                    data.screenTitle = context.getString(R.string.storage_settings);
                    result.add(data);

@@ -568,7 +578,7 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
                    for (VolumeInfo vol : vols) {
                        if (isInteresting(vol)) {
                            data.title = storage.getBestVolumeDescription(vol);
                            data.key = "storage_settings_volume_" + vol.id;
                            data.key = KEY_STORAGE_SETTINGS_VOLUME + vol.id;
                            data.screenTitle = context.getString(R.string.storage_settings);
                            result.add(data);
                        }
@@ -576,37 +586,37 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index

                    data = new SearchIndexableRaw(context);
                    data.title = context.getString(R.string.memory_size);
                    data.key = "storage_settings_memory_size";
                    data.key = KEY_STORAGE_SETTINGS_MEMORY_SIZE;
                    data.screenTitle = context.getString(R.string.storage_settings);
                    result.add(data);

                    data = new SearchIndexableRaw(context);
                    data.title = context.getString(R.string.memory_available);
                    data.key = "storage_settings_memory_available";
                    data.key = KEY_STORAGE_SETTINGS_MEMORY;
                    data.screenTitle = context.getString(R.string.storage_settings);
                    result.add(data);

                    data = new SearchIndexableRaw(context);
                    data.title = context.getString(R.string.memory_dcim_usage);
                    data.key = "storage_settings_dcim_space";
                    data.key = KEY_STORAGE_SETTINGS_DCIM;
                    data.screenTitle = context.getString(R.string.storage_settings);
                    result.add(data);

                    data = new SearchIndexableRaw(context);
                    data.title = context.getString(R.string.memory_music_usage);
                    data.key = "storage_settings_music_space";
                    data.key = KEY_STORAGE_SETTINGS_MUSIC;
                    data.screenTitle = context.getString(R.string.storage_settings);
                    result.add(data);

                    data = new SearchIndexableRaw(context);
                    data.title = context.getString(R.string.memory_media_misc_usage);
                    data.key = "storage_settings_misc_space";
                    data.key = KEY_STORAGE_SETTINGS_MISC;
                    data.screenTitle = context.getString(R.string.storage_settings);
                    result.add(data);

                    data = new SearchIndexableRaw(context);
                    data.title = context.getString(R.string.storage_menu_free);
                    data.key = "storage_settings_free_space";
                    data.key = KEY_STORAGE_SETTINGS_FREE_SPACE;
                    data.screenTitle = context.getString(R.string.storage_menu_free);
                    // We need to define all three in order for this to trigger properly.
                    data.intentAction = StorageManager.ACTION_MANAGE_STORAGE;
@@ -618,5 +628,69 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index

                    return result;
                }

                @Override
                public List<String> getNonIndexableKeys(Context context) {
                    final List<String> niks = super.getNonIndexableKeys(context);
                    if (isExternalExist(context)) {
                        niks.add(KEY_STORAGE_SETTINGS);
                        niks.add(KEY_INTERNAL_STORAGE);
                        niks.add(KEY_STORAGE_SETTINGS_MEMORY_SIZE);
                        niks.add(KEY_STORAGE_SETTINGS_MEMORY);
                        niks.add(KEY_STORAGE_SETTINGS_DCIM);
                        niks.add(KEY_STORAGE_SETTINGS_MUSIC);
                        niks.add(KEY_STORAGE_SETTINGS_MISC);
                        niks.add(KEY_STORAGE_SETTINGS_FREE_SPACE);

                        final StorageManager storage = context.getSystemService(
                                StorageManager.class);
                        final List<VolumeInfo> vols = storage.getVolumes();
                        for (VolumeInfo vol : vols) {
                            if (isInteresting(vol)) {
                                niks.add(KEY_STORAGE_SETTINGS_VOLUME + vol.id);
                            }
                        }
                    }
                    return niks;
                }

                @Override
                protected boolean isPageSearchEnabled(Context context) {
                    return !isExternalExist(context);
                }

                private boolean isExternalExist(Context context) {
                    int internalCount = 0;
                    StorageManager storageManager = context.getSystemService(StorageManager.class);
                    final List<VolumeInfo> volumes = storageManager.getVolumes();
                    for (VolumeInfo vol : volumes) {
                        //External storage
                        if (vol.getType() == VolumeInfo.TYPE_PUBLIC
                                || vol.getType() == VolumeInfo.TYPE_STUB) {
                            return true;
                        } else if (vol.getType() == VolumeInfo.TYPE_PRIVATE) {
                            internalCount++;
                        }
                    }

                    // Unsupported disks
                    final List<DiskInfo> disks = storageManager.getDisks();
                    for (DiskInfo disk : disks) {
                        if (disk.volumeCount == 0 && disk.size > 0) {
                            return true;
                        }
                    }

                    // Missing private volumes
                    final List<VolumeRecord> recs = storageManager.getVolumeRecords();
                    for (VolumeRecord rec : recs) {
                        if (rec.getType() == VolumeInfo.TYPE_PRIVATE
                                && storageManager.findVolumeByUuid(rec.getFsUuid()) == null) {
                            internalCount++;
                        }
                    }

                    return (internalCount != 1);
                }
            };
}