diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ScanMediaFolderChooserDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ScanMediaFolderChooserDialog.java deleted file mode 100644 index 09d5f7f9..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ScanMediaFolderChooserDialog.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.kabouzeid.gramophone.dialogs; - -import android.Manifest; -import android.app.Activity; -import android.app.Dialog; -import android.content.Context; -import android.content.pm.PackageManager; -import android.media.MediaScannerConnection; -import android.os.Build; -import android.os.Bundle; -import android.os.Environment; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.app.ActivityCompat; -import androidx.fragment.app.DialogFragment; -import android.view.View; -import android.widget.Toast; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.misc.UpdateToastMediaScannerCompletionListener; -import com.kabouzeid.gramophone.ui.fragments.mainactivity.folders.FoldersFragment; -import com.kabouzeid.gramophone.util.PreferenceUtil; - -import java.io.File; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -/** - * @author Aidan Follestad (afollestad), modified by Karim Abou Zeid - */ -public class ScanMediaFolderChooserDialog extends DialogFragment implements MaterialDialog.ListCallback { - - String initialPath = PreferenceUtil.getInstance(getContext()).getStartDirectory().getAbsolutePath(); - private File parentFolder; - private File[] parentContents; - private boolean canGoUp = false; - - public static ScanMediaFolderChooserDialog create() { - return new ScanMediaFolderChooserDialog(); - } - - private static void scanPaths(@NonNull WeakReference activityWeakReference, @NonNull Context applicationContext, @Nullable String[] toBeScanned) { - Activity activity = activityWeakReference.get(); - if (toBeScanned == null || toBeScanned.length < 1) { - Toast.makeText(applicationContext, R.string.nothing_to_scan, Toast.LENGTH_SHORT).show(); - } else { - MediaScannerConnection.scanFile(applicationContext, toBeScanned, null, activity != null ? new UpdateToastMediaScannerCompletionListener(activity, toBeScanned) : null); - } - } - - private String[] getContentsArray() { - if (parentContents == null) { - if (canGoUp) { - return new String[]{".."}; - } - return new String[]{}; - } - String[] results = new String[parentContents.length + (canGoUp ? 1 : 0)]; - if (canGoUp) { - results[0] = ".."; - } - for (int i = 0; i < parentContents.length; i++) { - results[canGoUp ? i + 1 : i] = parentContents[i].getName(); - } - return results; - } - - private File[] listFiles() { - File[] contents = parentFolder.listFiles(); - List results = new ArrayList<>(); - if (contents != null) { - for (File fi : contents) { - if (fi.isDirectory()) { - results.add(fi); - } - } - Collections.sort(results, new FolderSorter()); - return results.toArray(new File[results.size()]); - } - return null; - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M - && ActivityCompat.checkSelfPermission( - getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED) { - return new MaterialDialog.Builder(getActivity()) - .title(R.string.md_error_label) - .content(R.string.md_storage_perm_error) - .positiveText(android.R.string.ok) - .build(); - } - if (savedInstanceState == null) { - savedInstanceState = new Bundle(); - } - if (!savedInstanceState.containsKey("current_path")) { - savedInstanceState.putString("current_path", initialPath); - } - parentFolder = new File(savedInstanceState.getString("current_path", File.pathSeparator)); - checkIfCanGoUp(); - parentContents = listFiles(); - MaterialDialog.Builder builder = - new MaterialDialog.Builder(getActivity()) - .title(parentFolder.getAbsolutePath()) - .items((CharSequence[]) getContentsArray()) - .itemsCallback(this) - .autoDismiss(false) - .onPositive((dialog, which) -> { - final Context applicationContext = getActivity().getApplicationContext(); - final WeakReference activityWeakReference = new WeakReference<>(getActivity()); - dismiss(); - new FoldersFragment.ArrayListPathsAsyncTask(getActivity(), paths -> scanPaths(activityWeakReference, applicationContext, paths)).execute(new FoldersFragment.ArrayListPathsAsyncTask.LoadingInfo(parentFolder, FoldersFragment.AUDIO_FILE_FILTER)); - }) - .onNegative((materialDialog, dialogAction) -> dismiss()) - .positiveText(R.string.action_scan_directory) - .negativeText(android.R.string.cancel); - return builder.build(); - } - - @Override - public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence s) { - if (canGoUp && i == 0) { - parentFolder = parentFolder.getParentFile(); - if (parentFolder.getAbsolutePath().equals("/storage/emulated")) { - parentFolder = parentFolder.getParentFile(); - } - checkIfCanGoUp(); - } else { - parentFolder = parentContents[canGoUp ? i - 1 : i]; - canGoUp = true; - if (parentFolder.getAbsolutePath().equals("/storage/emulated")) { - parentFolder = Environment.getExternalStorageDirectory(); - } - } - reload(); - } - - private void checkIfCanGoUp() { - canGoUp = parentFolder.getParent() != null; - } - - private void reload() { - parentContents = listFiles(); - MaterialDialog dialog = (MaterialDialog) getDialog(); - dialog.setTitle(parentFolder.getAbsolutePath()); - dialog.setItems((CharSequence[]) getContentsArray()); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString("current_path", parentFolder.getAbsolutePath()); - } - - private static class FolderSorter implements Comparator { - - @Override - public int compare(File lhs, File rhs) { - return lhs.getName().compareTo(rhs.getName()); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/misc/UpdateToastMediaScannerCompletionListener.java b/app/src/main/java/com/kabouzeid/gramophone/misc/UpdateToastMediaScannerCompletionListener.java deleted file mode 100644 index 62204d6d..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/misc/UpdateToastMediaScannerCompletionListener.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.kabouzeid.gramophone.misc; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.media.MediaScannerConnection; -import android.net.Uri; -import android.widget.Toast; - -import com.kabouzeid.gramophone.R; - -import java.lang.ref.WeakReference; - -/** - * @author Karim Abou Zeid (kabouzeid) - */ -public class UpdateToastMediaScannerCompletionListener implements MediaScannerConnection.OnScanCompletedListener { - private int scanned = 0; - private int failed = 0; - - private final String[] toBeScanned; - - private final String scannedFiles; - private final String couldNotScanFiles; - - private Toast toast; - private final WeakReference activityWeakReference; - - @SuppressLint("ShowToast") - public UpdateToastMediaScannerCompletionListener(Activity activity, String[] toBeScanned) { - this.toBeScanned = toBeScanned; - scannedFiles = activity.getString(R.string.scanned_files); - couldNotScanFiles = activity.getString(R.string.could_not_scan_files); - toast = Toast.makeText(activity.getApplicationContext(), "", Toast.LENGTH_SHORT); - activityWeakReference = new WeakReference<>(activity); - } - - @Override - public void onScanCompleted(final String path, final Uri uri) { - Activity activity = activityWeakReference.get(); - if (activity != null) { - activity.runOnUiThread(() -> { - if (uri == null) { - failed++; - } else { - scanned++; - } - String text = " " + String.format(scannedFiles, scanned, toBeScanned.length) + (failed > 0 ? " " + String.format(couldNotScanFiles, failed) : ""); - toast.setText(text); - toast.show(); - }); - } - } -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index 037de988..34c1f49e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -18,7 +18,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import com.bumptech.glide.Glide; @@ -27,7 +26,6 @@ import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.appthemehelper.util.NavigationViewUtil; import com.kabouzeid.gramophone.App; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.dialogs.ScanMediaFolderChooserDialog; import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.SearchQueryHelper; @@ -37,10 +35,8 @@ import com.kabouzeid.gramophone.loader.PlaylistSongLoader; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; -import com.kabouzeid.gramophone.ui.fragments.mainactivity.folders.FoldersFragment; import com.kabouzeid.gramophone.ui.fragments.mainactivity.library.LibraryFragment; import com.kabouzeid.gramophone.util.MusicUtil; -import com.kabouzeid.gramophone.util.PreferenceUtil; import com.sothree.slidinguppanel.SlidingUpPanelLayout; @@ -51,12 +47,8 @@ import butterknife.BindView; import butterknife.ButterKnife; public class MainActivity extends AbsSlidingMusicPanelActivity { - public static final String TAG = MainActivity.class.getSimpleName(); - private static final int LIBRARY = 0; - private static final int FOLDERS = 1; - @BindView(R.id.navigation_view) NavigationView navigationView; @BindView(R.id.drawer_layout) @@ -81,31 +73,12 @@ public class MainActivity extends AbsSlidingMusicPanelActivity { setUpDrawerLayout(); if (savedInstanceState == null) { - setMusicChooser(PreferenceUtil.getInstance(this).getLastMusicChooser()); + setCurrentFragment(LibraryFragment.newInstance()); } else { restoreCurrentFragment(); } } - private void setMusicChooser(int key) { - if (!App.isProVersion() && key == FOLDERS) { - Toast.makeText(this, R.string.folder_view_is_a_pro_feature, Toast.LENGTH_LONG).show(); - key = LIBRARY; - } - - PreferenceUtil.getInstance(this).setLastMusicChooser(key); - switch (key) { - case LIBRARY: - navigationView.setCheckedItem(R.id.nav_library); - setCurrentFragment(LibraryFragment.newInstance()); - break; - case FOLDERS: - navigationView.setCheckedItem(R.id.nav_folders); - setCurrentFragment(FoldersFragment.newInstance(this)); - break; - } - } - private void setCurrentFragment(@SuppressWarnings("NullableProblems") Fragment fragment) { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, null).commit(); currentFragment = (MainActivityFragmentCallbacks) fragment; @@ -134,20 +107,12 @@ public class MainActivity extends AbsSlidingMusicPanelActivity { drawerLayout.closeDrawers(); switch (menuItem.getItemId()) { case R.id.nav_library: - new Handler().postDelayed(() -> setMusicChooser(LIBRARY), 200); - break; - case R.id.nav_folders: - new Handler().postDelayed(() -> setMusicChooser(FOLDERS), 200); + navigationView.setCheckedItem(R.id.nav_library); + setCurrentFragment(LibraryFragment.newInstance()); break; case R.id.buy_pro: new Handler().postDelayed(() -> startActivity(new Intent(MainActivity.this, PurchaseActivity.class)), 200); break; - case R.id.action_scan: - new Handler().postDelayed(() -> { - ScanMediaFolderChooserDialog dialog = ScanMediaFolderChooserDialog.create(); - dialog.show(getSupportFragmentManager(), "SCAN_MEDIA_FOLDER_CHOOSER"); - }, 200); - break; case R.id.nav_settings: new Handler().postDelayed(() -> startActivity(new Intent(MainActivity.this, SettingsActivity.class)), 200); break; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SplashActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SplashActivity.java index e627d047..d317eb0c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SplashActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SplashActivity.java @@ -50,7 +50,7 @@ public class SplashActivity extends AbsBaseActivity { connectionManager.Connect(credentialProvider.GetCredentials().getServers().get(0), new Response() { @Override public void onResponse(ConnectionResult result) { - if (result.getState() != ConnectionState.SignedIn) return; + //if (result.getState() != ConnectionState.SignedIn) return; App.setApiClient(result.getApiClient()); context.startActivity(new Intent(context, MainActivity.class)); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/folders/FoldersFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/folders/FoldersFragment.java deleted file mode 100644 index 5584f389..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/folders/FoldersFragment.java +++ /dev/null @@ -1,691 +0,0 @@ -package com.kabouzeid.gramophone.ui.fragments.mainactivity.folders; - - -import android.app.Dialog; -import android.content.Context; -import android.media.MediaScannerConnection; -import android.os.Bundle; -import android.os.Environment; -import android.text.Html; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.MimeTypeMap; -import android.widget.PopupMenu; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.Toolbar; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.loader.app.LoaderManager; -import androidx.loader.content.Loader; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.afollestad.materialcab.MaterialCab; -import com.afollestad.materialdialogs.MaterialDialog; -import com.google.android.material.appbar.AppBarLayout; -import com.google.android.material.snackbar.Snackbar; -import com.kabouzeid.appthemehelper.ThemeStore; -import com.kabouzeid.appthemehelper.common.ATHToolbarActivity; -import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper; -import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.SongFileAdapter; -import com.kabouzeid.gramophone.helper.MusicPlayerRemote; -import com.kabouzeid.gramophone.helper.menu.SongMenuHelper; -import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper; -import com.kabouzeid.gramophone.interfaces.CabHolder; -import com.kabouzeid.gramophone.interfaces.LoaderIds; -import com.kabouzeid.gramophone.misc.DialogAsyncTask; -import com.kabouzeid.gramophone.misc.UpdateToastMediaScannerCompletionListener; -import com.kabouzeid.gramophone.misc.WrappedAsyncTaskLoader; -import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.ui.activities.MainActivity; -import com.kabouzeid.gramophone.ui.fragments.mainactivity.AbsMainActivityFragment; -import com.kabouzeid.gramophone.util.FileUtil; -import com.kabouzeid.gramophone.util.PhonographColorUtil; -import com.kabouzeid.gramophone.util.PreferenceUtil; -import com.kabouzeid.gramophone.util.ViewUtil; -import com.kabouzeid.gramophone.views.BreadCrumbLayout; -import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; - -import java.io.File; -import java.io.FileFilter; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.Unbinder; - -public class FoldersFragment extends AbsMainActivityFragment implements MainActivity.MainActivityFragmentCallbacks, CabHolder, BreadCrumbLayout.SelectionCallback, SongFileAdapter.Callbacks, AppBarLayout.OnOffsetChangedListener, LoaderManager.LoaderCallbacks> { - - private static final int LOADER_ID = LoaderIds.FOLDERS_FRAGMENT; - - protected static final String PATH = "path"; - protected static final String CRUMBS = "crumbs"; - - private Unbinder unbinder; - - @BindView(R.id.coordinator_layout) - CoordinatorLayout coordinatorLayout; - @BindView(R.id.container) - View container; - @BindView(android.R.id.empty) - View empty; - @BindView(R.id.toolbar) - Toolbar toolbar; - @BindView(R.id.bread_crumbs) - BreadCrumbLayout breadCrumbs; - @BindView(R.id.appbar) - AppBarLayout appbar; - @BindView(R.id.recycler_view) - FastScrollRecyclerView recyclerView; - - private SongFileAdapter adapter; - private MaterialCab cab; - - public FoldersFragment() { - } - - public static FoldersFragment newInstance(Context context) { - return newInstance(PreferenceUtil.getInstance(context).getStartDirectory()); - } - - public static FoldersFragment newInstance(File directory) { - FoldersFragment frag = new FoldersFragment(); - Bundle b = new Bundle(); - b.putSerializable(PATH, directory); - frag.setArguments(b); - return frag; - } - - public void setCrumb(BreadCrumbLayout.Crumb crumb, boolean addToHistory) { - if (crumb == null) return; - saveScrollPosition(); - breadCrumbs.setActiveOrAdd(crumb, false); - if (addToHistory) { - breadCrumbs.addHistory(crumb); - } - getLoaderManager().restartLoader(LOADER_ID, null, this); - } - - private void saveScrollPosition() { - BreadCrumbLayout.Crumb crumb = getActiveCrumb(); - if (crumb != null) { - crumb.setScrollPosition(((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition()); - } - } - - @Nullable - private BreadCrumbLayout.Crumb getActiveCrumb() { - return breadCrumbs != null && breadCrumbs.size() > 0 ? breadCrumbs.getCrumb(breadCrumbs.getActiveIndex()) : null; - } - - @Override - public void onSaveInstanceState(@NonNull Bundle outState) { - super.onSaveInstanceState(outState); - outState.putParcelable(CRUMBS, breadCrumbs.getStateWrapper()); - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - if (savedInstanceState == null) { - setCrumb(new BreadCrumbLayout.Crumb(FileUtil.safeGetCanonicalFile((File) getArguments().getSerializable(PATH))), true); - } else { - breadCrumbs.restoreFromStateWrapper(savedInstanceState.getParcelable(CRUMBS)); - getLoaderManager().initLoader(LOADER_ID, null, this); - } - } - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_folder, container, false); - unbinder = ButterKnife.bind(this, view); - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - getMainActivity().setStatusbarColorAuto(); - getMainActivity().setNavigationbarColorAuto(); - getMainActivity().setTaskDescriptionColorAuto(); - - setUpAppbarColor(); - setUpToolbar(); - setUpBreadCrumbs(); - setUpRecyclerView(); - setUpAdapter(); - } - - private void setUpAppbarColor() { - int primaryColor = ThemeStore.primaryColor(getActivity()); - appbar.setBackgroundColor(primaryColor); - toolbar.setBackgroundColor(primaryColor); - breadCrumbs.setBackgroundColor(primaryColor); - breadCrumbs.setActivatedContentColor(ToolbarContentTintHelper.toolbarTitleColor(getActivity(), primaryColor)); - breadCrumbs.setDeactivatedContentColor(ToolbarContentTintHelper.toolbarSubtitleColor(getActivity(), primaryColor)); - } - - private void setUpToolbar() { - toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); - getActivity().setTitle(R.string.app_name); - getMainActivity().setSupportActionBar(toolbar); - } - - private void setUpBreadCrumbs() { - breadCrumbs.setCallback(this); - } - - private void setUpRecyclerView() { - ViewUtil.setUpFastScrollRecyclerViewColor(getActivity(), recyclerView, ThemeStore.accentColor(getActivity())); - - recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - - appbar.addOnOffsetChangedListener(this); - } - - private void setUpAdapter() { - adapter = new SongFileAdapter(getMainActivity(), new LinkedList<>(), R.layout.item_list, this, this); - adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { - @Override - public void onChanged() { - super.onChanged(); - checkIsEmpty(); - } - }); - recyclerView.setAdapter(adapter); - checkIsEmpty(); - } - - @Override - public void onPause() { - super.onPause(); - saveScrollPosition(); - } - - @Override - public void onDestroyView() { - appbar.removeOnOffsetChangedListener(this); - unbinder.unbind(); - super.onDestroyView(); - } - - @Override - public boolean handleBackPress() { - if (cab != null && cab.isActive()) { - cab.finish(); - return true; - } - if (breadCrumbs.popHistory()) { - setCrumb(breadCrumbs.lastHistory(), false); - return true; - } - return false; - } - - @NonNull - @Override - public MaterialCab openCab(int menuRes, MaterialCab.Callback callback) { - if (cab != null && cab.isActive()) cab.finish(); - cab = new MaterialCab(getMainActivity(), R.id.cab_stub) - .setMenu(menuRes) - .setCloseDrawableRes(R.drawable.ic_close_white_24dp) - .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(getActivity()))) - .start(callback); - return cab; - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.menu_folders, menu); - ToolbarContentTintHelper.handleOnCreateOptionsMenu(getActivity(), toolbar, menu, ATHToolbarActivity.getToolbarBackgroundColor(toolbar)); - } - - @Override - public void onPrepareOptionsMenu(Menu menu) { - super.onPrepareOptionsMenu(menu); - ToolbarContentTintHelper.handleOnPrepareOptionsMenu(getActivity(), toolbar); - } - - public static final FileFilter AUDIO_FILE_FILTER = file -> !file.isHidden() && (file.isDirectory() || - FileUtil.fileIsMimeType(file, "audio/*", MimeTypeMap.getSingleton()) || - FileUtil.fileIsMimeType(file, "application/ogg", MimeTypeMap.getSingleton())); - - @Override - public void onCrumbSelection(BreadCrumbLayout.Crumb crumb, int index) { - setCrumb(crumb, true); - } - - public static File getDefaultStartDirectory() { - File musicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC); - File startFolder; - if (musicDir.exists() && musicDir.isDirectory()) { - startFolder = musicDir; - } else { - File externalStorage = Environment.getExternalStorageDirectory(); - if (externalStorage.exists() && externalStorage.isDirectory()) { - startFolder = externalStorage; - } else { - startFolder = new File("/"); // root - } - } - return startFolder; - } - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.action_go_to_start_directory: - setCrumb(new BreadCrumbLayout.Crumb(FileUtil.safeGetCanonicalFile(PreferenceUtil.getInstance(getActivity()).getStartDirectory())), true); - return true; - case R.id.action_scan: - BreadCrumbLayout.Crumb crumb = getActiveCrumb(); - if (crumb != null) { - new ArrayListPathsAsyncTask(getActivity(), this::scanPaths).execute(new ArrayListPathsAsyncTask.LoadingInfo(crumb.getFile(), AUDIO_FILE_FILTER)); - } - return true; - } - return super.onOptionsItemSelected(item); - } - - @Override - public void onFileSelected(File file) { - final File canonicalFile = FileUtil.safeGetCanonicalFile(file); // important as we compare the path value later - if (canonicalFile.isDirectory()) { - setCrumb(new BreadCrumbLayout.Crumb(canonicalFile), true); - } else { - FileFilter fileFilter = pathname -> !pathname.isDirectory() && AUDIO_FILE_FILTER.accept(pathname); - new ListSongsAsyncTask(getActivity(), null, (songs, extra) -> { - int startIndex = -1; - for (int i = 0; i < songs.size(); i++) { - if (canonicalFile.getPath().equals(songs.get(i).data)) { - startIndex = i; - break; - } - } - if (startIndex > -1) { - MusicPlayerRemote.openQueue(songs, startIndex, true); - } else { - Snackbar.make(coordinatorLayout, Html.fromHtml(String.format(getString(R.string.not_listed_in_media_store), canonicalFile.getName())), Snackbar.LENGTH_LONG) - .setAction(R.string.action_scan, v -> scanPaths(new String[]{canonicalFile.getPath()})) - .setActionTextColor(ThemeStore.accentColor(getActivity())) - .show(); - } - }).execute(new ListSongsAsyncTask.LoadingInfo(toList(canonicalFile.getParentFile()), fileFilter, getFileComparator())); - } - } - - @Override - public void onMultipleItemAction(MenuItem item, List files) { - final int itemId = item.getItemId(); - new ListSongsAsyncTask(getActivity(), null, (songs, extra) -> { - if (!songs.isEmpty()) { - SongsMenuHelper.handleMenuClick(getActivity(), songs, itemId); - } - if (songs.size() != files.size()) { - Snackbar.make(coordinatorLayout, R.string.some_files_are_not_listed_in_the_media_store, Snackbar.LENGTH_LONG) - .setAction(R.string.action_scan, v -> { - String[] paths = new String[files.size()]; - for (int i = 0; i < files.size(); i++) { - paths[i] = FileUtil.safeGetCanonicalPath(files.get(i)); - } - scanPaths(paths); - }) - .setActionTextColor(ThemeStore.accentColor(getActivity())) - .show(); - } - }).execute(new ListSongsAsyncTask.LoadingInfo(files, AUDIO_FILE_FILTER, getFileComparator())); - } - - private List toList(File file) { - List files = new ArrayList<>(1); - files.add(file); - return files; - } - - Comparator fileComparator = (lhs, rhs) -> { - if (lhs.isDirectory() && !rhs.isDirectory()) { - return -1; - } else if (!lhs.isDirectory() && rhs.isDirectory()) { - return 1; - } else { - return lhs.getName().compareToIgnoreCase - (rhs.getName()); - } - }; - - private Comparator getFileComparator() { - return fileComparator; - } - - @Override - public void onFileMenuClicked(final File file, View view) { - PopupMenu popupMenu = new PopupMenu(getActivity(), view); - if (file.isDirectory()) { - popupMenu.inflate(R.menu.menu_item_directory); - popupMenu.setOnMenuItemClickListener(item -> { - final int itemId = item.getItemId(); - switch (itemId) { - case R.id.action_play_next: - case R.id.action_add_to_current_playing: - case R.id.action_add_to_playlist: - case R.id.action_delete_from_device: - new ListSongsAsyncTask(getActivity(), null, (songs, extra) -> { - if (!songs.isEmpty()) { - SongsMenuHelper.handleMenuClick(getActivity(), songs, itemId); - } - }).execute(new ListSongsAsyncTask.LoadingInfo(toList(file), AUDIO_FILE_FILTER, getFileComparator())); - return true; - case R.id.action_set_as_start_directory: - PreferenceUtil.getInstance(getActivity()).setStartDirectory(file); - Toast.makeText(getActivity(), String.format(getString(R.string.new_start_directory), file.getPath()), Toast.LENGTH_SHORT).show(); - return true; - case R.id.action_scan: - new ArrayListPathsAsyncTask(getActivity(), this::scanPaths).execute(new ArrayListPathsAsyncTask.LoadingInfo(file, AUDIO_FILE_FILTER)); - return true; - } - return false; - }); - } else { - popupMenu.inflate(R.menu.menu_item_file); - popupMenu.setOnMenuItemClickListener(item -> { - final int itemId = item.getItemId(); - switch (itemId) { - case R.id.action_play_next: - case R.id.action_add_to_current_playing: - case R.id.action_add_to_playlist: - case R.id.action_go_to_album: - case R.id.action_go_to_artist: - case R.id.action_share: - case R.id.action_details: - case R.id.action_set_as_ringtone: - case R.id.action_delete_from_device: - new ListSongsAsyncTask(getActivity(), null, (songs, extra) -> { - if (!songs.isEmpty()) { - SongMenuHelper.handleMenuClick(getActivity(), songs.get(0), itemId); - } else { - Snackbar.make(coordinatorLayout, Html.fromHtml(String.format(getString(R.string.not_listed_in_media_store), file.getName())), Snackbar.LENGTH_LONG) - .setAction(R.string.action_scan, v -> scanPaths(new String[]{FileUtil.safeGetCanonicalPath(file)})) - .setActionTextColor(ThemeStore.accentColor(getActivity())) - .show(); - } - }).execute(new ListSongsAsyncTask.LoadingInfo(toList(file), AUDIO_FILE_FILTER, getFileComparator())); - return true; - case R.id.action_scan: - scanPaths(new String[]{FileUtil.safeGetCanonicalPath(file)}); - return true; - } - return false; - }); - } - popupMenu.show(); - } - - @Override - public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { - container.setPadding(container.getPaddingLeft(), container.getPaddingTop(), container.getPaddingRight(), appbar.getTotalScrollRange() + verticalOffset); - } - - private void checkIsEmpty() { - if (empty != null) { - empty.setVisibility(adapter == null || adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); - } - } - - private void scanPaths(@Nullable String[] toBeScanned) { - if (getActivity() == null) return; - if (toBeScanned == null || toBeScanned.length < 1) { - Toast.makeText(getActivity(), R.string.nothing_to_scan, Toast.LENGTH_SHORT).show(); - } else { - MediaScannerConnection.scanFile(getActivity().getApplicationContext(), toBeScanned, null, new UpdateToastMediaScannerCompletionListener(getActivity(), toBeScanned)); - } - } - - private void updateAdapter(@NonNull List files) { - adapter.swapDataSet(files); - BreadCrumbLayout.Crumb crumb = getActiveCrumb(); - if (crumb != null && recyclerView != null) { - ((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(crumb.getScrollPosition(), 0); - } - } - - @Override - public Loader> onCreateLoader(int id, Bundle args) { - return new AsyncFileLoader(this); - } - - @Override - public void onLoadFinished(@NonNull Loader> loader, List data) { - updateAdapter(data); - } - - @Override - public void onLoaderReset(@NonNull Loader> loader) { - updateAdapter(new LinkedList<>()); - } - - private static class AsyncFileLoader extends WrappedAsyncTaskLoader> { - private WeakReference fragmentWeakReference; - - public AsyncFileLoader(FoldersFragment foldersFragment) { - super(foldersFragment.getActivity()); - fragmentWeakReference = new WeakReference<>(foldersFragment); - } - - @Override - public List loadInBackground() { - FoldersFragment foldersFragment = fragmentWeakReference.get(); - File directory = null; - if (foldersFragment != null) { - BreadCrumbLayout.Crumb crumb = foldersFragment.getActiveCrumb(); - if (crumb != null) { - directory = crumb.getFile(); - } - } - if (directory != null) { - List files = FileUtil.listFiles(directory, AUDIO_FILE_FILTER); - Collections.sort(files, foldersFragment.getFileComparator()); - return files; - } else { - return new LinkedList<>(); - } - } - } - - private static class ListSongsAsyncTask extends ListingFilesDialogAsyncTask> { - private WeakReference contextWeakReference; - private WeakReference callbackWeakReference; - private final Object extra; - - public ListSongsAsyncTask(Context context, Object extra, OnSongsListedCallback callback) { - super(context, 500); - this.extra = extra; - contextWeakReference = new WeakReference<>(context); - callbackWeakReference = new WeakReference<>(callback); - } - - @Override - protected void onPreExecute() { - super.onPreExecute(); - checkCallbackReference(); - checkContextReference(); - } - - @Override - protected List doInBackground(LoadingInfo... params) { - try { - LoadingInfo info = params[0]; - List files = FileUtil.listFilesDeep(info.files, info.fileFilter); - - if (isCancelled() || checkContextReference() == null || checkCallbackReference() == null) - return null; - - Collections.sort(files, info.fileComparator); - - Context context = checkContextReference(); - if (isCancelled() || context == null || checkCallbackReference() == null) - return null; - - return FileUtil.matchFilesWithMediaStore(context, files); - } catch (Exception e) { - e.printStackTrace(); - cancel(false); - return null; - } - } - - @Override - protected void onPostExecute(List songs) { - super.onPostExecute(songs); - OnSongsListedCallback callback = checkCallbackReference(); - if (songs != null && callback != null) - callback.onSongsListed(songs, extra); - } - - private Context checkContextReference() { - Context context = contextWeakReference.get(); - if (context == null) { - cancel(false); - } - return context; - } - - private OnSongsListedCallback checkCallbackReference() { - OnSongsListedCallback callback = callbackWeakReference.get(); - if (callback == null) { - cancel(false); - } - return callback; - } - - public static class LoadingInfo { - public final Comparator fileComparator; - public final FileFilter fileFilter; - public final List files; - - public LoadingInfo(@NonNull List files, @NonNull FileFilter fileFilter, @NonNull Comparator fileComparator) { - this.fileComparator = fileComparator; - this.fileFilter = fileFilter; - this.files = files; - } - } - - public interface OnSongsListedCallback { - void onSongsListed(@NonNull List songs, Object extra); - } - } - - public static class ArrayListPathsAsyncTask extends ListingFilesDialogAsyncTask { - private WeakReference onPathsListedCallbackWeakReference; - - public ArrayListPathsAsyncTask(Context context, OnPathsListedCallback callback) { - super(context, 500); - onPathsListedCallbackWeakReference = new WeakReference<>(callback); - } - - @Override - protected void onPreExecute() { - super.onPreExecute(); - checkCallbackReference(); - } - - @Override - protected String[] doInBackground(LoadingInfo... params) { - try { - if (isCancelled() || checkCallbackReference() == null) return null; - - LoadingInfo info = params[0]; - - final String[] paths; - - if (info.file.isDirectory()) { - List files = FileUtil.listFilesDeep(info.file, info.fileFilter); - - if (isCancelled() || checkCallbackReference() == null) return null; - - paths = new String[files.size()]; - for (int i = 0; i < files.size(); i++) { - File f = files.get(i); - paths[i] = FileUtil.safeGetCanonicalPath(f); - - if (isCancelled() || checkCallbackReference() == null) return null; - } - } else { - paths = new String[1]; - paths[0] = FileUtil.safeGetCanonicalPath(info.file); - } - - return paths; - } catch (Exception e) { - e.printStackTrace(); - cancel(false); - return null; - } - } - - @Override - protected void onPostExecute(String[] paths) { - super.onPostExecute(paths); - OnPathsListedCallback callback = checkCallbackReference(); - if (callback != null && paths != null) { - callback.onPathsListed(paths); - } - } - - private OnPathsListedCallback checkCallbackReference() { - OnPathsListedCallback callback = onPathsListedCallbackWeakReference.get(); - if (callback == null) { - cancel(false); - } - return callback; - } - - public static class LoadingInfo { - public final File file; - public final FileFilter fileFilter; - - public LoadingInfo(File file, FileFilter fileFilter) { - this.file = file; - this.fileFilter = fileFilter; - } - } - - public interface OnPathsListedCallback { - void onPathsListed(@NonNull String[] paths); - } - } - - private static abstract class ListingFilesDialogAsyncTask extends DialogAsyncTask { - public ListingFilesDialogAsyncTask(Context context) { - super(context); - } - - public ListingFilesDialogAsyncTask(Context context, int showDelay) { - super(context, showDelay); - } - - @Override - protected Dialog createDialog(@NonNull Context context) { - return new MaterialDialog.Builder(context) - .title(R.string.listing_files) - .progress(true, 0) - .progressIndeterminateStyle(true) - .cancelListener(dialog -> cancel(false)) - .dismissListener(dialog -> cancel(false)) - .negativeText(android.R.string.cancel) - .onNegative((dialog, which) -> cancel(false)) - .show(); - } - } -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java index 26265162..801f2fcd 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java @@ -16,7 +16,6 @@ import com.google.gson.reflect.TypeToken; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.helper.SortOrder; import com.kabouzeid.gramophone.model.CategoryInfo; -import com.kabouzeid.gramophone.ui.fragments.mainactivity.folders.FoldersFragment; import com.kabouzeid.gramophone.ui.fragments.player.NowPlayingScreen; import java.io.File; @@ -28,7 +27,6 @@ public final class PreferenceUtil { public static final String GENERAL_THEME = "general_theme"; public static final String REMEMBER_LAST_TAB = "remember_last_tab"; public static final String LAST_PAGE = "last_start_page"; - public static final String LAST_MUSIC_CHOOSER = "last_music_chooser"; public static final String NOW_PLAYING_SCREEN_ID = "now_playing_screen_id"; public static final String ARTIST_SORT_ORDER = "artist_sort_order"; @@ -76,8 +74,6 @@ public final class PreferenceUtil { public static final String AUTO_DOWNLOAD_IMAGES_POLICY = "auto_download_images_policy"; - public static final String START_DIRECTORY = "start_directory"; - public static final String SYNCHRONIZED_LYRICS_SHOW = "synchronized_lyrics_show"; public static final String INITIALIZED_BLACKLIST = "initialized_blacklist"; @@ -161,16 +157,6 @@ public final class PreferenceUtil { return mPreferences.getInt(LAST_PAGE, 0); } - public void setLastMusicChooser(final int value) { - final SharedPreferences.Editor editor = mPreferences.edit(); - editor.putInt(LAST_MUSIC_CHOOSER, value); - editor.apply(); - } - - public final int getLastMusicChooser() { - return mPreferences.getInt(LAST_MUSIC_CHOOSER, 0); - } - public final NowPlayingScreen getNowPlayingScreen() { int id = mPreferences.getInt(NOW_PLAYING_SCREEN_ID, 0); for (NowPlayingScreen nowPlayingScreen : NowPlayingScreen.values()) { @@ -454,16 +440,6 @@ public final class PreferenceUtil { return mPreferences.getString(AUTO_DOWNLOAD_IMAGES_POLICY, "only_wifi"); } - public final File getStartDirectory() { - return new File(mPreferences.getString(START_DIRECTORY, FoldersFragment.getDefaultStartDirectory().getPath())); - } - - public void setStartDirectory(File file) { - final SharedPreferences.Editor editor = mPreferences.edit(); - editor.putString(START_DIRECTORY, FileUtil.safeGetCanonicalPath(file)); - editor.apply(); - } - public final boolean synchronizedLyricsShow() { return mPreferences.getBoolean(SYNCHRONIZED_LYRICS_SHOW, true); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/views/BreadCrumbLayout.java b/app/src/main/java/com/kabouzeid/gramophone/views/BreadCrumbLayout.java deleted file mode 100644 index 15507660..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/views/BreadCrumbLayout.java +++ /dev/null @@ -1,416 +0,0 @@ -package com.kabouzeid.gramophone.views; - -import android.content.Context; -import android.graphics.PorterDuff; -import android.os.Build; -import android.os.Parcel; -import android.os.Parcelable; -import androidx.annotation.ColorInt; -import androidx.annotation.NonNull; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.HorizontalScrollView; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.kabouzeid.appthemehelper.ThemeStore; -import com.kabouzeid.gramophone.R; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -/** - * @author Aidan Follestad (afollestad), modified for Phonograph by Karim Abou Zeid (kabouzeid) - */ -public class BreadCrumbLayout extends HorizontalScrollView implements View.OnClickListener { - - @ColorInt - private int contentColorActivated; - @ColorInt - private int contentColorDeactivated; - - public static class Crumb implements Parcelable { - - public Crumb(File file) { - this.file = file; - } - - private final File file; - private int scrollPos; - - public int getScrollPosition() { - return scrollPos; - } - - public void setScrollPosition(int scrollY) { - this.scrollPos = scrollY; - } - - public String getTitle() { - return file.getPath().equals("/") ? "root" : file.getName(); - } - - public File getFile() { - return file; - } - - @Override - public boolean equals(Object o) { - return (o instanceof Crumb) && ((Crumb) o).getFile() != null && - ((Crumb) o).getFile().equals(getFile()); - } - - @Override - public String toString() { - return "Crumb{" + - "file=" + file + - ", scrollPos=" + scrollPos + - '}'; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeSerializable(this.file); - dest.writeInt(this.scrollPos); - } - - protected Crumb(Parcel in) { - this.file = (File) in.readSerializable(); - this.scrollPos = in.readInt(); - } - - public static final Creator CREATOR = new Creator() { - @Override - public Crumb createFromParcel(Parcel source) { - return new Crumb(source); - } - - @Override - public Crumb[] newArray(int size) { - return new Crumb[size]; - } - }; - } - - public interface SelectionCallback { - void onCrumbSelection(Crumb crumb, int index); - } - - public BreadCrumbLayout(Context context) { - super(context); - init(); - } - - public BreadCrumbLayout(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public BreadCrumbLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - // Stores currently visible crumbs - private List mCrumbs; - // Used in setActiveOrAdd() between clearing crumbs and adding the new set, nullified afterwards - private List mOldCrumbs; - // Stores user's navigation history, like a fragment back stack - private List mHistory; - - private LinearLayout mChildFrame; - private int mActive; - private SelectionCallback mCallback; - - private void init() { - contentColorActivated = ThemeStore.textColorPrimary(getContext()); - contentColorDeactivated = ThemeStore.textColorSecondary(getContext()); - setMinimumHeight((int) getResources().getDimension(R.dimen.tab_height)); - setClipToPadding(false); - setHorizontalScrollBarEnabled(false); - mCrumbs = new ArrayList<>(); - mHistory = new ArrayList<>(); - mChildFrame = new LinearLayout(getContext()); - addView(mChildFrame, new ViewGroup.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT)); - } - - public void addHistory(Crumb crumb) { - mHistory.add(crumb); - } - - public Crumb lastHistory() { - if (mHistory.size() == 0) return null; - return mHistory.get(mHistory.size() - 1); - } - - public boolean popHistory() { - if (mHistory.size() == 0) return false; - mHistory.remove(mHistory.size() - 1); - return mHistory.size() != 0; - } - - public int historySize() { - return mHistory.size(); - } - - public void clearHistory() { - mHistory.clear(); - } - - public void reverseHistory() { - Collections.reverse(mHistory); - } - - public void addCrumb(@NonNull Crumb crumb, boolean refreshLayout) { - LinearLayout view = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.bread_crumb, this, false); - view.setTag(mCrumbs.size()); - view.setOnClickListener(this); - - ImageView iv = (ImageView) view.getChildAt(1); - if (Build.VERSION.SDK_INT >= 19 && iv.getDrawable() != null) { - iv.getDrawable().setAutoMirrored(true); - } - iv.setVisibility(View.GONE); - - mChildFrame.addView(view, new ViewGroup.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - mCrumbs.add(crumb); - if (refreshLayout) { - mActive = mCrumbs.size() - 1; - requestLayout(); - } - invalidateActivatedAll(); - } - - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - super.onLayout(changed, l, t, r, b); - //RTL works fine like this - View child = mChildFrame.getChildAt(mActive); - if (child != null) - smoothScrollTo(child.getLeft(), 0); - } - - public Crumb findCrumb(@NonNull File forDir) { - for (int i = 0; i < mCrumbs.size(); i++) { - if (mCrumbs.get(i).getFile().equals(forDir)) - return mCrumbs.get(i); - } - return null; - } - - public void clearCrumbs() { - try { - mOldCrumbs = new ArrayList<>(mCrumbs); - mCrumbs.clear(); - mChildFrame.removeAllViews(); - } catch (IllegalStateException e) { - e.printStackTrace(); - } - } - - public Crumb getCrumb(int index) { - return mCrumbs.get(index); - } - - public void setCallback(SelectionCallback callback) { - mCallback = callback; - } - - private boolean setActive(Crumb newActive) { - mActive = mCrumbs.indexOf(newActive); - invalidateActivatedAll(); - boolean success = mActive > -1; - if (success) - requestLayout(); - return success; - } - - void invalidateActivatedAll() { - for (int i = 0; i < mCrumbs.size(); i++) { - Crumb crumb = mCrumbs.get(i); - invalidateActivated(mChildFrame.getChildAt(i), mActive == mCrumbs.indexOf(crumb), false, i < mCrumbs.size() - 1).setText(crumb.getTitle()); - } - } - - void removeCrumbAt(int index) { - mCrumbs.remove(index); - mChildFrame.removeViewAt(index); - } - - public boolean trim(String path, boolean dir) { - if (!dir) return false; - int index = -1; - for (int i = mCrumbs.size() - 1; i >= 0; i--) { - File fi = mCrumbs.get(i).getFile(); - if (fi.getPath().equals(path)) { - index = i; - break; - } - } - - boolean removedActive = index >= mActive; - if (index > -1) { - while (index <= mCrumbs.size() - 1) - removeCrumbAt(index); - if (mChildFrame.getChildCount() > 0) { - int lastIndex = mCrumbs.size() - 1; - invalidateActivated(mChildFrame.getChildAt(lastIndex), mActive == lastIndex, false, false); - } - } - return removedActive || mCrumbs.size() == 0; - } - - public boolean trim(File file) { - return trim(file.getPath(), file.isDirectory()); - } - - void updateIndices() { - for (int i = 0; i < mChildFrame.getChildCount(); i++) - mChildFrame.getChildAt(i).setTag(i); - } - - public void setActiveOrAdd(@NonNull Crumb crumb, boolean forceRecreate) { - if (forceRecreate || !setActive(crumb)) { - clearCrumbs(); - final List newPathSet = new ArrayList<>(); - - newPathSet.add(0, crumb.getFile()); - - File p = crumb.getFile(); - while ((p = p.getParentFile()) != null) { - newPathSet.add(0, p); - } - - for (int index = 0; index < newPathSet.size(); index++) { - final File fi = newPathSet.get(index); - crumb = new Crumb(fi); - - // Restore scroll positions saved before clearing - if (mOldCrumbs != null) { - for (Iterator iterator = mOldCrumbs.iterator(); iterator.hasNext(); ) { - Crumb old = iterator.next(); - if (old.equals(crumb)) { - crumb.setScrollPosition(old.getScrollPosition()); - iterator.remove(); // minimize number of linear passes by removing un-used crumbs from history - break; - } - } - } - - addCrumb(crumb, true); - } - - // History no longer needed - mOldCrumbs = null; - } - } - - public int size() { - return mCrumbs.size(); - } - - private TextView invalidateActivated(View view, final boolean isActive, final boolean noArrowIfAlone, final boolean allowArrowVisible) { - int contentColor = isActive ? contentColorActivated : contentColorDeactivated; - LinearLayout child = (LinearLayout) view; - TextView tv = (TextView) child.getChildAt(0); - tv.setTextColor(contentColor); - ImageView iv = (ImageView) child.getChildAt(1); - iv.setColorFilter(contentColor, PorterDuff.Mode.SRC_IN); - if (noArrowIfAlone && getChildCount() == 1) - iv.setVisibility(View.GONE); - else if (allowArrowVisible) - iv.setVisibility(View.VISIBLE); - else - iv.setVisibility(View.GONE); - return tv; - } - - public int getActiveIndex() { - return mActive; - } - - public void setActivatedContentColor(@ColorInt int contentColorActivated) { - this.contentColorActivated = contentColorActivated; - } - - public void setDeactivatedContentColor(@ColorInt int contentColorDeactivated) { - this.contentColorDeactivated = contentColorDeactivated; - } - - @Override - public void onClick(View v) { - if (mCallback != null) { - int index = (Integer) v.getTag(); - mCallback.onCrumbSelection(mCrumbs.get(index), index); - } - } - - public static class SavedStateWrapper implements Parcelable { - - public final int mActive; - public final List mCrumbs; - public final int mVisibility; - - public SavedStateWrapper(BreadCrumbLayout view) { - mActive = view.mActive; - mCrumbs = view.mCrumbs; - mVisibility = view.getVisibility(); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(this.mActive); - dest.writeTypedList(mCrumbs); - dest.writeInt(this.mVisibility); - } - - protected SavedStateWrapper(Parcel in) { - this.mActive = in.readInt(); - this.mCrumbs = in.createTypedArrayList(Crumb.CREATOR); - this.mVisibility = in.readInt(); - } - - public static final Creator CREATOR = new Creator() { - public SavedStateWrapper createFromParcel(Parcel source) { - return new SavedStateWrapper(source); - } - - public SavedStateWrapper[] newArray(int size) { - return new SavedStateWrapper[size]; - } - }; - } - - public SavedStateWrapper getStateWrapper() { - return new SavedStateWrapper(this); - } - - public void restoreFromStateWrapper(SavedStateWrapper mSavedState) { - if (mSavedState != null) { - mActive = mSavedState.mActive; - for (Crumb c : mSavedState.mCrumbs) { - addCrumb(c, false); - } - requestLayout(); - setVisibility(mSavedState.mVisibility); - } - } -} \ No newline at end of file diff --git a/app/src/main/res/layout/bread_crumb.xml b/app/src/main/res/layout/bread_crumb.xml deleted file mode 100644 index 34fa5445..00000000 --- a/app/src/main/res/layout/bread_crumb.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_folder.xml b/app/src/main/res/layout/fragment_folder.xml deleted file mode 100644 index c87bf427..00000000 --- a/app/src/main/res/layout/fragment_folder.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/menu/menu_drawer.xml b/app/src/main/res/menu/menu_drawer.xml index 7466ad79..6325c842 100644 --- a/app/src/main/res/menu/menu_drawer.xml +++ b/app/src/main/res/menu/menu_drawer.xml @@ -8,20 +8,8 @@ android:id="@+id/nav_library" android:icon="@drawable/ic_library_music_white_24dp" android:title="@string/library" /> - - - - - - diff --git a/app/src/main/res/menu/menu_folders.xml b/app/src/main/res/menu/menu_folders.xml deleted file mode 100644 index 52563a93..00000000 --- a/app/src/main/res/menu/menu_folders.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/menu_item_directory.xml b/app/src/main/res/menu/menu_item_directory.xml deleted file mode 100644 index 01f67ba7..00000000 --- a/app/src/main/res/menu/menu_item_directory.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/menu_item_file.xml b/app/src/main/res/menu/menu_item_file.xml deleted file mode 100644 index b0b59470..00000000 --- a/app/src/main/res/menu/menu_item_file.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 26499096..7ba720ea 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -25,8 +25,6 @@ التفاصيل إعادة التسمية حذف - فحص - تعيين كمسار البداية الألبومات الفنانون الأنواع @@ -88,7 +86,6 @@ خلط قائمة التشغيل مسح قائمة التشغيل حفظ قائمة التشغيل - الذهاب إلى مسار البداية عرض كلمات الأغاني فاتح غامق @@ -203,18 +200,10 @@ اسحب البطاقة في شاشة \"يتم تشغيله الآن\" لإظهار قائمة التشغيل بالكامل. إعادة ترتيب قائمة التشغيل عبر سحب الأغاني من أرقامها. المكتبة - المجلدات تم حفظ قائمة التشغيل إلى %s. فشل حفظ قائمة التشغيل (%s). تم حفظ %1$d قوائم تشغيل إلى %2$s. تم حفظ %1$d قوائم تشغيل إلى %2$s، فشل حفظ %3$d. - %s غير مدرج في مخزن الوسائط.]]> - بعض الملفات غير مدرجة في مخزن الوسائط. - لا يوجد شيء للفحص - تم فحص %1$d من %2$d ملفات. - تعذر فحص %d ملفات. - جار إدراج الملفات - %s هو مسار البداية الجديد. Phonograph - كبير Phonograph - كلاسيكي Phonograph - صغير @@ -251,7 +240,6 @@ فقط أول 5 ألوان هي المتوفرة في النسخة المجانية. التنسيق الأسود هي ميزة في Phonograph Pro. مؤقت النوم هي ميزة في Phonograph Pro - عرض المجلدات هي ميزة في Phonograph Pro. جار استعادة عملية الشراء... لم يتم التمكن من استعادة عملية الشراء. شراء @@ -271,8 +259,6 @@ أقسام المكتبة تخصيص رؤية وترتيب أقسام المكتبة. عليك أن تختار قسماً واحداً على الأقل. - فحص المسار - فحص الوسائط ترتيب الفرز تصاعدي تنازلي diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 3920eedd..ffd214ec 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -25,8 +25,6 @@ Детайли Преименувай Изтрий - Сканирай - Задай като начална директория Албуми Изпълнители Песни @@ -84,7 +82,6 @@ Разбъркай артист Разбъркай този плейлист Изчисти списъкът с възпроизвеждащи се песни - Отиди в началната директория Покажи текст Светъл изглед Тъмен изглед @@ -178,15 +175,8 @@ Плъзнете картата в екранът на текущо възпроизвеждащата се песен, за видите списъкът с песни. Разместете списъкът с текущо възпроизвеждащи се песни, като хванете тракът за неговият номер. Библиотека - Папки Плейлистът бе запазен в %s. Плейлистът не бе запазен успешно (%s). - %s не е намерен в медия хранилището.]]> - Няма нищо за сканиране. - Сканирани %1$d файлове от %2$d. - %d файла не бяха сканирани. - Файловете се зареждат - %s е новата заглавна директория. Phonograph - Голям Phonograph - Класически Phonograph - Малък diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 1f1dc0cd..d22c3d0f 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -25,8 +25,6 @@ Podrobné informace o skladbě Přejmenovat Smazat - Skenovat - Nastavit jako domovskou složku Alba Interpreti Žánry @@ -88,7 +86,6 @@ Přehrát playlist náhodně Vyčistit frontu přehrávání Uložit frontu přehrávání - Jít na domovskou složku Zobrazit text Světlý Tmavý @@ -203,18 +200,10 @@ "Potáhněte kartu v obrazovce Právě přehrávané nahoru pro zobrazení celé fronty přehrávání. " "Změňte pořadí fronty přetažením skladby za její číslo. " "Knihovna " - "Složky " Uloženo do playlistu %s. Chyba v uložení playlistu (%s). Uloženo %1$d playlistů do %2$s. Uloženo %1$d playlistů do %2$s, nepodařilo se uložit %3$d. - %s není zobrazeno v seznamu souborů.]]> - Některé soubory nejsou zobrazeny v obchodě s médii. - Nic ke skenování. - Naskenováno %1$d z %2$d souborů. - Nelze skenovat %d souborů. - Načítání souborů - %s je nová domovská složka. Phonograph - Velký Phonograph - Klasický Phonograph - Malý @@ -251,7 +240,6 @@ Ve verzi zdarma je dostupných pouze prvních 5 barev. Černý motiv je funkce Phonograph Pro. Časovač vypnutí je funkce Phonograph Pro. - Prohlížení složek je funkce Phonograph Pro. Obnovení nákupu... Nákup nelze obnovit. Zakoupit @@ -271,8 +259,6 @@ Kategorie knihovny Nastavit viditelnost a pořadí kategorií knihoven. Musíte zvolit alespoň jednu kategorii. - Skemování adresáře - Skenování médií Seřazení Vzestupně Sestupně diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 70c27a5d..c9fa2f13 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -25,8 +25,6 @@ Details Umbenennen Löschen - Scannen - Als Start-Verzeichnis festlegen Alben Interpreten Genres @@ -89,7 +87,6 @@ Wiedergabeliste zufällig wiedergeben Warteschlange leeren Warteschlange speichern - Zum Start-Verzeichnis gehen Songtext anzeigen Hell Dunkel @@ -207,18 +204,10 @@ Ziehe die Karte in der aktuellen Wiedergabe hoch, um die komplette Warteschlange anzeigen zu lassen. Ziehe die Titelnummer eines Titels nach oben oder unten, um die Warteschlange neu anzuordnen. Bibliothek - Ordner Playlist wurde in %s gespeichert. Speichern der Playlist fehlgeschlagen (%s). %1$d Wiedergabelisten wurden in %2$s gespeichert. %1$d Wiedergabelisten wurden in %2$s gespeichert, %3$d konnten nicht gespeichert werden. - %s ist nicht im Media Store gelistet.]]> - Einige Dateien sind nicht im Medienverzeichnis gelistet. - Nichts zu scannen. - %1$d von %2$d Dateien gescannt. - %d Dateien konnten nicht gescannt werden. - Dateien werden gelistet - %s ist das neue Start-Verzeichnis. Phonograph - Groß Phonograph - Klassisch Phonograph - Klein @@ -255,7 +244,6 @@ Nur die ersten 5 Farben sind in der kostenlosen Version verfügbar. Das schwarze Theme ist ein Phonograph Pro-Feature Der Einschlaf-Timer ist ein Phonograph Pro-Feature - Die Ordner-Ansicht ist ein Phonograph Pro-Feature. Stelle Kauf wieder her... Kauf konnte nicht wiederhergestellt werden. Kaufen @@ -275,8 +263,6 @@ Bibliothekskategorien Anzeige und Anordnung der einzelnen Kategorien festlegen. Mindestens eine Kategorie muss ausgewählt sein. - Verzeichnis scannen - Medien scannen Sortierung Aufsteigend Absteigend diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index e55f9a93..e91a1dee 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -25,8 +25,6 @@ "Λεπτομέρειες " Μετονομασία Διαγραφή - Σάρωση - Ορισμός ως κατάλογος έναρξης Άλμπουμ Καλλιτέχνες Είδη @@ -89,7 +87,6 @@ Τυχαία λίστα αναπαραγωγής Εκκαθάριση της ουράς αναπαραγωγής Αποθήκευση της σειράς αναπαραγωγής - Πηγαίνετε στον κατάλογο έναρξης Εμφάνιση στίχων Ανοιχτό Σκούρο @@ -193,18 +190,10 @@ Σύρετε την κάρτα στην οθόνη \"παίζει τώρα\" μέχρι να αποκαλυφθεί ολόκληρη η σειρά τραγουδιών. Κάντε αναδιάταξη της σειράς τραγουδιών σύροντας ένα τραγούδι από τον αριθμό του. Βιβλιοθήκη - Φάκελοι Η λίστα αναπαραγωγής αποθηκεύτηκε στο %s. Η λίστα αναπαραγωγής απέτυχε να αποθηκευτεί (%s). Αποθηκεύτηκαν %1$d λίστες αναπαραγωγής σε %2$s. Αποθηκεύτηκαν %1$d λίστες αναπαραγωγής σε %2$s, αποτυχία αποθήκευσης %3$d. - %s δεν είναι καταχωρημένο στο κατάστημα.]]> - Μερικά αρχεία δεν έχουν κατανεμηθεί στο κατάστημα αρχείων. - Δεν υπάρχει κάτι για σάρωση. - Έγινε σάρωση σε %1$d από %2$d αρχεία. - Δεν μπόρεσε να πραγματοποιηθεί σάρωση σε %d αρχεία. - Λίστα αρχείων - %s είναι ο νέος κατάλογος έναρξης. Phonograph - Μεγάλο Phonograph - Κλασικό Phonograph - Μικρό diff --git a/app/src/main/res/values-en-rCA/strings.xml b/app/src/main/res/values-en-rCA/strings.xml index be9df128..21f54c58 100644 --- a/app/src/main/res/values-en-rCA/strings.xml +++ b/app/src/main/res/values-en-rCA/strings.xml @@ -25,8 +25,6 @@ Details Rename Delete - Scan - Set as start directory Albums Artists Songs @@ -86,7 +84,6 @@ Shuffle playlist Clear playing queue Save playing queue - Go to start directory Show lyrics Light Dark @@ -196,15 +193,8 @@ Swipe the card in the now playing screen up to reveal the full playing queue. Rearrange the playing queue by dragging a song from its track number. Library - Folders Saved playlist to %s. Failed to save playlist (%s). - %s is not listed in the media store.]]> - Nothing to scan. - Scanned %1$d of %2$d files. - Could not scan %d files. - Listing files - %s is the new start directory. Phonograph - Big Phonograph - Classic Phonograph - Small @@ -241,7 +231,6 @@ Only the first 5 colors are available in the free version. The black theme is Phonograph Pro feature. Sleep timer is a Phonograph Pro feature - Folder view is a Phonograph Pro feature. Restoring purchase… Could not restore purchase. Purchase diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 37888344..2bd1f78c 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -25,8 +25,6 @@ Details Rename Delete - Scan - Set as start directory Albums Artists Genres @@ -87,7 +85,6 @@ Shuffle playlist Clear playing queue Save playing queue - Go to start directory Show lyrics Light Dark @@ -202,15 +199,8 @@ Swipe the card in the now playing screen up to reveal the full playing queue. Rearrange the playing queue by dragging a song from its track number. Library - Folders Saved playlist to %s. Failed to save playlist (%s). - %s is not listed in the media store.]]> - Nothing to scan. - Scanned %1$d of %2$d files. - Could not scan %d files. - Listing files - %s is the new start directory. Phonograph - Big Phonograph - Classic Phonograph - Small @@ -247,7 +237,6 @@ Only the first 5 colours are available in the free version. The black theme is Phonograph Pro feature. Sleep timer is a Phonograph Pro feature - Folder view is a Phonograph Pro feature. Restoring purchase… Could not restore purchase. Purchase diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 34193102..91dd6908 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -25,8 +25,6 @@ Detalles Renombrar Eliminar - Escanear - Establecer como directorio de inicio Álbumes Artistas Géneros @@ -89,7 +87,6 @@ Reproducción aleatoria de la lista de reproducción Vaciar cola de reproducción Guardar cola de reproducción - Ir al directorio de inicio Mostrar letras Claro Oscuro @@ -207,18 +204,10 @@ Desliza la carta hacia arriba en la pantalla de ahora reproduciendo para desvelar completamente la cola de reproducción. Reordena la cola de reproducción arrastrando la canción desde su número de pista. Biblioteca - Carpetas Lista de reproducción guardada en %s. No se pudo guardar la lista de reproducción (%s). %1$d de %2$s listas de reproducción guardadas. Guardada %1$d de %2$s listas de reproducción, fallo al guardar la %3$d. - %s no se encuentra listado en los medios almacenados]]> - Español - Nada para analizar - %1$d de %2$d archivos analizados - No se pudieron analizar los archivos %d - Listado de archivos - %s es el nuevo directorio de inicio. Phonograph - Grande Phonograph - Clásico Phonograph - Pequeño @@ -255,7 +244,6 @@ Sólo los primeros 5 colores están disponibles en la versión gratuita. El tema negro es una característica de Phonograph Pro. El temporizador de sueño es una característica de Phonograph Pro. - La vista de carpetas es una característica de Phonograph Pro. Restableciendo la compra... No se pudo restablecer la compra Comprar @@ -276,8 +264,6 @@ El contenido de las carpetas de la lista negra está oculto en tu biblioteca"Categorías de la biblioteca Configure la visibilidad y el orden de las categorías de la biblioteca. Debes seleccionar al menos una categoría. - Escanear directorio - Escanear medios Orden de clasificación Ascendente Descendente diff --git a/app/src/main/res/values-es-rUS/strings.xml b/app/src/main/res/values-es-rUS/strings.xml index ff46cc11..1128eb7f 100644 --- a/app/src/main/res/values-es-rUS/strings.xml +++ b/app/src/main/res/values-es-rUS/strings.xml @@ -25,8 +25,6 @@ Detalles Renombrar Borrar - Escanear - Establecer como directorio de inicio Álbumes Artistas Géneros @@ -88,7 +86,6 @@ Reproducción aleatoria de la lista de reproducción Limpiar cola de reproducción Guardar cola de reproducción - Ir al directorio de inicio Mostrar letra Claro Oscuro @@ -203,17 +200,9 @@ Desliza la tarjeta en la pantalla de Reproducción Actual para desplegar la cola de reproducción completa. Reorganiza la cola de reproducción arrastrando una canción desde su número de pista. Biblioteca - Carpetas Lista de reproducción guardada en %s. No se pudo guardar lista de reproducción (%s). %1$d de %2$s listas de reproducción guardadas. - %s no se encuentra listado en los medios almacenados.]]> - Algunos archivos no se encuentran listados en los medios almacenados. - Nada para escanear. - %1$d de %2$d archivos escaneados. - No se pudieron escanear los archivos %d. - Listado de archivos - %s es el nuevo directorio de inicio. Phonograph - Grande Phonograph - Clásico Phonograph - Pequeño @@ -250,7 +239,6 @@ Solo los primeros 5 colores están disponibles en la versión gratuita. El tema negro es una función de Phonograph Pro. El temporizador de apagado es una función de Phonograph Pro - La vista de carpetas es una función de Phonograph Pro. Restaurando compra... No se pudo restaurar la compra. Comprar @@ -270,8 +258,6 @@ Categorías de la biblioteca Configurar la vista y orden de las categorías de la biblioteca. Tienes que seleccionar al menos una categoría. - Escanear directorio - Escanear medios Ordenar por Ascendente Descendente diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index a11ded89..4cab9025 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -25,8 +25,6 @@ Yksityiskohdat Nimeä uudelleen Poista - Skannaa - Aseta aloituskansioksi Albumit Artistit Tyylilajit @@ -89,7 +87,6 @@ Sekoita soittolistat Tyhjennä toistojono Tallenna toistojono - Mene aloituskansioon Näytä lyriikat Vaalea Tumma @@ -207,18 +204,10 @@ Vedä korttia Toistetaan parhaillaan -ikkunassa ylös, nähdäksesi koko toistojonon. Järjestä toistojonoa vetämällä kappaletta sen raitanumerosta. Kirjasto - Kansiot Soittolista tallennettu paikkaan %s. Soittolistan tallentaminen epäonnistui (%s). Tallennettiin soittolistat %1$d paikkaan %2$s. Tallennettiin soittolistat %1$d paikkaan %2$s, %3$d tallentaminen epäonnistui. - %s ei ole listattu Media Storessa.]]> - Jotkin tiedostot eivät ole listattuna Media Storessa. - Ei mitään skannattavaa. - Skannattiin %1$d %2$d tiedostosta. - Ei voitu skannata %d tiedostoa. - Listataan tiedostoja - %s on uusi aloituskansio. Phonograph - Iso Phonograph - Klassikko Phonograph - Pieni @@ -255,7 +244,6 @@ Sovelluksen ilmaisversio on rajoitettu 5 ensimmäiseen värivaihtoehtoon. Musta teema on Phonograph Pro:n ominaisuus. Herätyskello on Phonograph Pro:n ominaisuus. - Kansionäkymä on Phonograph Pro:n ominaisuus. Palautetaan ostoa... Ei voitu palauttaa ostoa. Osta @@ -275,8 +263,6 @@ Kirjaston välilehdet Määrittele kirjaston välilehtien näkyvyyttä ja järjestystä. Sinun täytyy valita vähintään yksi kategoria. - Skannaa kansio - Skannaa media Lajittelu järjestys Nouseva Laskeva diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 7255c30d..5de12f63 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -25,8 +25,6 @@ Détails Renommer Supprimer - Analyser - Définir comme répertoire de départ Albums Artistes Genres @@ -88,7 +86,6 @@ Lecture aléatoire Effacer la file de lecture Sauvegarder la file de lecture - Aller au répertoire de départ Afficher les paroles Clair Sombre @@ -203,17 +200,9 @@ Vous pouvez glisser la carte dans l\'écran de lecture en cours pour afficher la file de lecture complète. Vous pouvez réorganiser la file de lecture en faisant glisser une chanson à partir de son numéro de piste. Bibliothèque - Dossiers Liste de lecture sauvegardée dans %s. Impossible de sauvegarder la liste de lecture (%s). Liste de lecture enregistrée %1$d à %2$s - %s n\'est pas dans le catalogue de médias.]]> - "Certains fichiers ne sont pas enregistrés dans le stockage média " - Rien à analyser. - %1$d fichiers scannés sur %2$d. - Impossible de scanner %d fichiers. - Liste des fichiers - %s est le nouveau répertoire de départ. Phonograph - Grand Phonograph - Classique Phonograph - Petit @@ -250,7 +239,6 @@ Seules les 5 premières couleurs sont disponibles dans la version gratuite. Le thème noir est une fonctionnalité Phonograph Pro Le minuteur de sommeil est une fonctionnalité Phonograph Pro - La vue par dossier est une fonctionnalité Phonograph Pro. Restauration des achats... Impossible de restaurer les achats Acheter @@ -270,8 +258,6 @@ Catégories de la bibliothèque Configurer la visibilité et l\'ordre des catégories. Vous devez sélectionner au moins une catégorie. - Scanner le dossier. - Scanner les médias. Ordre de tri Ascendant Descendant diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index dffb4fe4..aaaaad45 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -25,8 +25,6 @@ פרטים שנה שם מחק - סרוק - הגדר כנתיב התחלתי אלבומים אמנים סגנונות @@ -88,7 +86,6 @@ ערבב רשימת השמעה איפוס תור השמעה שמור תור פעיל - עבור לנתיב התחלתי הצג מילים בהיר כהה @@ -203,18 +200,10 @@ החלק את הכרטיס למעלה במסך \'מנגן כעת\' כדי לחשוף את תור ההשמעה המלא. מיין מחדש את התור על ידי גרירת השיר מהמספר שלו. ספריה - תיקיות רשימת ההשמעה נשמרה ל-%s. לא ניתן היה לשמור את רשימת ההשמעה (%s) נשמרו %1$d רשימות השמעה ל-%2$s. נשמרו %1$d רשימות השמעה ל-%2$s. לא ניתן היה לשמור %3$d. - %s לא רשום בחנות המדיה.]]> - קבצים מסוימים לא רשומים בחנות המדיה. - אין כלום לסרוק. - נסרקו %1$d מתוך %2$d קבצים. - לא ניתן היה לסרוק %d קבצים. - מבצע רישום קבצים - %s הוא כעת נתיב ההתחלה החדש. Phonograph - גדול Phonograph - קלאסי Phonograph - קטן @@ -251,7 +240,6 @@ רק 5 הצבעים הראשונים זמינים בגרסה החינמית. ערכת הנושא השחורה היא אפשרות הזמינה ב-Phonograph Pro בלבד. טיימר לשינה הוא אפשרות הזמינה ב-Phonograph Pro בלבד. - תצוגת תיקיות היא אפשרות הזמינה ב-Phonograph Pro בלבד. משחזר רכישה... לא ניתן לשחזר רכישה. קנה @@ -271,8 +259,6 @@ קטגוריות הספרייה הגדר את הנראות והסדר של הקטגוריות בספרייה. עליך לבחור לפחות קטגוריה אחת. - סרוק ספרייה - סרוק מדיה סדר המיון סדר עולה סדר יורד diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 76bbce7b..0211a3cd 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -25,8 +25,6 @@ Detalji Preimenuj Izbriši - Skeniraj - Postavi kao početni direktorij Albumi Izvođači Žanrovi @@ -88,7 +86,6 @@ Izmiješaj popis naslova Očisti red čekanja Spremi red čekanja - Idi na početni direktorij Prikaži stihove Svijetla Tamna @@ -203,18 +200,10 @@ Povucite karticu na zaslonu za reprodukciju kako bi otvorili cijeli red čekanja. Preuredite red čekanja povlačenjem pjesme za njen broj. Biblioteka - Mape Popis naslova spremljen u %s. Popis naslova nije spremljen (%s). %1$d popisa naslova je spremljeno u %2$s. %1$d popisa naslova je spremljeno u %2$s, %3$d nije uspješno spremljeno. - %s nije na popisu media storea.]]> - Neke datoteke nisu u medijskom spremniku. - Nema ništa za skeniranje. - Skenirano %1$d od %2$d datoteka - Nije moguće skenirati %d datoteka. - Listanje datoteka - %s je novi početni direktorij. Phonograph - Veliki Phonograph - Klasični Phonograph - Mali @@ -251,7 +240,6 @@ Samo je prvih 5 boja dostupno u besplatnoj verziji. Crna tema je Phonograph Pro značajka. Tajmer za spavanje je Phonograph Pro značajka. - Prikaz mapa je Phonograph Pro značajka. Vraćanje kupnje... Nije moguće vratiti kupnju. Kupi @@ -271,8 +259,6 @@ Kategorije biblioteke Prilagodite vidljivost i poredak kategorija biblioteke Morate odabrati barem jednu kategoriju - Skeniraj direktorij - Skeniraj medije Način sortiranja Uzlazno Silazno diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 36ae414f..82ea3f9c 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -25,8 +25,6 @@ Részletek Átnevezés Törlés - Beolvasás - Beállítás kezdő könyvtárként Albumok Előadók Műfajok @@ -88,7 +86,6 @@ Lejátszási lista keverése Lejátszási lista törlése Mentés a lejátszási sorba - Ugrás a kezdő könyvtárra Dalszöveg Világos Sötét @@ -203,18 +200,10 @@ Húzza fel a kártyát a most játszott képernyőn, hogy megnyissa a lejátszási sort. A lejátszási sort átrendezheti, ha a dalokat a sorszámuknál megfogva húzni kezdi. Könyvtár - Mappák Lejátszási lista mentve ide: %s. Nem sikerült menteni a lejátszási listát (%s). Mentés %1$d lejátszási listát %2$s-re. Mentés %1$d lejátszási listák %2$s, nem sikerült menteni a %3$d. - %s nem szerepel a médiatárban.]]> - Egyes fájlok nem szerepelnek a médiában. - Nincs mit beolvasni. - %1$d/%2$d fájl beolvasva. - %d fájl beolvasása nem sikerült. - Fájlok betöltése - Az új kezdő könyvtár: %s Phonograph - Nagy Phonograph - Klasszikus Phonograph - Kicsi @@ -251,7 +240,6 @@ Csak az első 5 szín áll rendelkezésre az ingyenes verzióban. A fekete téma a Phonograph Pro funkcióban van. Az elalvásidőzitő a Phonograph Pro funkcióban van. - A mappa nézete a Phonograph Pro funkcióban van. A vásárlás visszaállítása... A vásárlást nem sikerült visszaállítani. Vásárlás @@ -271,8 +259,6 @@ Könyvtár kategóriák Könyvtár kategóriák láthatóságának és sorrendjének beállítása. Legalább egy kategóriát ki kell választania. - Szkennelési könyvtár - Szkennelési média Sorrend Növekvő Csökkenő diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index b5ba7851..e7533a30 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -25,8 +25,6 @@ Rincian Ganti Nama Hapus - Pindai - Atur sebagai direktori awal Album-album Artis Aliran @@ -89,7 +87,6 @@ Putar daftar putar secara acak Kosongkan antrean yang sedang diputar Menyimpan antrian yang diputar - Ke direktori awal Tampilkan lirik Terang Gelap @@ -207,18 +204,10 @@ Geser ke atas pada kartu di layar yang sedang memutar untuk memperlihatkan dengan lengkap antrean yang sedang diputar. Atur ulang antrean yang sedang diputar dengan menyeret lagu dari nomor urut. Pustaka - Map-map Daftar putar tersimpan ke %s. Gagal untuk menyimpan daftar putar (%s). %1$d daftar putar disimpan ke %2$s. %1$d daftar putar disimpan ke %2$s, gagal menyimpan %3$d. - %s tidak tercatat di toko media.]]> - Beberapa berkas tidak tercatat di media penyimpanan. - Tidak ada untuk di pindai. - %1$d dari %2$d berkas terpindai. - Tidak dapat memindai %d berkas. - Mencatat berkas-berkas - %s adalah direktori awal yang baru. Phonograph - Besar Phonograph - Klasik Phonograph - Kecil @@ -255,7 +244,6 @@ Hanya 5 warna pertama yang tersedia untuk versi gratis. Tema gelap adalah fitur Phonograph Pro. Pengatur waktu tidur adalah fitur Phonograph Pro - Tampilan folder adalah fitur Phonograph Pro. Memulihkan pembelian... Tidak dapat memulihkan pembelian. Pembelian @@ -275,8 +263,6 @@ Kategori perpustakaan Konfigurasi visibilitas dan urutan kategori perpustakaan. Anda harus memilih setidaknya satu kategori - Pindai direktori - Pindai media Tata urutan Naik Turun diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index b5ba7851..e7533a30 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -25,8 +25,6 @@ Rincian Ganti Nama Hapus - Pindai - Atur sebagai direktori awal Album-album Artis Aliran @@ -89,7 +87,6 @@ Putar daftar putar secara acak Kosongkan antrean yang sedang diputar Menyimpan antrian yang diputar - Ke direktori awal Tampilkan lirik Terang Gelap @@ -207,18 +204,10 @@ Geser ke atas pada kartu di layar yang sedang memutar untuk memperlihatkan dengan lengkap antrean yang sedang diputar. Atur ulang antrean yang sedang diputar dengan menyeret lagu dari nomor urut. Pustaka - Map-map Daftar putar tersimpan ke %s. Gagal untuk menyimpan daftar putar (%s). %1$d daftar putar disimpan ke %2$s. %1$d daftar putar disimpan ke %2$s, gagal menyimpan %3$d. - %s tidak tercatat di toko media.]]> - Beberapa berkas tidak tercatat di media penyimpanan. - Tidak ada untuk di pindai. - %1$d dari %2$d berkas terpindai. - Tidak dapat memindai %d berkas. - Mencatat berkas-berkas - %s adalah direktori awal yang baru. Phonograph - Besar Phonograph - Klasik Phonograph - Kecil @@ -255,7 +244,6 @@ Hanya 5 warna pertama yang tersedia untuk versi gratis. Tema gelap adalah fitur Phonograph Pro. Pengatur waktu tidur adalah fitur Phonograph Pro - Tampilan folder adalah fitur Phonograph Pro. Memulihkan pembelian... Tidak dapat memulihkan pembelian. Pembelian @@ -275,8 +263,6 @@ Kategori perpustakaan Konfigurasi visibilitas dan urutan kategori perpustakaan. Anda harus memilih setidaknya satu kategori - Pindai direktori - Pindai media Tata urutan Naik Turun diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 6cbbcf00..d5633630 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -25,8 +25,6 @@ Dettagli Rinomina Elimina - Fai una scansione - Imposta come directory iniziale Album Artisti Generi @@ -89,7 +87,6 @@ Riproduzione casuale playlist Svuota coda di riproduzione Salva la coda di riproduzione - Vai alla directory iniziale Mostra testo Chiaro Scuro @@ -207,18 +204,10 @@ Fai uno swipe sulla card nella schermata In riproduzione per mostrare l\'intera coda di riproduzione. Riorganizza la coda di riproduzione trascinando una canzone dal suo numero di traccia. Libreria - Cartelle Playlist salvata in %s. Salvataggio playlist fallito (%s). Salvate %1$d playlist in %2$s. Salvate %1$d playlist in %2$s, %3$d non salvato. - %s non è elencato nel media store.]]> - Alcuni file non sono elencati nel media store. - Nulla da scansionare. - Scansione effettuata per %1$d su %2$d file. - Non è stato possibile effettuare la scansione di %d file. - Creazione elenco dei file - %s è la nuova directory iniziale. Phonograph - Grande Phonograph - Classico Phonograph - Piccolo @@ -256,7 +245,6 @@ Solo i primi cinque colori sono disponibili nella versione gratuita. Il tema scuro è una funzionalità di Phonograph Pro. Il timer di spegnimento è una funzionalità di Phonograph Pro. - La visualizzazione delle cartelle è una funzionalità di Phonograph Pro. Ripristinando l\'acquisto... Impossibile ripristinare l\'acquisto. Acquista @@ -276,8 +264,6 @@ Categorie libreria Configura visibilità e ordine delle categorie della libreria. Devi scegliere almeno una categoria. - Scansiona cartella - Scansiona media Ordine Ascendente Discendente diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index dffb4fe4..aaaaad45 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -25,8 +25,6 @@ פרטים שנה שם מחק - סרוק - הגדר כנתיב התחלתי אלבומים אמנים סגנונות @@ -88,7 +86,6 @@ ערבב רשימת השמעה איפוס תור השמעה שמור תור פעיל - עבור לנתיב התחלתי הצג מילים בהיר כהה @@ -203,18 +200,10 @@ החלק את הכרטיס למעלה במסך \'מנגן כעת\' כדי לחשוף את תור ההשמעה המלא. מיין מחדש את התור על ידי גרירת השיר מהמספר שלו. ספריה - תיקיות רשימת ההשמעה נשמרה ל-%s. לא ניתן היה לשמור את רשימת ההשמעה (%s) נשמרו %1$d רשימות השמעה ל-%2$s. נשמרו %1$d רשימות השמעה ל-%2$s. לא ניתן היה לשמור %3$d. - %s לא רשום בחנות המדיה.]]> - קבצים מסוימים לא רשומים בחנות המדיה. - אין כלום לסרוק. - נסרקו %1$d מתוך %2$d קבצים. - לא ניתן היה לסרוק %d קבצים. - מבצע רישום קבצים - %s הוא כעת נתיב ההתחלה החדש. Phonograph - גדול Phonograph - קלאסי Phonograph - קטן @@ -251,7 +240,6 @@ רק 5 הצבעים הראשונים זמינים בגרסה החינמית. ערכת הנושא השחורה היא אפשרות הזמינה ב-Phonograph Pro בלבד. טיימר לשינה הוא אפשרות הזמינה ב-Phonograph Pro בלבד. - תצוגת תיקיות היא אפשרות הזמינה ב-Phonograph Pro בלבד. משחזר רכישה... לא ניתן לשחזר רכישה. קנה @@ -271,8 +259,6 @@ קטגוריות הספרייה הגדר את הנראות והסדר של הקטגוריות בספרייה. עליך לבחור לפחות קטגוריה אחת. - סרוק ספרייה - סרוק מדיה סדר המיון סדר עולה סדר יורד diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index af979d57..86a14954 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -25,8 +25,6 @@ 詳細情報 名前の変更 削除 - 端末をスキャン - 初期ディレクトリに設定 アルバム アーティスト ジャンル @@ -88,7 +86,6 @@ プレイリストをシャッフル 再生キューを消去 再生キューを保存 - 初期ディレクトリに移動 歌詞を表示 ライト ダーク @@ -203,18 +200,10 @@ カードをスワイプすると再生中のスクリーンから再生キューのページに移動します。 トラック番号をドラッグして再生キューの曲を並び替えることができます。 ライブラリ - フォルダ プレイリストを%sに保存しました。 プレイリスト(%s)の保存に失敗しました。 %1$dプレイリストを%2$sに保存しました %1$dプレイリストを%2$sに保存しました、%3$dに保存できませんでした。 - %sはメディアストアにリストされていません。]]> - メディアストアに追加されていないファイルがあります。 - スキャンするものがありません。 - %1$d中の%2$dをスキャンしました。 - %d個のファイルをスキャンできませんでした。 - リストされたファイル - %sは新しい初期ディレクトリです。 Phonograph - ビッグ Phonograph - クラシック Phonograph - 小さく @@ -251,7 +240,6 @@ 無料版では5色のみ利用可能です。 黒テーマはPhonograph Proの機能です。 スリープ タイマーはPhonograph Proの機能です。 - フォルダー ビューはPhonograph Proの機能です。 購入を復元中… 購入情報を復元できませんでした。 購入 @@ -271,8 +259,6 @@ ライブラリのカテゴリ ライブラリに表示するカテゴリとその順番を設定します。 最低でも1つのカテゴリを選択を選択してください - ディレクトリをスキャン - メディアをスキャン 並べ替え 昇順 降順 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index d59f5752..54c379a3 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -25,8 +25,6 @@ 세부 정보 이름 변경 삭제 - 미디어 스캔 - 시작 디렉토리로 설정 앨범 아티스트 장르 @@ -88,7 +86,6 @@ 재생 목록 랜덤 재생 재생 대기열 비우기 재생 대기열 저장 - 시작 디렉토리로 가기 가사 보기 밝은 테마 어두운 테마 @@ -205,18 +202,10 @@ 재생 중 화면 하단의 카드를 쓸어올려 재생 대기열을 표시할 수 있습니다. 재생 대기열의 순서를 변경하려면 곡 번호를 잡고 드래그하세요. 보관함 - 폴더 재생 목록을 %s 로 저장했습니다. 재생 목록을 저장하는 과정에서 오류가 발생했습니다. (%s) %1$d 재생목록을 %2$s에 저장함. %1$d 재생목록을 %2$s에 저장함 / %3$d 저장 실패 - %s 을(를) 찾을 수 없습니다.]]> - 몇몇 파일은 미디어 리스트에 기록되지 않습니다. - 스캔할 내용이 없습니다. - %2$d 개 중 %1$d 개 파일 스캔 - %d 개 파일을 스캔하지 못했습니다. - 파일 나열 중 - %s 이(가) 새 시작 디렉토리로 설정되었습니다. Phonograph - 대형 Phonograph - 클래식 Phonograph - 소형 @@ -253,7 +242,6 @@ 무료 버전에서는 첫 5개의 색상만 선택 가능합니다. 검정 테마는 프로 기능입니다. 수면 타이머는 프로 기능입니다. - 폴더 보기는 프로 기능입니다. 구매 내역을 복원하는 중… 구매 내역을 복원하지 못했습니다. 구매하기 @@ -273,8 +261,6 @@ 라이브러리 카테고리 라이브러리 카테고리의 표시 여부 및 배열 순서를 조정합니다. 적어도 하나의 카테고리는 선택해야 합니다. - 디렉토리 스캔하기 - 미디어 스캔 순서 정렬하기 오름차순 내림차순 diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 0e303a68..e453aea9 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -25,8 +25,6 @@ Details Hernoemen Verwijderen - Scannen - Instellen als startmap Albums Artiesten Genres @@ -88,7 +86,6 @@ Shuffle afspeellijst Leeg afspeelwachtrij Afspeelwachtrij opslaan - Ga naar startmap Toon songtekst Licht Donker @@ -203,18 +200,10 @@ Veeg de kaart in het afspeelscherm om de afspeelwachtrij te weergeven. Rangschik de afspeelwachtrij door de afspeelnummers te verslepen. Bibliotheek - Mappen Afspeellijst opgeslagen in %s. Opslaan van afspeellijst (%s) mislukt. %1$d afspeellijsten opgeslagen in %2$s. %1$d afspeellijsten opgeslagen in %2$s, opslaan van %3$d mislukt. - %s is niet aanwezig in mediaopslag.]]> - Sommige bestanden worden niet vermeld in de mediaopslag. - Niets te scannen. - %1$d van de %2$d bestanden gescand. - Kan %d bestanden niet scannen. - Bestandslijst maken - %s is de nieuwe startmap Phonograph - Groot Phonograph - Klassiek Phonograph - Klein @@ -251,7 +240,6 @@ Alleen de eerste 5 kleuren zijn beschikbaar in de gratis versie. Het zwarte thema is een Phonograph Pro functie. Slaaptimer is een Phonograph Pro functie. - Mappenweergave is een Phonograph Pro functie. Aankoop herstellen… Kan aankoop niet herstellen. Koop @@ -271,8 +259,6 @@ Bibliotheek categorieën Configureer de zichtbaarheid en volgorde van categorieën Je moet tenminste één categorie selecteren. - Map scannen - Media scannen Sorteervolgorde Oplopend Aflopend diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 2456c8e7..eb7a1230 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -25,8 +25,6 @@ Szczegóły Zmień nazwę Usuń - Skanuj - Ustaw jako katalog startowy Albumy Wykonawcy Gatunki @@ -88,7 +86,6 @@ Losowa lista odtwarzania Wyczyść kolejkę odtwarzania Zapisz obecnie odtwarzaną kolejkę - Przejdź do katalogu startowego Pokaż teksty Jasny Ciemny @@ -203,18 +200,10 @@ Przesuń kartę na ekranie Obecnie Grane w górę, aby odsłonić pełną kolejkę odtwarzania Zmień kolejność odtwarzania, przeciągając numer utworu w górę lub w dół kolejki Biblioteka - Foldery Zapisz listę odtwarzania do %s Błąd podczas zapisywania listy odtwarzania (%s) Zapisano %1$d playliste w %2$s. Zapisano %1$d playlistę w %2$s, niepowodzenie zapisu %3$d. - %s nie figuruje w Media Store]]> - Niektóre pliki nie figuruje w Media Store. - Nie ma nic do skanowania - Przeskanowano %1$d z %2$d plików - Nie można przeskanować %d plików - Lista plików - %s jest nowym folderem startowym Phonograph - Duży Phonograph - Klasyczny Phonograph - Mały @@ -251,7 +240,6 @@ Tylko 5 pierwszych kolorów jest dostępnych w darmowej wersji. Czarny motyw jest funkcją Phonograph Pro. Wyłączenie czasowe jest funkcją Phonograph Pro. - Widok folderów jest funkcją Phonograph Pro. Przywracanie zakupu... Nie można przywrócić zakupu. Zakup @@ -271,8 +259,6 @@ Kategorie biblioteki Ustawia widoczność i kolejność kategorii biblioteki Musisz wybrać co najmniej jedną kategorię - Skanuj ścieżkę - Skanuj media Kolejność sortowania Rosnąco Malejąco diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 2626d2b2..5f9249e4 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -25,8 +25,6 @@ Detalhes Renomear Excluir - Escanear - Definir como tela inicial Álbuns Artistas Gêneros @@ -89,7 +87,6 @@ Misturar playlist Limpar fila de reprodução Salvar fila de reprodução - Ir para a pasta inicial Mostrar letras Claro Escuro @@ -207,18 +204,10 @@ Arraste para cima o card da tela de reprodução para mostrar a lista de reprodução completa. Mude as músicas de lugar na fila pressionando-as e arrastando-as de seu número de faixa. Biblioteca - Pastas Salvo à playlist %s. Erro ao salvar a playlist (%s). Salvado % 1 $ d lista de reprodução para%2$s. Salvado %1$d listas de reprodução para %2$s, não foi possível salvar %3$d. - %s não está listado no armazenamento de mídia.]]> - Alguns arquivos não estão listados no armazenamento de mídia. - Nada para escanear. - Foram escaneados %1$d dos arquivos %2$d. - Não foi possível escanear os arquivos em %d. - Listando arquivos - %s é a nova pasta inicial. Phonograph - Grande Phonograph - Clássico Phonograph - Pequeno @@ -255,7 +244,6 @@ Apenas as primeiras 5 cores estão disponíveis na versão grátis. O tema escuro é um recurso da versão Pro do Phonograph. Temporizador de soneca é um recurso da versão Pro do Phonograph - Visualização de pastas é um recurso da versão Pro do Phonograph. Restituindo compra... Não foi possível restituir a compra. Comprar @@ -275,8 +263,6 @@ Categorias da biblioteca Configurar a visibilidade e a ordem das categorias da biblioteca. Você deve selecionar ao menos uma categoria. - Escanear pasta - Escanear mídia Embaralhar ordem Ascendente Descendente diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 71de9c31..fba537a1 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -22,8 +22,6 @@ Detalhes Mudar nome Apagar - Verificar - Definir como diretoria principal Álbuns Artistas Músicas @@ -80,7 +78,6 @@ Embaralhar Artista Embaralhar lista de reprodução Limpar fila de reprodução - Ir para diretoria principal Mostrar letra Claro Escuro @@ -171,13 +168,8 @@ Deslize o cartão no ecrã de \"a reproduzir\" para cima para mostrar a fila de reprodução completa. Reorganizar a fila de reprodução arrastando a música desde o seu número Biblioteca - Pastas Lista de reprodução %s salva. Erro a salvar a lista de reprodução (%s). - Nada para verificar. - Verificados %1$d de %2$d ficheiros. - Não é possível verificar %d ficheiros. - %s é a nova diretoria principal Phonograph - Grande Phonograph - Clássico Phonograph - Pequeno diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index be55803b..c3426955 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -25,8 +25,6 @@ Detalii Redenumire Ştergeţi - Scanează - Setaţi ca dosar de pornire Albume Artiști Genuri @@ -88,7 +86,6 @@ Amestecare listă de redare Golește lista de redare Salvați lista de redare - Du-te la directorul de pornire Arată versuri Light (Alb) Dark (Negru) @@ -203,18 +200,10 @@ Glisați cardul în ecranul de redare acum pentru a afișa coada de redare completă. Rearanjați coada de redare prin glisarea unei melodii de la numărul piesei sale. Bibliotecă - Dosare Listă de redare salvată în %s. Salvarea listei de redare (%s) a eșuat. Au fost salvate %1$d liste de redare în %2$s. Au fost salvate %1$d liste de redare în %2$s, salvarea %3$d eșuând. - %s nu este listat(ă) în stocarea media.]]> - Unele fișiere nu sunt afișate în librăria media. - Nimic de scanat. - Scanate %1$d din %2$d fişiere. - Nu s-au putut scana %d fişiere. - Listare fişiere - %s este noul director de pornire. Phonograph - Mare Phonograph - Clasic Phonograph - Mic @@ -251,7 +240,6 @@ Numai primele 5 culori sunt disponibile în versiunea gratuită. Tema întunecată este disponibilă doar în versiunea Phonograph Pro. Temporizatorul este disponibil doar în versiunea Phonograph Pro - Afișarea dosarelor este disponibilă doar în versiunea Phonograph Pro. Se restabilește achiziția... Nu a putut fi restabilită achiziția. Cumpărare @@ -271,8 +259,6 @@ Categorii Configurați vizibilitatea și ordinea categoriilor din bibliotecă. Trebuie să selectați cel puțin o categorie. - Scaneaza locatia - scanare media Ordine de sortare crescător descrescător diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index dcb02d7a..c7b114c9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -25,8 +25,6 @@ Подробнее Переименовать Удалить - Сканировать - Назначить начальной директорией Альбомы Исполнители Жанры @@ -89,7 +87,6 @@ Перемешать плейлист "Очистить очередь воспроизведения " Сохранить очередь воспроизведения - Перейти к начальной директории Показать текст песни Светлая Тёмная @@ -207,18 +204,10 @@ Проведите по карточке на экране воспроизведения, чтобы просмотреть очередь Редактируйте очередь воспроизведения, перетаскивая песни за их номер "Библиотека " - Папки "Плейлист сохранён в %s " Не удалось сохранить плейлист (%s). Сохранены %1$d плейлиста в %2$s. Сохранены %1$d плейлиста в %2$s, не удалось сохранить %3$d. - %s не указано в медиа-хранилище.]]> - Некоторые файлы не указаны в медиа-хранилище. - Нечего сканировать. - Просканировано %1$d из %2$d файлов. - Не удалось просканировать %d файлов. - Список файлов - %s новая начальная директория. Phonograph — Большой Phonograph — Классический Phonograph — Маленький @@ -255,7 +244,6 @@ Только первые 5 цветов доступны в бесплатной версии. Чёрная тема это функция Phonograph Pro. Таймер сна это функция Phonograph Pro. - Просмотр по папкам это функция Phonograph Pro. Восстановление покупки... Невозможно восстановить покупку. Покупка @@ -275,8 +263,6 @@ Категории библиотеки Настройте видимость и порядок категорий библиотеки. Вы должны выбрать хотя бы одну категорию. - Сканировать - Сканировать медиа Сортировка По возрастанию По убыванию diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 783025d8..c5378a01 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -22,7 +22,6 @@ Detaljer Byt namn Radera - Skanna Album Artister Låtar diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 490acd2f..8682a849 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -25,8 +25,6 @@ Detaylar Yeniden adlandır Sil - Tara - Başlangıç dizini olarak ayarla Albümler Sanatçılar Türler @@ -88,7 +86,6 @@ Çalma listesini karıştır Çalma sırasını temizle Çalma sırasını kaydet - Başlangıç dizinine git Şarkı sözlerini göster Açık Koyu @@ -203,18 +200,10 @@ Şuan çalınıyor ekranı kartını yukarı kaydırmak çalma sırasının tamamını ortaya çıkarır. Çalma sırasını yeniden düzenlemek için şarkının parça numarasını kaydırın Kitaplık - Klasörler Çalma listesi %s kaydedildi. (%s) çalma listesine kaydetme başarısız. %1$d oynatma listesini %2$s konumuna kaydedildi. %1$d oynatma listesini %2$s konumuna kaydedildi, %3$d kaydedilemedi. - %s medya deposu listesinde yok.]]> - Bazı dosyalar medya deposunda listelenmiyor. - Taranacak bir şey yok - %1$d - %2$d dosya taranıyor. - %d dosya taranamadı. - Dosyaları listele - %s yeni bir başlangıç dizini. Phonograph - Büyük Phonograph - Klasik Phonograph - Küçük @@ -251,7 +240,6 @@ Ücretsiz sürümde sadece ilk 5 renk mevcuttur. Siyah tema, Phonograph Pro özelliğidir. Uyku zamanlayıcı bir Phonograph Pro özelliğidir. - Klasör görünümü bir Phonograph Pro özelliğidir. Satın alma geri yükleniyor... Satın alma geri yüklenemedi. Satın Al @@ -271,8 +259,6 @@ Kitaplık kategorileri Kitaplık kategorilerinin görünürlüğünü ve sırasını yapılandırma. En az bir kategori seçmeniz gerekiyor. - Tarama dizini - Medyayı tara Sıralama düzeni Artan Azalan diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 80c9f3c2..dd23140b 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -25,8 +25,6 @@ Подробиці Перейменувати Видалити - Сканувати - Встановити як початкову теку Альбоми Виконавці Жанри @@ -87,7 +85,6 @@ Перемішати список відтворення Очистити чергу відтворення Зберегти чергу відтворення - Перейти до початкової теки Показати текст Світла Темна @@ -202,15 +199,8 @@ Свайпніть картку на екрані «Зараз грає» щоб відкрити всю чергу відтворення. Змініть чергу відтворення, перетягнувши пісню за її номер. Бібліотека - Папки Збережено список відтворення в %s. Не вдалося зберегти список відтворення (%s). - %s не вказано в медіа сховищі.]]> - Нічого сканувати. - Проскановано %1$d з %2$d файлів. - Не вдалося просканувати %d файлів. - Лістинг файлів - %s є новий каталог запуску. Phonograph - Великий Phonograph - Класичний Phonograph - Малий diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 68318483..383228e2 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -25,8 +25,6 @@ Chi tiết Đổi tên Xóa - Quét - Đặt làm thư mục bắt đầu Album Nghệ sĩ Bài hát @@ -85,7 +83,6 @@ Trộn danh sách nhạc Dọn hàng đợi phát Lưu hàng đợi phát - Tới thư mục đầu Hiện lời bài hát Sáng Tối @@ -195,15 +192,8 @@ Vuốt lên thẻ trong trình đang phát để đến với hàng đợi phát đầy đủ. Sắp xếp lại hàng đợi phát bằng cách kéo một bài hát từ số thứ tự của nó. Thư viện - Thư mục Đã lưu danh sách nhạc đến %s. Không thể lưu danh sách nhạc (%s). - %s không được liệt kê trong cửa hàng đa phương tiện.]]> - Không có gì để quét. - Đã quét %1$d của %2$d tập tin. - Không thể quét %d tập tin. - Liệt kê các tập tin - %s là thư mục khởi đầu. Phonograph - Lớn Phonograph - Cổ điển Phonograph - Nhỏ @@ -240,7 +230,6 @@ Chỉ 5 màu đầu tiên có trong phiên bản miễn phí. Chủ đề màu đen là tính năng của Phonograph Pro. Hẹn giờ ngủ là một tính năng của Phonograph Pro - Xem thư mục là một tính năng của Phonograph Pro. Đang khôi phục mua hàng... Không thể khôi phục mua hàng. Mua hàng diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d9723ab1..e84403e1 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -25,8 +25,6 @@ 详情 重命名 删除 - 扫描 - 设为起始目录 专辑 艺术家 流派 @@ -89,7 +87,6 @@ 随机播放此播放列表 清空播放队列 保存播放队列 - 跳转至起始目录 显示歌词 浅色 暗色 @@ -205,18 +202,10 @@ 上滑正在播放界面内的卡片即可展开播放队列。 通过拖动歌曲名前面的序列号来调整播放队列的顺序。 媒体库 - 文件夹 已保存播放列表到 %s。 保存播放列表(%s)失败。 已保存 %1$d 播放列表到 %2$s。 已保存 %1$d 播放列表到 %2$s,保存 %3$d 失败。 - %s 没有列在媒体储存中。]]> - 部分文件未在媒体储存中列出 - 没有可扫描的对象。 - 已扫描 %1$d/%2$d 个文件。 - %d 个文件无法扫描。 - 正在列举文件 - %s 是新的初始目录。 Phonograph - 大尺寸 Phonograph - 经典 Phonograph - 小尺寸 @@ -253,7 +242,6 @@ 免费版仅能使用前 5 个主题色。 黑色主题仅适用于 Phonograph Pro。 睡眠计时器仅适用于 Phonograph Pro。 - 文件夹视图仅适用于 Phonograph Pro。 正在恢复购买状态... 无法恢复购买状态 购买 @@ -273,8 +261,6 @@ 媒体库类别 配置媒体库类别可见性和顺序。 您必需选择至少一个类别。 - 扫描音乐 - 扫描音乐 排序方式 按首字符(正序) 按首字符(倒序) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 839f34f9..5b33c18f 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -26,8 +26,6 @@ "重新命名 " 刪除 - 掃描 - 設為起始目錄 專輯 演出者 類型 @@ -90,7 +88,6 @@ 隨機播放清單 清空播放佇列 保存播放佇列 - 前往起始目錄 顯示歌詞 明亮 暗沉 @@ -208,18 +205,10 @@ 在播放面板上滑來顯示播放佇列 您可以更改歌曲播放的順序,上下拖曳播放佇列中的歌曲編號即可。 音樂庫 - 文件夾 已儲存播放清單至%s 無法儲存播放清單 \"%s\" 儲存播放清單 %1$d 至 %2$s 儲存播放清單 %1$d 至 %2$s , %3$d 儲存失敗 - %s未被列在音樂庫裡。]]> - 部分檔案未被列在音樂庫中。 - 沒有東西可掃描。 - 已掃描%2$d個檔案夾中的%1$d個。 - 不能掃描%d。 - 列出文件 - %s是新的起始目錄 Phonograph - 大型 Phonograph - 經典 Phonograph - 小型 @@ -256,7 +245,6 @@ 免費版僅能使用前 5 個顏色 黑色主題僅供 Phonograph Pro 使用 睡眠定時器僅供 Phonograph Pro 使用 - 文件夾檢視僅供 Phonograph Pro 使用 恢復購買中... 恢復購買失敗 購買 @@ -276,8 +264,6 @@ 音樂庫類別 調整音樂庫類別的顯示與排序 你至少要選擇 1 個類別 - 掃描檔案 - 掃描音樂 排列方式 升序排列 降序排列 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d00c2e51..a82b6b96 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -26,8 +26,6 @@ Details Rename Delete - Scan - Set as start directory Albums Artists Genres @@ -90,7 +88,6 @@ Shuffle playlist Clear playing queue Save playing queue - Go to start directory Show lyrics Light Dark @@ -217,18 +214,10 @@ Swipe the card in the now playing screen up to reveal the full playing queue. Rearrange the playing queue by dragging a song from its track number. Library - Folders Saved playlist to %s. Failed to save playlist (%s). Saved %1$d playlists to %2$s. Saved %1$d playlists to %2$s, failed to save %3$d. - %s is not listed in the media store.]]> - Some files are not listed in the media store. - Nothing to scan. - Scanned %1$d of %2$d files. - Could not scan %d files. - Listing files - %s is the new start directory. Phonograph - Big Phonograph - Classic Phonograph - Small @@ -266,7 +255,6 @@ Only the first 5 colors are available in the free version. The black theme is Phonograph Pro feature. Sleep timer is a Phonograph Pro feature - Folder view is a Phonograph Pro feature. Restoring purchase… Could not restore purchase. Purchase @@ -286,8 +274,6 @@ Library categories Configure visibility and order of library categories. You have to select at least one category. - Scan directory - Scan media Sort order Ascending Descending