/*
* Copyright 2014 Yaroslav Mytkalyk
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.docd.purefm.utils;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import com.docd.purefm.Environment;
import com.docd.purefm.R;
import com.docd.purefm.settings.Settings;
import org.apache.commons.io.FilenameUtils;
import android.support.annotation.NonNull;
public final class BookmarksHelper {
public static final class BookmarkItem {
Drawable mIcon;
CharSequence mDisplayName;
CharSequence mDisplayPath;
BookmarkItem() {
}
public Drawable getIcon() {
return mIcon;
}
public CharSequence getDisplayName() {
return mDisplayName;
}
public CharSequence getDisplayPath() {
return mDisplayPath;
}
}
@NonNull
public static BookmarkItem createUserBookmarkItem(
@NonNull final Activity activity,
@NonNull final String path) {
final BookmarkItem item = new BookmarkItem();
item.mDisplayName = FilenameUtils.getName(path);
if (item.mDisplayName.equals(Environment.sRootDirectory.getAbsolutePath())) {
item.mDisplayName = activity.getText(R.string.root);
}
item.mDisplayPath = path;
item.mIcon = ThemeUtils.getDrawableNonNull(activity.getTheme(), R.attr.ic_bookmark);
return item;
}
@NonNull
public static List<BookmarkItem> getAllBookmarks(@NonNull final Activity activity) {
final List<BookmarkItem> items = new ArrayList<>();
int internalCount = 0;
int externalCount = 0;
int usbCount = 0;
final Resources.Theme theme = activity.getTheme();
final Drawable iconStorage = ThemeUtils.getDrawableNonNull(theme, R.attr.ic_storage);
final Drawable iconSdcard = ThemeUtils.getDrawableNonNull(theme, R.attr.ic_sdcard);
final Drawable iconUsb = ThemeUtils.getDrawableNonNull(theme, R.attr.ic_usb);
final Drawable iconUser = ThemeUtils.getDrawableNonNull(theme, R.attr.ic_bookmark);
for (final StorageHelper.StorageVolume v : Environment.getStorageVolumes()) {
final BookmarkItem item = new BookmarkItem();
switch (v.getType()) {
case EXTERNAL:
externalCount++;
item.mIcon = iconSdcard;
item.mDisplayName = activity.getText(R.string.storage_sdcard);
if (externalCount > 1) {
item.mDisplayName = TextUtils.concat(item.mDisplayName, " (" + externalCount + ")");
}
break;
case USB:
usbCount++;
item.mIcon = iconUsb;
item.mDisplayName = activity.getText(R.string.storage_usb);
if (usbCount > 1) {
item.mDisplayName = TextUtils.concat(item.mDisplayName, " (" + usbCount + ")");
}
break;
case INTERNAL:
default:
internalCount++;
item.mIcon = iconStorage;
item.mDisplayName = activity.getText(R.string.storage_internal);
if (internalCount > 1) {
item.mDisplayName = TextUtils.concat(item.mDisplayName, " (" + internalCount + ")");
}
break;
}
item.mDisplayPath = v.file.getAbsolutePath();
items.add(item);
}
for (final String bookmark : Settings.getInstance(activity).getBookmarks()) {
final BookmarkItem item = new BookmarkItem();
item.mDisplayName = FilenameUtils.getName(bookmark);
if (item.mDisplayName.equals(Environment.sRootDirectory.getAbsolutePath())) {
item.mDisplayName = activity.getText(R.string.root);
}
item.mDisplayPath = bookmark;
item.mIcon = iconUser;
items.add(item);
}
return items;
}
/**
* Returns start of user bookmarks index in List returned by #getAllBookmarks(Activity)
*
* @return start of user bookmarks
*/
public static int getUserBookmarkOffset() {
return Environment.getStorageVolumes().size();
}
@NonNull
public static Set<String> getAllLocations(@NonNull final Context context) {
final Set<String> result = new TreeSet<>();
result.addAll(BookmarksHelper.getStorageBookmarks());
result.addAll(Settings.getInstance(context).getBookmarks());
return result;
}
@NonNull
private static Set<String> getStorageBookmarks() {
final LinkedHashSet<String> storages = new LinkedHashSet<>();
for (final StorageHelper.StorageVolume v : Environment.getStorageVolumes()) {
storages.add(v.file.getAbsolutePath());
}
return storages;
}
}