[Android] [PATCH 4/4] Remove directories management form settings
Geoffrey Métais
geoffrey.metais at gmail.com
Thu Apr 30 14:27:22 CEST 2015
---
vlc-android/res/xml/preferences.xml | 4 -
.../src/org/videolan/vlc/gui/BrowserActivity.java | 308 ---------------------
.../org/videolan/vlc/gui/MediaBrowserAdapter.java | 165 -----------
.../org/videolan/vlc/gui/PreferencesActivity.java | 38 +--
4 files changed, 12 insertions(+), 503 deletions(-)
delete mode 100644 vlc-android/src/org/videolan/vlc/gui/BrowserActivity.java
delete mode 100644 vlc-android/src/org/videolan/vlc/gui/MediaBrowserAdapter.java
diff --git a/vlc-android/res/xml/preferences.xml b/vlc-android/res/xml/preferences.xml
index 67b363c..90b28f5 100644
--- a/vlc-android/res/xml/preferences.xml
+++ b/vlc-android/res/xml/preferences.xml
@@ -2,10 +2,6 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="@string/general_prefs_category" >
- <PreferenceScreen
- android:key="directories"
- android:summary="@string/directories_summary"
- android:title="@string/directories" />
<ListPreference
android:defaultValue="-1"
diff --git a/vlc-android/src/org/videolan/vlc/gui/BrowserActivity.java b/vlc-android/src/org/videolan/vlc/gui/BrowserActivity.java
deleted file mode 100644
index 44fe229..0000000
--- a/vlc-android/src/org/videolan/vlc/gui/BrowserActivity.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*****************************************************************************
- * BrowserActivity.java
- *****************************************************************************
- * Copyright © 2011-2012 VLC authors and VideoLAN
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-package org.videolan.vlc.gui;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Locale;
-import java.util.Stack;
-
-import org.videolan.libvlc.LibVlcUtil;
-import org.videolan.vlc.MediaDatabase;
-import org.videolan.vlc.MediaLibrary;
-import org.videolan.vlc.R;
-import org.videolan.vlc.util.AndroidDevices;
-import org.videolan.vlc.util.CustomDirectories;
-import org.videolan.vlc.util.Util;
-
-import android.app.AlertDialog;
-import android.app.ListActivity;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-import android.preference.PreferenceManager;
-import android.text.InputType;
-import android.view.ContextMenu;
-import android.view.ContextMenu.ContextMenuInfo;
-import android.view.KeyEvent;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.AdapterView.AdapterContextMenuInfo;
-import android.widget.CheckBox;
-import android.widget.EditText;
-import android.widget.ListView;
-import android.widget.Toast;
-
-public class BrowserActivity extends ListActivity {
- public final static String TAG = "VLC/BrowserActivity";
-
- /**
- * TODO:
- */
-
- private MediaBrowserAdapter mAdapter;
- private File mCurrentDir;
- private final Stack<ScrollState> mScrollStates = new Stack<ScrollState>();
- private String mRoots[];
-
- private static class ScrollState {
- public ScrollState(int index, int top) {
- this.index = index;
- this.top = top;
- }
-
- int index;
- int top;
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- applyTheme();
- super.onCreate(savedInstanceState);
- setContentView(R.layout.browser);
- mAdapter = new MediaBrowserAdapter(this);
- setListAdapter(mAdapter);
-
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
- filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
- filter.addAction(Intent.ACTION_MEDIA_REMOVED);
- filter.addAction(Intent.ACTION_MEDIA_EJECT);
- filter.addDataScheme("file");
- registerReceiver(messageReceiver, filter);
-
- refreshRoots();
- openStorageDevices(mRoots);
-
- registerForContextMenu(getListView());
- }
-
- private void applyTheme() {
- SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
- boolean enableBlackTheme = pref.getBoolean("enable_black_theme", false);
- if (enableBlackTheme) {
- setTheme(R.style.Theme_VLC_Black);
- }
- }
-
- private void refreshRoots() {
- ArrayList<String> list = new ArrayList<String>();
- list.addAll(AndroidDevices.getStorageDirectories());
- list.addAll(Arrays.asList(CustomDirectories.getCustomDirectories()));
- mRoots = list.toArray(new String[list.size()]);
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- unregisterReceiver(messageReceiver);
- mAdapter.clear();
- mScrollStates.clear();
- }
-
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
- int position = ((AdapterContextMenuInfo)menuInfo).position;
- final File item = mAdapter.getItem(position);
- if (mCurrentDir != null
- || item.getPath().equals(MediaBrowserAdapter.ADD_ITEM_PATH)
- || AndroidDevices.getStorageDirectories().contains(
- item.getPath())) {
- return;
- }
-
- MenuItem delete = menu.add(R.string.remove_custom_path);
- delete.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem arg0) {
- // remove any checkmarks of the custom item
- MediaDatabase.getInstance().recursiveRemoveDir(item.getPath());
- CustomDirectories.removeCustomDirectory(item.getPath());
- refresh();
- return true;
- }
- });
- }
-
- private void openStorageDevices(String roots[]) {
- mCurrentDir = null;
- mAdapter.clear();
- for (String s : roots) {
- File f = new File(s);
- if (f.exists())
- mAdapter.add(f);
- }
- mAdapter.add(new File(MediaBrowserAdapter.ADD_ITEM_PATH));
- mAdapter.sort();
-
- // set scroll position to top
- getListView().setSelection(0);
- }
-
- private void openDir(File file) {
- if(file == null || !file.exists() || file.getPath() == null
- || file.getPath().equals(MediaBrowserAdapter.ADD_ITEM_PATH))
- return;
-
- mAdapter.clear();
- mCurrentDir = file;
- File[] files = file.listFiles(new DirFilter());
- /* If no sub-directories or I/O error don't crash */
- if(files == null || files.length < 1) {
- Util.toaster(this, R.string.nosubdirectory);
- this.finish();
- return;
- }
- for (int i = 0; i < files.length; i++) {
- mAdapter.add(files[i]);
- }
- mAdapter.sort();
- // set scroll position to top
- getListView().setSelection(0);
- }
-
- @Override
- protected void onListItemClick(ListView l, View v, int position, long id) {
- File file = mAdapter.getItem(position);
- if(file.getPath().equals(MediaBrowserAdapter.ADD_ITEM_PATH)) {
- AlertDialog.Builder b = new AlertDialog.Builder(this);
- final EditText input = new EditText(this);
- if (!LibVlcUtil.isHoneycombOrLater()) {
- input.setTextColor(getResources().getColor(R.color.grey50));
- }
- input.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
- b.setTitle(R.string.add_custom_path);
- b.setMessage(R.string.add_custom_path_description);
- b.setView(input);
- b.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface x, int y) {return;}
- });
- b.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- String path = input.getText().toString().trim();
- File f = new File(path);
- if(!f.exists() || !f.isDirectory()) {
- Toast.makeText(BrowserActivity.this, getString(R.string.directorynotfound, path), Toast.LENGTH_SHORT).show();
- return;
- }
-
- CustomDirectories.addCustomDirectory(f.getAbsolutePath());
- refresh();
- }
- });
- b.show();
- return;
- }
-
- File[] files = file.listFiles(new DirFilter());
- if (files != null && files.length > 0) {
- // store scroll state
- int index = l.getFirstVisiblePosition();
- int top = l.getChildAt(0).getTop();
- mScrollStates.push(new ScrollState(index, top));
- openDir(file);
- } else {
- Util.toaster(this, R.string.nosubdirectory);
- }
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- if (mCurrentDir == null) {
- // We're on the list of storage devices
- return super.onKeyDown(keyCode, event);
- }
-
- // Check if we are on one of the root
- boolean isRoot = false;
- for (String root: mRoots) {
- if (mCurrentDir.getPath().equals(root)) {
- isRoot = true;
- break;
- }
- }
-
- if (isRoot) {
- openStorageDevices(mRoots);
- return true;
- } else {
- openDir(mCurrentDir.getParentFile());
- // restore scroll state
- if (mScrollStates.size() > 0) {
- ScrollState ss = mScrollStates.pop();
- getListView().setSelectionFromTop(ss.index, ss.top);
- return true;
- }
- }
- } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
- CheckBox cb = (CheckBox) getListView().getSelectedView().findViewById(R.id.browser_item_selected);
- if (cb != null)
- cb.toggle();
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
-
- public void refresh() {
- if (mCurrentDir == null) {
- refreshRoots();
- openStorageDevices(mRoots);
- } else {
- openDir(mCurrentDir);
- }
- mAdapter.notifyDataSetChanged();
- }
-
- private final BroadcastReceiver messageReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
-
- if (action.equalsIgnoreCase(Intent.ACTION_MEDIA_MOUNTED) ||
- action.equalsIgnoreCase(Intent.ACTION_MEDIA_UNMOUNTED) ||
- action.equalsIgnoreCase(Intent.ACTION_MEDIA_REMOVED) ||
- action.equalsIgnoreCase(Intent.ACTION_MEDIA_EJECT)) {
- refresh();
- }
- }
- };
-
- /**
- * Filter: accept only directories
- */
- static private class DirFilter implements FileFilter {
-
- @Override
- public boolean accept(File f) {
- return f.isDirectory() && !MediaLibrary.FOLDER_BLACKLIST.contains(f.getPath().toLowerCase(Locale.ENGLISH));
- }
- }
-
-}
diff --git a/vlc-android/src/org/videolan/vlc/gui/MediaBrowserAdapter.java b/vlc-android/src/org/videolan/vlc/gui/MediaBrowserAdapter.java
deleted file mode 100644
index ec05c9f..0000000
--- a/vlc-android/src/org/videolan/vlc/gui/MediaBrowserAdapter.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*****************************************************************************
- * MediaBrowserAdapter.java
- *****************************************************************************
- * Copyright © 2011-2015 VLC authors and VideoLAN
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-package org.videolan.vlc.gui;
-
-import java.io.File;
-import java.util.Comparator;
-import java.util.List;
-
-import org.videolan.vlc.MediaDatabase;
-import org.videolan.vlc.R;
-import org.videolan.vlc.VLCApplication;
-
-import android.content.Context;
-import android.os.Build;
-import android.os.Environment;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
-import android.widget.TextView;
-
-public class MediaBrowserAdapter extends ArrayAdapter<File>
- implements Comparator<File> {
- public final static String TAG = "VLC/BrowserAdapter";
-
- public final static String ADD_ITEM_PATH = "/add/a/path";
-
- public MediaBrowserAdapter(Context context) {
- super(context, 0);
- }
-
- @Override
- public synchronized void add(File object) {
- super.add(object);
- }
-
- /**
- * Display the view of a file browser item.
- */
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
-
- ViewHolder holder;
- View view = convertView;
- if (view == null) {
- LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- view = inflater.inflate(R.layout.browser_item, parent, false);
- holder = new ViewHolder();
- holder.layout = view.findViewById(R.id.layout_item);
- holder.check = (CheckBox) view.findViewById(R.id.browser_item_selected);
- holder.text = (TextView) view.findViewById(R.id.browser_item_dir);
- view.setTag(holder);
- } else
- holder = (ViewHolder) view.getTag();
-
- final File item = getItem(position);
- final MediaDatabase dbManager = MediaDatabase.getInstance();
-
- if(item != null) {
- if(item.getPath().equals(ADD_ITEM_PATH)) {
- holder.text.setText(R.string.add_custom_path);
- holder.check.setVisibility(View.GONE);
- } else if(item.getName() != null) {
- holder.text.setText(getVisibleName(item));
- holder.check.setVisibility(View.VISIBLE);
- holder.check.setOnCheckedChangeListener(null);
- holder.check.setTag(item);
- holder.check.setEnabled(true);
- holder.check.setChecked(false);
-
- List<File> dirs = dbManager.getMediaDirs();
- for (File dir : dirs) {
- if (dir.getPath().equals(item.getPath())) {
- holder.check.setEnabled(true);
- holder.check.setChecked(true);
- break;
- } else if (dir.getPath().startsWith(item.getPath()+"/")) {
- Log.i(TAG, dir.getPath() + " startWith " + item.getPath());
- holder.check.setEnabled(false);
- holder.check.setChecked(true);
- break;
- }
- }
-
- holder.check.setOnCheckedChangeListener(onCheckedChangeListener);
- }
- }
-
- return view;
- }
-
- private final OnCheckedChangeListener onCheckedChangeListener = new OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- final MediaDatabase dbManager = MediaDatabase.getInstance();
- File item = (File) buttonView.getTag();
- if (item == null)
- return;
-
- if (buttonView.isEnabled() && isChecked) {
- dbManager.addDir(item.getPath());
- File tmpFile = item.getParentFile();
- while (tmpFile != null && !tmpFile.getPath().equals("/")) {
- dbManager.removeDir(tmpFile.getPath());
- tmpFile = tmpFile.getParentFile();
- }
- } else {
- dbManager.removeDir(item.getPath());
- }
- }
- };
-
- public void sort() {
- super.sort(this);
- }
-
- @Override
- public int compare(File file1, File file2) {
- // float the add item to the bottom
- if(file1.getPath().equals(ADD_ITEM_PATH))
- return 1;
- else if(file2.getPath().equals(ADD_ITEM_PATH))
- return -1;
-
- return String.CASE_INSENSITIVE_ORDER.compare(file1.getName(), file2.getName());
- }
-
- private String getVisibleName(File file) {
- if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
- // Show "sdcard" for the user's folder when running in multi-user
- if (file.getAbsolutePath().equals(Environment.getExternalStorageDirectory().getPath())) {
- return VLCApplication.getAppContext().getString(R.string.internal_memory);
- }
- }
- return file.getName();
- }
-
- static class ViewHolder {
- View layout;
- CheckBox check;
- TextView text;
- }
-}
diff --git a/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java b/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java
index 37728eb..e8cb02d 100644
--- a/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java
@@ -20,18 +20,6 @@
package org.videolan.vlc.gui;
-import org.videolan.libvlc.HWDecoderUtil;
-import org.videolan.libvlc.LibVLC;
-import org.videolan.vlc.MediaDatabase;
-import org.videolan.vlc.R;
-import org.videolan.vlc.audio.AudioService;
-import org.videolan.vlc.audio.AudioServiceController;
-import org.videolan.vlc.gui.audio.AudioUtil;
-import org.videolan.vlc.util.AndroidDevices;
-import org.videolan.vlc.util.BitmapCache;
-import org.videolan.vlc.util.Util;
-import org.videolan.vlc.util.VLCInstance;
-
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -62,6 +50,18 @@ import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
+import org.videolan.libvlc.HWDecoderUtil;
+import org.videolan.libvlc.LibVLC;
+import org.videolan.vlc.MediaDatabase;
+import org.videolan.vlc.R;
+import org.videolan.vlc.audio.AudioService;
+import org.videolan.vlc.audio.AudioServiceController;
+import org.videolan.vlc.gui.audio.AudioUtil;
+import org.videolan.vlc.util.AndroidDevices;
+import org.videolan.vlc.util.BitmapCache;
+import org.videolan.vlc.util.Util;
+import org.videolan.vlc.util.VLCInstance;
+
@SuppressWarnings("deprecation")
public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
@@ -92,20 +92,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnSharedP
findPreference("ui_category").setEnabled(false);
}
- // Directories
- Preference directoriesPref = findPreference("directories");
- directoriesPref.setOnPreferenceClickListener(
- new OnPreferenceClickListener() {
-
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = new Intent(getApplicationContext(), BrowserActivity.class);
- startActivity(intent);
- setResult(RESULT_RESCAN);
- return true;
- }
- });
-
// Screen orientation
ListPreference screenOrientationPref = (ListPreference) findPreference("screen_orientation");
screenOrientationPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
--
2.1.4
More information about the Android
mailing list