diff --git a/README b/README
index ebcfbee..92a6b0e 100644
--- a/README
+++ b/README
@@ -19,13 +19,13 @@
Core features
--(Multiple)Item select
- Open as
+ --Open as
--Rename
--Cut/Paste
--Delete file/folder
--New file/folder
- Add/remove favorites(Currently working on)
- Set home directory(Needs a preference to set/read from)
+ --Add/remove favorites
+ --Set home directory
Forward/Back directory switching(Needs the logic)
The application consists of two activities. The main file manager activity and the settings menu.
diff --git a/build.gradle b/build.gradle
index dad5dab..9a2f4c0 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,9 +9,10 @@ buildscript {
apply plugin: 'android'
dependencies {
- compile 'com.android.support:support-v4:13.0.0'
+ compile 'com.android.support:support-v4:18.0.0'
compile project(':AsyncLoaders')
compile project(':slidingmenu')
+ compile project(':parchment')
}
android {
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 2a1cb63..08b3c9f 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -21,7 +21,6 @@
>
-
@@ -29,6 +28,9 @@
android:name="org.linuxmotion.filemanager.preferences.ApplicationSettings"
android:label="@string/app_name">
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/linuxmotion/filemanager/OpenFileManagerActivity.java b/src/main/java/org/linuxmotion/filemanager/OpenFileManagerActivity.java
index f47b353..3cb7ec5 100644
--- a/src/main/java/org/linuxmotion/filemanager/OpenFileManagerActivity.java
+++ b/src/main/java/org/linuxmotion/filemanager/OpenFileManagerActivity.java
@@ -17,6 +17,8 @@
*/
package org.linuxmotion.filemanager;
+
+import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.app.ListActivity;
@@ -31,6 +33,7 @@
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import org.linuxmotion.asyncloaders.LogWrapper;
+import org.linuxmotion.filemanager.database.DataBaseHelper;
import org.linuxmotion.filemanager.models.MenuAction;
import org.linuxmotion.filemanager.models.adapters.ImageArrayAdapter;
import org.linuxmotion.filemanager.models.baseadapters.ExpandableBaseArrayAdapter;
@@ -45,10 +48,11 @@
import java.io.File;
-public class OpenFileManagerActivity extends ListActivity implements Alerts.GPLAlertClickDispatcher,
+
+public class OpenFileManagerActivity extends Activity implements Alerts.GPLAlertClickDispatcher,
SingleViewFragment.ContextualActionBarMenu, CutPasteFragment.onPasteListener,
SideNavigationFragment.GroupClickCallback, SideNavigationFragment.ChildClickCallback,
- SideNavigationFragment.OnFavoritesCallback {
+ SideNavigationFragment.OnFavoritesCallback, DataBaseHelper.onDatabaseTransactionFinished {
private static final String TAG = OpenFileManagerActivity.class.getSimpleName();
private static final boolean DEBUG = (true || Constants.FULL_DBG);
@@ -59,10 +63,10 @@ public class OpenFileManagerActivity extends ListActivity implements Alerts.GPLA
private SingleViewFragment mSingleView;
private CutPasteFragment mCutPasteFragment;
private SideNavigationFragment mSideNavigationFragment;
- private boolean mDualPane;
+ private boolean mTabletMode = false;
private SlidingMenu mSlidingMenu;
private boolean mAttached = false;
-
+ DataBaseHelper mHelper= new DataBaseHelper();
/**
* Called when the activity is first created.
*/
@@ -72,32 +76,65 @@ public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LogWrapper.Logi(TAG, "onCreate called");
- mDualPane = false;
+ // Setting the content view
+ setContentView(R.layout.layout_main_content);
+ mSingleView = (SingleViewFragment) getFragmentManager().findFragmentById(R.id.main_fragment_container);
+
+ if(findViewById(R.id.sidenavigation_fragment_container) != null){
+ mTabletMode = true;
+ LogWrapper.Logd(TAG, "Starting app in tablet mode");
+ }
+ else{
+ LogWrapper.Logd(TAG, "Starting app in phone mode");
+ }
+ //mTabletMode = true;
+
+
+
+
+ mHelper.initDatabase(this, this);
+ mHelper.open();
+
+
+
+ if (mTabletMode) {
+
- if (mDualPane) {
+ // mSingleView = (SingleViewFragment) getFragmentManager().findFragmentById(R.id.main_fragment_container);
+ mCutPasteFragment = new CutPasteFragment();
+ mSideNavigationFragment = new SideNavigationFragment();
+ FragmentTransaction ft = getFragmentManager().beginTransaction();
+ ft.replace(R.id.main_fragment_container, mSingleView);
+ ft.replace(R.id.sidenavigation_fragment_container, mSideNavigationFragment);
+ ft.replace(R.id.cut_paste_fragment_container, mCutPasteFragment);
+ ft.commit();
+ showHideFragment(mCutPasteFragment, false);
+ //
+
} else {
if (savedInstanceState == null) {
- mSingleView = new SingleViewFragment();
- FragmentTransaction ft = getFragmentManager().beginTransaction();
- ft.replace(android.R.id.content, mSingleView);
- ft.commit();
-
- mSingleView.setContextualActionBarMenuInterface(this);
+ // mSingleView = new SingleViewFragment();
+ // FragmentTransaction ft = getFragmentManager().beginTransaction();
+ // ft.replace(android.R.id.content, mSingleView);
+ // ft.commit();
+ // mSingleView.setContextualActionBarMenuInterface(this);
}
setupSlidingMenu();
- setupFragments();
+
}
+ mSingleView.setContextualActionBarMenuInterface(this);
+ setupFragments();
setupEULA(this);
//always setup the action bar
- setupActionBar();
+ setupActionBar(mTabletMode);
}
@@ -119,6 +156,7 @@ public void onStop() {
super.onStop();
LogWrapper.Logi(TAG, "onStop called");
+ mHelper.close();
}
@@ -126,7 +164,8 @@ public void onStop() {
public void onBackPressed() {
LogWrapper.Logi(TAG, "onBackPressed called");
- if (mDualPane) {
+ if (mTabletMode) {
+ mSingleView.onBackPressed();
} else {
@@ -135,17 +174,18 @@ public void onBackPressed() {
if (mSlidingMenu.isMenuShowing()) {
// if a menu is open it need to closed.
mSlidingMenu.showContent();
- return;
+
} else {
mSingleView.onBackPressed();
- return;
+
}
}
+ return;
}
@@ -177,7 +217,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
break;
case R.id.menu_left: {
sendBroadcast(SingleViewFragment.prepareBroadcast(null, Constants.UPDATE_INTENT,
- new MenuAction(MenuAction.ACTION_BACK)));
+ new MenuAction(MenuAction.ACTION_BACK), null));
}
break;
@@ -187,7 +227,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
break;
case R.id.menu_forward: {
sendBroadcast(SingleViewFragment.prepareBroadcast(null, Constants.UPDATE_INTENT,
- new MenuAction(MenuAction.ACTION_FORWARD)));
+ new MenuAction(MenuAction.ACTION_FORWARD), null));
}
break;
@@ -215,10 +255,12 @@ public void onDestroy() {
}
- private void setupActionBar() {
+ private void setupActionBar(boolean tabletMode) {
- getActionBar().setDisplayHomeAsUpEnabled(true);
- getActionBar().setHomeButtonEnabled(true);
+ if(!tabletMode){
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setHomeButtonEnabled(true);
+ }
getActionBar().setTitle(mSingleView.getCurrentPath());
@@ -279,18 +321,19 @@ private void setupSlidingMenu() {
PreferenceUtils.putHasCompletedLeftNavigationTutorial(this, true);
}
-
+ // Find the fragments that are now in the view hierarchy
+ mCutPasteFragment =
+ (CutPasteFragment) getFragmentManager().findFragmentById(R.id.fragment_cut_paste);
+ mSideNavigationFragment = (SideNavigationFragment)
+ getFragmentManager().findFragmentById(R.id.fragment_side_navigation);
// mSlidingMenu.setOnClosedListener(this);
// mSlidingMenu.setOnOpenedListener(this);
}
private void setupFragments() {
- mCutPasteFragment =
- (CutPasteFragment) getFragmentManager().findFragmentById(R.id.fragment_cut_paste);
+ // Both tablet and phone have the same callbacks
mCutPasteFragment.setPasteListener(this);
- mSideNavigationFragment = (SideNavigationFragment)
- getFragmentManager().findFragmentById(R.id.fragment_side_navigation);
mSideNavigationFragment.setChildCallback(this);
mSideNavigationFragment.setGroupCallback(this);
mSideNavigationFragment.setOnFavoriteAddedCallback(this);
@@ -300,9 +343,11 @@ private void setupFragments() {
@Override
public void OnCutCallback(File[] files) {
- if (mDualPane) {
+ if (mTabletMode) {
+
+
+ showHideFragment(mCutPasteFragment, true);
- return;
} else {
mSlidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
}
@@ -323,7 +368,7 @@ public void OnCutCallback(File[] files) {
@Override
public void OnFirstTimeCutCallback() {
- if (mDualPane) {
+ if (mTabletMode) {
return;
}
@@ -332,8 +377,8 @@ public void OnFirstTimeCutCallback() {
@Override
public void onPaste(File[] files) {
- if (mDualPane) {
-
+ if (mTabletMode) {
+ showHideFragment(mCutPasteFragment, false);
return;
} else {
mSlidingMenu.setMode(SlidingMenu.LEFT);
@@ -345,11 +390,25 @@ public void onPaste(File[] files) {
mSingleView.updateAdapter(mSingleView.getCurrentPath());
}
+ private void showHideFragment(Fragment frag, boolean show) {
+ FragmentTransaction ft = getFragmentManager().beginTransaction();
+ if(show){
+ ft.show(frag);
+ findViewById(R.id.cut_paste_fragment_container).setVisibility(View.VISIBLE);
+ }else{
+
+ ft.hide(frag);
+ findViewById(R.id.cut_paste_fragment_container).setVisibility(View.GONE);
+ }
+
+ ft.commit();
+ }
+
@Override
public void onCancelPaste() {
- if (mDualPane) {
-
+ if (mTabletMode) {
+ showHideFragment(mCutPasteFragment, false);
return;
} else {
mSlidingMenu.setMode(SlidingMenu.LEFT);
@@ -363,7 +422,7 @@ public void onCancelPaste() {
@Override
public boolean OnGroupClick(int groupPosition) {
- if (mDualPane) {
+ if (mTabletMode) {
return false;
} else {
@@ -376,7 +435,7 @@ public boolean OnGroupClick(int groupPosition) {
@Override
public boolean OnChildClick(String childFilePath, int groupPosition, int childInGroup) {
- if (mDualPane) {
+ if (mTabletMode) {
return false;
} else {
@@ -388,26 +447,42 @@ public boolean OnChildClick(String childFilePath, int groupPosition, int childIn
}
}
+ @Override
+ public void OnChildItemLongClicked(int childPosition) {
+
+ }
+
@Override
public void OnFavoriteAdded(String path, int child) {
- if (mDualPane) {
+ if (mTabletMode) {
return;
} else {
}
- PreferenceUtils.putFavorite(this, child, path);
+ mHelper.AddToList(path);
+
+ // PreferenceUtils.putFavorite(this, child, path);
}
@Override
- public void OnFavoriteRemoved(int group, int child) {
- if (mDualPane) {
+ public void OnFavoriteRemoved(String path, int group, int child) {
+ LogWrapper.Logi(TAG, "OnFavoriteRemoved() called");
+ if (mTabletMode) {
return;
} else {
}
+ mHelper.RemoveFromList(path);
+ }
+
+ @Override
+ public String[] OnFavoritesInitialized() {
+ String[] favorites = mHelper.getAllEntries();
+ LogWrapper.Logv(TAG, "Found " + favorites.length + " favorites to add");
+ return favorites;
}
@Override
@@ -417,7 +492,7 @@ public void OnMenuFavoriteCallback(ExpandableBaseArrayAdapter.Child child) {
@Override
public boolean OnRenameCallback() {
- if (mDualPane) {
+ if (mTabletMode) {
} else {
@@ -425,4 +500,22 @@ public boolean OnRenameCallback() {
}
return false;
}
+
+ @Override
+ public void onTransactionFinished(int action) {
+ switch (action){
+ case DataBaseHelper.onDatabaseTransactionFinished.TRANSACTION_ADD:{
+ LogWrapper.Logd(TAG, "Succesfully added favorite to database");
+
+ }break;
+ case DataBaseHelper.onDatabaseTransactionFinished.TRANSACTION_DELETE:{
+ LogWrapper.Logd(TAG, "Succesfully delete favorite to database");
+
+ }break;
+ case DataBaseHelper.onDatabaseTransactionFinished.TRANSACTION_INCOMPLETE:{
+ LogWrapper.Logd(TAG, "Database transaction was incomplete");
+
+ }break;
+ }
+ }
}
diff --git a/src/main/java/org/linuxmotion/filemanager/database/DataBaseHelper.java b/src/main/java/org/linuxmotion/filemanager/database/DataBaseHelper.java
new file mode 100644
index 0000000..cecf07d
--- /dev/null
+++ b/src/main/java/org/linuxmotion/filemanager/database/DataBaseHelper.java
@@ -0,0 +1,155 @@
+package org.linuxmotion.filemanager.database;
+
+import android.content.Context;
+
+import org.linuxmotion.asyncloaders.LogWrapper;
+
+import java.io.File;
+import java.util.List;
+
+public class DataBaseHelper {
+
+ private static final String TAG = DataBaseHelper.class.getSimpleName();
+
+ onDatabaseTransactionFinished mDatabaseTransactionListener = null;
+ Context mContext = null;
+ public interface onDatabaseTransactionFinished{
+ public static final int TRANSACTION_INCOMPLETE = 0;
+ public static final int TRANSACTION_ADD = 1;
+ public static final int TRANSACTION_DELETE = 2;
+ public void onTransactionFinished(int action);
+
+ }
+
+ public void setTransactionFinishedListener(onDatabaseTransactionFinished listener){
+
+ mDatabaseTransactionListener = listener;
+ }
+
+ private static StringDatabase mDatabase;
+
+ public void initDatabase(Context context){
+ mDatabase = new StringDatabase(context);
+ mContext = context;
+
+ }
+
+ public void initDatabase(Context context, onDatabaseTransactionFinished listener){
+ setTransactionFinishedListener(listener);
+ mDatabase = new StringDatabase(context);
+
+ }
+
+ public void updatePhotoList(File[] photos){}
+
+ public void updatePhotoList(String[] photos){}
+
+ /**
+ * Add to the database, ran on a seperate thread
+ * @param favorite
+ */
+ public void AddToList(final String favorite) {
+
+ new Thread(new Runnable(){
+
+ @Override
+ public void run() {
+ long transcode = mDatabase.addString(favorite);
+ LogWrapper.Logi(TAG, "The add transaction code is = " + transcode);
+ if(transcode == StringDatabase.PATH_ERROR || StringDatabase.INSERT_ERROR == transcode || StringDatabase.DATABASE_NOT_OPEN_ERROR == transcode){
+
+ if(mDatabaseTransactionListener != null){
+ LogWrapper.Logi(TAG, "Invoking transaction finished with code = " + onDatabaseTransactionFinished.TRANSACTION_INCOMPLETE);
+ mDatabaseTransactionListener.onTransactionFinished(onDatabaseTransactionFinished.TRANSACTION_INCOMPLETE);
+ }
+
+ }else if(transcode >= 0){
+
+ if(mDatabaseTransactionListener != null){
+ LogWrapper.Logi(TAG,
+ "Invoking transaction finished with code = " + onDatabaseTransactionFinished.TRANSACTION_ADD);
+ mDatabaseTransactionListener.onTransactionFinished(onDatabaseTransactionFinished.TRANSACTION_ADD);
+
+ }
+ }
+ }}).run();
+ }
+
+ /**
+ *
+ * Delete from the database, Ran from another thread
+ * @param favorite
+ */
+ public void RemoveFromList(final String favorite) {
+
+ new Thread(new Runnable(){
+
+ @Override
+ public void run() {
+ int transcode = mDatabase.deleteImage(favorite);
+ LogWrapper.Logi(TAG, "The delete transaction code is = " + transcode);
+ if(transcode > 0){
+ if(mDatabaseTransactionListener != null){
+ LogWrapper.Logi(TAG,
+ "Invoking transaction finished with code = " + onDatabaseTransactionFinished.TRANSACTION_DELETE);
+ mDatabaseTransactionListener.onTransactionFinished(onDatabaseTransactionFinished.TRANSACTION_DELETE);
+ }
+ }else if(transcode == 0 || transcode == StringDatabase.PATH_ERROR ){
+ if(mDatabaseTransactionListener != null){
+ LogWrapper.Logi(TAG,
+ "Invoking transaction finished with code = " + onDatabaseTransactionFinished.TRANSACTION_INCOMPLETE);
+
+ mDatabaseTransactionListener.onTransactionFinished(onDatabaseTransactionFinished.TRANSACTION_INCOMPLETE);
+ }
+
+ }
+
+ }}).run();
+ }
+
+ public Boolean isInDataBase(String path) {
+ if(path == null)return false;
+ return mDatabase.isImagePathPresent(path);
+ }
+
+ public String[] getAllEntries() {
+
+ List im = mDatabase.getAllStrings();
+ int count = im.size();
+ String[] paths = new String[count];
+ for(int i = 0; i < count; i++){
+
+ paths[i] = im.get(i);
+
+ }
+ return paths;
+ }
+
+ public boolean open(){
+ if(mDatabase != null || !mDatabase.isOpen()){
+ mDatabase.open();
+ return true;
+ }
+ return false;
+ }
+
+ public boolean close(){
+
+ if(mDatabase != null || mDatabase.isOpen()){
+
+ mDatabase.close();
+ return true;
+ }
+ return false;
+ }
+
+
+
+
+ public boolean isOpen(){
+ return mDatabase.isOpen();
+ }
+
+
+
+}
diff --git a/src/main/java/org/linuxmotion/filemanager/database/StringDatabase.java b/src/main/java/org/linuxmotion/filemanager/database/StringDatabase.java
new file mode 100644
index 0000000..de6d5b9
--- /dev/null
+++ b/src/main/java/org/linuxmotion/filemanager/database/StringDatabase.java
@@ -0,0 +1,203 @@
+package org.linuxmotion.filemanager.database;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.database.sqlite.SQLiteOpenHelper;
+
+
+import org.linuxmotion.asyncloaders.AeSimpleSHA1;
+import org.linuxmotion.asyncloaders.LogWrapper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class StringDatabase extends SQLiteOpenHelper {
+
+
+ private SQLiteDatabase mDatabase;
+ private Cursor mCursor;
+ // All Static variables
+ // Database Version
+ private static final int DATABASE_VERSION = 1;
+
+ // Database Name
+ private static final String DATABASE_NAME = "selectedImages";
+
+ // Path table name
+ private static final String PATHS_TABLE = "imagepath";
+
+ // Path Table Columns names
+ private static final String KEY_ID = "id";
+ // Path Table Columns names
+ private static final String PATH_ID = "path";
+
+ private static final String TAG = "MyImageDatabase";
+
+ /**
+ * Wrapper function , use defaults when called
+ * @param context
+ */
+ public StringDatabase(Context context) {
+ this(context, DATABASE_NAME, null, DATABASE_VERSION);
+ //mDatabase = this.getWritableDatabase();
+ //this.close();
+ //super(context, name, factory, version);
+ }
+
+ public StringDatabase(Context context, String name, CursorFactory factory,
+ int version) {
+ super(context, name, null, version);
+ //super(context, name, factory, version);
+ }
+
+ public void open(){
+ mDatabase = this.getWritableDatabase();
+
+ }
+
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ LogWrapper.Logd(TAG, "Creating database");
+ // TODO Auto-generated method stub
+ String CREATE_IMAGE_PATH_TABLE = "CREATE TABLE " + PATHS_TABLE + "("
+ + KEY_ID + " INTERGER PRIMARY KEY," + PATH_ID + " TEXT )";
+ db.execSQL(CREATE_IMAGE_PATH_TABLE);
+ //db.close();
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ // Drop older table if existed
+ db.execSQL("DROP TABLE IF EXISTS " + PATHS_TABLE);
+
+ // Create tables again
+ onCreate(db);// Will close the db
+
+ }
+
+
+ public static final int INSERT_ERROR = -1;
+ public static final int PATH_ERROR = -2;
+ public static final long DATABASE_NOT_OPEN_ERROR = -3;
+ /**
+ *
+ * @param path The path to the image to add
+ * @return The row ID of the newly inserted row, -1 if an error occurred while inserting,
or -2 if the path was not present
+ */
+ public synchronized long addString(String path) {
+
+
+ ContentValues values = new ContentValues();
+
+
+
+ if(!isImagePathPresent(path)){ // No need to insert into db if present
+
+ String hash = AeSimpleSHA1.SHA1(path);
+ LogWrapper.Logdb(TAG, "Adding image with the path: " + path + " and hash: " + hash);
+
+ values.put(KEY_ID, hash); // String hash
+ values.put(PATH_ID, path); // String path
+
+ // Inserting Row
+ if(mDatabase == null || mDatabase.isOpen())
+ return mDatabase.insert(PATHS_TABLE, null, values);
+ else
+ return DATABASE_NOT_OPEN_ERROR;
+
+ }
+ return PATH_ERROR;
+ }
+
+ // Getting single contact
+
+
+ // Getting All Contacts
+ public synchronized List getAllStrings() {
+ List pathList = new ArrayList();
+ // Select All Query
+ String selectQuery = "SELECT * FROM " + PATHS_TABLE;
+
+ mCursor = mDatabase.rawQuery(selectQuery, null);
+
+ // looping through all rows and adding to list
+ if (mCursor.moveToFirst()) {
+ do {
+ String path = mCursor.getString(1);
+ // Adding contact to list
+ pathList.add(path);
+ } while (mCursor.moveToNext());
+ }
+ mCursor.close();
+
+ // return contact list
+ return pathList;
+ }
+
+ // Getting contacts Count
+ public synchronized int getImagesCount() {
+ String selectQuery = "SELECT * FROM " + PATHS_TABLE;
+
+
+ mCursor = mDatabase.rawQuery(selectQuery, null);
+ int count = mCursor.getCount();
+ mCursor.close();
+
+ return count;
+ }
+ // Updating single contact
+ public synchronized int updateImage(String contact) {
+ return 0;}
+
+ // Deleting single contact
+ /**
+ *
+ * @param path
+ * @return The error code if no image path is present, the number of rows affected if a whereClause is passed in, or 0 otherwise.
+ */
+ public synchronized int deleteImage(String path) {
+
+ if(isImagePathPresent(path)){
+ String hash = AeSimpleSHA1.SHA1(path);
+ LogWrapper.Logdb(TAG, "Deleting image with name " + path + " and hash " + hash);
+ return mDatabase.delete(PATHS_TABLE, KEY_ID + " = ?", new String[]{hash});
+ }
+
+ return PATH_ERROR;
+
+
+ }
+
+
+ public synchronized boolean isImagePathPresent(String path) {
+
+ // Select All Query
+ String hash = AeSimpleSHA1.SHA1(path);
+ String selectQuery = "SELECT * FROM " + PATHS_TABLE + " WHERE " + KEY_ID + " = \"" + hash +"\"";
+
+ mDatabase = this.getWritableDatabase();
+ mCursor = mDatabase.rawQuery(selectQuery, null);
+ if(mCursor.getCount() > 0){
+ mCursor.moveToFirst();
+ LogWrapper.Logdb(TAG, "Entry is present for " + mCursor.getInt(0));
+ mCursor.close();
+
+ return true; // A key entry was found
+
+ }
+ return false; // A key entry was not found
+ }
+
+
+ public boolean isOpen(){
+
+ return (mDatabase != null ? mDatabase.isOpen() : false);
+
+ }
+
+
+}
diff --git a/src/main/java/org/linuxmotion/filemanager/models/adapters/FileArrayAdapter.java b/src/main/java/org/linuxmotion/filemanager/models/adapters/FileArrayAdapter.java
index 3ed65fb..01c9b3a 100644
--- a/src/main/java/org/linuxmotion/filemanager/models/adapters/FileArrayAdapter.java
+++ b/src/main/java/org/linuxmotion/filemanager/models/adapters/FileArrayAdapter.java
@@ -52,6 +52,7 @@ public class FileArrayAdapter extends BaseArrayAdapter {
public FileArrayAdapter(Context context, File[] files) {
super(context, 0, files);
+
mImageLoader = new ImageLoader(context, R.drawable.ic_menu_gallery);
setupBGImages(context);
diff --git a/src/main/java/org/linuxmotion/filemanager/models/adapters/OpenAsAdapter.java b/src/main/java/org/linuxmotion/filemanager/models/adapters/OpenAsAdapter.java
new file mode 100644
index 0000000..f4c0103
--- /dev/null
+++ b/src/main/java/org/linuxmotion/filemanager/models/adapters/OpenAsAdapter.java
@@ -0,0 +1,50 @@
+package org.linuxmotion.filemanager.models.adapters;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import org.linuxmotion.asyncloaders.LogWrapper;
+import org.linuxmotion.filemanager.R;
+import org.linuxmotion.filemanager.models.baseadapters.BaseArrayAdapter;
+
+/**
+ * Created by john on 7/24/13.
+ */
+public class OpenAsAdapter extends BaseArrayAdapter {
+ private static final String TAG = OpenAsAdapter.class.getSimpleName();
+
+ public OpenAsAdapter(Context context, int textViewResourceId, String[] data) {
+ super(context, textViewResourceId, data);
+ }
+
+ private class Holder{
+ TextView mTextHolder;
+ }
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ LogWrapper.Logi(TAG, "getView() called");
+ Holder holder = new Holder();
+ if(convertView == null){
+
+ LogWrapper.Logv(TAG, "Inflating the convertView");
+ LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ convertView = inflater.inflate(R.layout.layout_list_item_open_as, parent, false);
+ TextView text = (TextView) convertView.findViewById(R.id.list_item_open_as);
+ holder.mTextHolder = text;
+ convertView.setTag(holder);
+ }
+ else{
+ LogWrapper.Logv(TAG, "reusing the convertView");
+ holder = (Holder) convertView.getTag();
+ }
+
+ holder.mTextHolder.setText(mArrayList.get(position));
+
+ return convertView;
+ }
+
+
+}
diff --git a/src/main/java/org/linuxmotion/filemanager/models/baseadapters/BaseArrayAdapter.java b/src/main/java/org/linuxmotion/filemanager/models/baseadapters/BaseArrayAdapter.java
index 2fdadc0..ff88cb9 100644
--- a/src/main/java/org/linuxmotion/filemanager/models/baseadapters/BaseArrayAdapter.java
+++ b/src/main/java/org/linuxmotion/filemanager/models/baseadapters/BaseArrayAdapter.java
@@ -3,6 +3,8 @@
import android.content.Context;
import android.widget.ArrayAdapter;
+import org.linuxmotion.asyncloaders.LogWrapper;
+
import java.util.ArrayList;
/**
@@ -10,19 +12,20 @@
*/
public class BaseArrayAdapter extends ArrayAdapter {
- private static boolean DBG = false;// (true || Constants.FULL_DBG);
- private static String TAG = "FileArrayAdapter";
+ private static final boolean DBG = false;// (true || Constants.FULL_DBG);
+ private static final String TAG = "FileArrayAdapter";
protected ArrayList mArrayList = new ArrayList();
public BaseArrayAdapter(Context context, int textViewResourceId, T[] data) {
super(context, textViewResourceId, data);
-
+ LogWrapper.Logv(TAG, "Creating an adapter from BaseArrayAdapter");
mArrayList.clear();
if (data != null && data.length > 0) {
for (T item : data) {
mArrayList.add(item);
}
+ LogWrapper.Logv(TAG, "Added " + mArrayList.size() + " items");
}
@@ -32,7 +35,14 @@ public BaseArrayAdapter(Context context, int textViewResourceId, T[] data) {
public void clear() {
//super.clear();
if (mArrayList != null) {
+ LogWrapper.Logd(TAG,"Clearing " + mArrayList.size() + " items");
mArrayList.clear();
+ if (mArrayList.size() != 0){
+ // Wtf happened to get here
+ // why did the adapter not clear ??!!
+ LogWrapper.Loge(TAG,"Couldn't clear the adapter");
+ throw new RuntimeException("Couldn't clear the adapter");
+ }
}
}
diff --git a/src/main/java/org/linuxmotion/filemanager/models/fragments/SideNavigationFragment.java b/src/main/java/org/linuxmotion/filemanager/models/fragments/SideNavigationFragment.java
index 76d3815..7001bcb 100644
--- a/src/main/java/org/linuxmotion/filemanager/models/fragments/SideNavigationFragment.java
+++ b/src/main/java/org/linuxmotion/filemanager/models/fragments/SideNavigationFragment.java
@@ -14,7 +14,9 @@
import org.linuxmotion.filemanager.models.adapters.ExpandableDrawerListAdapter;
import org.linuxmotion.filemanager.models.baseadapters.ExpandableBaseArrayAdapter;
import org.linuxmotion.filemanager.preferences.PreferenceUtils;
+import org.linuxmotion.filemanager.utils.Alerts;
+import java.io.File;
import java.util.ArrayList;
/**
@@ -50,8 +52,12 @@ public void onActivityCreated(Bundle savedInstanceState) {
private void setupDrawerListView() {
+
String[] groups = {"Home", "SdCard", "Favorites"};
- String[][] children = {{}, {}, {}};
+ if(mOnFavoriteAdded == null)
+ throw new NullPointerException("Class must implement interface OnFavoriteAdded");
+ String[] favs = mOnFavoriteAdded.OnFavoritesInitialized();
+ String[][] children = {{}, {}, favs};
ArrayList> childrenList = new ArrayList>();
@@ -61,13 +67,16 @@ private void setupDrawerListView() {
// Fill the group array
childrenList.add(new ArrayList());
int j = 0;
- while( !PreferenceUtils.getFavorite(this.getActivity(), j).equals("")){
- childrenList.get(i).add(new ExpandableBaseArrayAdapter.Child(i, j, children[i][j], PreferenceUtils.getFavorite(this.getActivity(), j)));
+
+ while( j < children[i].length ){
+
+ childrenList.get(i).add(new ExpandableBaseArrayAdapter.Child(i, j,new File(children[i][j]).getName(), children[i][j] ));
j++;
}
}
+ LogWrapper.Logd(TAG, "Added " + childrenList.size() + " children");
mDrawerList.setAdapter(new ExpandableDrawerListAdapter(getActivity(), groups, childrenList));
@@ -134,11 +143,20 @@ public boolean onItemLongClick(AdapterView> parent, View view, int position, l
long newId = mDrawerList.getExpandableListPosition(position);
if (ExpandableListView.getPackedPositionType(newId) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
LogWrapper.Logi(TAG, "OnItemLongClicked called on a child view");
- int groupPosition = ExpandableListView.getPackedPositionGroup(newId);
- int childPosition = ExpandableListView.getPackedPositionChild(newId);
+ final int groupPosition = ExpandableListView.getPackedPositionGroup(newId);
+ final int childPosition = ExpandableListView.getPackedPositionChild(newId);
+ mChildCallback.OnChildItemLongClicked(childPosition);
+ ExpandableDrawerListAdapter adapter = (ExpandableDrawerListAdapter) mDrawerList.getExpandableListAdapter();
+ String childPath = ((ExpandableDrawerListAdapter.Child) adapter.getChild(groupPosition, childPosition)).mPath;
// show a alertdialog that asks the user if they want to remove the favorite
+ Alerts.FavoriteRemoveAlertBox(getActivity(), new Alerts.FavoriteRemoveListener() {
+ @Override
+ public void OnFavoriteRemoved(String favorite) {
+ removeFavorite(groupPosition, childPosition);
+ }
+ },childPath);
// You now have everything that you would as if this was an OnChildClickListener()
// Add your logic here.
@@ -174,13 +192,17 @@ public interface GroupClickCallback {
public interface ChildClickCallback {
public boolean OnChildClick(String childFilePath, int groupPosition, int childInGroup);
+
+ void OnChildItemLongClicked(int childPosition);
}
public interface OnFavoritesCallback {
public void OnFavoriteAdded(String path, int child);
- public void OnFavoriteRemoved(int group, int child);
+ public void OnFavoriteRemoved(String path, int group, int child);
+
+ public String[] OnFavoritesInitialized();
}
public void AddFavorite(ExpandableBaseArrayAdapter.Child child) {
@@ -204,16 +226,17 @@ public void AddFavorite(ExpandableBaseArrayAdapter.Child child) {
}
- private void removeFavorite(int group, int child) {
- //mDrawerList.getAdapter().
+ private void removeFavorite( int group, int child) {
+
ExpandableBaseArrayAdapter adapter = (ExpandableBaseArrayAdapter) mDrawerList.getExpandableListAdapter();
+ String path = ((ExpandableBaseArrayAdapter.Child)adapter.getChild(group, child)).mPath;
adapter.removeChild(group, child);
adapter.notifyDataSetChanged();
if (mOnFavoriteAdded == null) {
throw new NullPointerException("Class must implement OnFavoritesCallback");
}
- mOnFavoriteAdded.OnFavoriteRemoved(group, child);
+ mOnFavoriteAdded.OnFavoriteRemoved(path, group, child);
}
diff --git a/src/main/java/org/linuxmotion/filemanager/models/fragments/SingleViewFragment.java b/src/main/java/org/linuxmotion/filemanager/models/fragments/SingleViewFragment.java
index c872a9b..a2603df 100644
--- a/src/main/java/org/linuxmotion/filemanager/models/fragments/SingleViewFragment.java
+++ b/src/main/java/org/linuxmotion/filemanager/models/fragments/SingleViewFragment.java
@@ -3,6 +3,7 @@
import android.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
+import android.app.ListFragment;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
@@ -33,6 +34,7 @@
import org.linuxmotion.asyncloaders.LogWrapper;
import org.linuxmotion.filemanager.R;
+import org.linuxmotion.filemanager.models.ExtendedMimeTypeMap;
import org.linuxmotion.filemanager.models.MenuAction;
import org.linuxmotion.filemanager.models.adapters.ExpandableDrawerListAdapter;
import org.linuxmotion.filemanager.models.adapters.FileArrayAdapter;
@@ -52,7 +54,7 @@
/**
* Created by john on 6/26/13.
*/
-public class SingleViewFragment extends Fragment implements Alerts.deleteAlertClickDispatcher, openFileManagerBroadcastReceiver.openFileManagerReceiverDispatcher {
+public class SingleViewFragment extends ListFragment implements Alerts.deleteAlertClickDispatcher, openFileManagerBroadcastReceiver.openFileManagerReceiverDispatcher {
private static final String TAG = SingleViewFragment.class.getSimpleName();
@@ -86,7 +88,7 @@ public void handleMessage(Message msg) {
switch (msg.what) {
case Constants.REFRESH_UI:
- getActivity().sendBroadcast(prepareBroadcast(mCurrentPath, Constants.UPDATE_INTENT, new MenuAction(MenuAction.ACTION_FORWARD)));
+ getActivity().sendBroadcast(prepareBroadcast(mCurrentPath, Constants.UPDATE_INTENT, new MenuAction(MenuAction.ACTION_FORWARD), null));
//createBroadCast(mCurrentPath);
case Constants.UNKNOWN_FILE_TYPE:
@@ -194,7 +196,7 @@ public void onBackPressed() {
// navigate up
- sendBroadcast(prepareBroadcast(null, Constants.UPDATE_INTENT, new MenuAction(MenuAction.ACTION_UP)));
+ sendBroadcast(prepareBroadcast(null, Constants.UPDATE_INTENT, new MenuAction(MenuAction.ACTION_UP), null));
}
@@ -498,7 +500,7 @@ private void unknown() {
protected FileArrayAdapter createAdapter(String path) {
// Instatitate a adapter object
- return new FileArrayAdapter(this.getActivity(), new File(path));
+ return new FileArrayAdapter(getActivity(), new File(path));
}
@@ -531,6 +533,7 @@ public interface ContextualActionBarMenu{
}
private void setupMainListView() {
+ LogWrapper.Logi(TAG, "setupMainListView() called");
ListAdapter adapter = createAdapter(mCurrentPath);
if (adapter != null) {
@@ -685,6 +688,7 @@ public void onSelectPositiveButton(String newFile) {
}
return true;
case R.id.menu_open_as: {
+ LogWrapper.Logi(TAG, "Calling menu item OPEN_AS");
// need to show an alert dialog
// to manully set the type
// of intent that should be sent
@@ -692,18 +696,48 @@ public void onSelectPositiveButton(String newFile) {
// TEXT
// VIDEO
// PICTURE
+ final File[] f = getCheckedFiles();
+ mode.finish();
+ Alerts.OpenAsAlertBox(getActivity(), new Alerts.OpenAsListener() {
+ @Override
+ public void onSelectTypeText() {
+ LogWrapper.Logi(TAG, "onSelectTypeText called");
+ startOpenAsActivity(f[0], "text/*");
+ }
+
+ @Override
+ public void onSelectTypePictures() {
+ LogWrapper.Logi(TAG, "onSelectTypePictures");
+ startOpenAsActivity(f[0], "image/*");
+ }
+
+ @Override
+ public void onSelectTypeMusic() {
+ LogWrapper.Logi(TAG, "onSelectTypeMusic");
+ startOpenAsActivity(f[0], "audio/*");
+ }
+
+ @Override
+ public void onSelectTypeVideo() {
+
+ LogWrapper.Logi(TAG, "onSelectTypeVideo");
+ startOpenAsActivity(f[0], "video/*");
+ }
+ });
}
return true;
case R.id.menu_favorite: {
+ LogWrapper.Logi(TAG, "Calling menu item FAVORITE");
File[] files = getCheckedFiles();
for (int i = 0; i < files.length; i++) {
- ExpandableBaseArrayAdapter.Child child = new ExpandableBaseArrayAdapter.Child(ExpandableDrawerListAdapter.
- FAVORITE_INDEX, ExpandableDrawerListAdapter.ITEM_NEW,
+ ExpandableBaseArrayAdapter.Child child = new ExpandableBaseArrayAdapter.Child(
+ ExpandableDrawerListAdapter.FAVORITE_INDEX,
+ ExpandableDrawerListAdapter.ITEM_NEW,
files[i].getName(),
files[i].toString());
@@ -715,6 +749,14 @@ public void onSelectPositiveButton(String newFile) {
mode.finish(); // Action picked, so close the CAB
+ }
+ return true;
+ case R.id.menu_home:{
+ LogWrapper.Logi(TAG, "Calling menu item HOME");
+ PreferenceUtils.putHomeDirectory(getActivity(), getCheckedFiles()[0].getPath());
+ Toast.makeText(getActivity(), "Changed home directory to "
+ + getCheckedFiles()[0].getPath(), Toast.LENGTH_SHORT).show();
+ mode.finish();
}
return true;
default:
@@ -750,16 +792,13 @@ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mActionMode.getMenuInflater();
if (mMultiSelected) {
-
if(determineDataType(
new Intent(), getCheckedFiles())){
inflater.inflate(R.menu.menu_context_actions_multiple_items_share, menu);
-
}else {
inflater.inflate(R.menu.menu_context_actions_multiple_items, menu);
}
-
} else {
inflater.inflate(R.menu.menu_context_actions, menu);
@@ -775,6 +814,17 @@ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
}
+ private void startOpenAsActivity(File file, String type) {
+ Intent resourceintent = new Intent(Intent.ACTION_VIEW);
+ resourceintent.setDataAndType(Uri.parse("file://" + file.getPath()), type);
+ try {
+ startActivity(resourceintent);
+ } catch (ActivityNotFoundException e) {
+ e.printStackTrace();
+ mUIRefresher.sendEmptyMessage(Constants.UNKNOWN_FILE_TYPE);
+ }
+ }
+
private boolean determineDataType(Intent shareIntent, File[] checkedFiles) {
@@ -805,7 +855,6 @@ private void deleteSelectedItems() {
private File[] getCheckedFiles() {
LogWrapper.Logi(TAG, "getCheckedFiles()");
- SparseBooleanArray array = mList.getCheckedItemPositions();
ArrayList files = new ArrayList();
LogWrapper.Logi(TAG, "Found " + mList.getCheckedItemCount() + " checked items");
@@ -836,7 +885,7 @@ public void selectDrawerItem(int position) {
LogWrapper.Logv(TAG, "Selecting drawer position" + position);
switch (position) {
case 0: {
- mCurrentPath = Constants.SDCARD_DIR;
+ mCurrentPath = PreferenceUtils.getHomeDirectory(getActivity());
}
break;
case 1: {
@@ -853,16 +902,16 @@ public void selectDrawerItem(int position) {
}
// Tell the UI to update
- sendBroadcast(prepareBroadcast(mCurrentPath, Constants.UPDATE_INTENT, new MenuAction(MenuAction.ACTION_FORWARD)));
+ sendBroadcast(prepareBroadcast(mCurrentPath, Constants.UPDATE_INTENT, new MenuAction(MenuAction.ACTION_FORWARD), null));
// Close the drawer
//mDrawerLayout.closeDrawer(mDrawerList);
}
- public static Intent prepareBroadcast(String f, String type, MenuAction action) {
+ public static Intent prepareBroadcast(String f, String type, MenuAction action, Context context) {
- Intent intent = new Intent(Constants.RESOURCE_VIEW_INTENT);
+ Intent intent = new Intent(type);
if (type.equals(Constants.UPDATE_INTENT)) {
intent = new Intent(Constants.UPDATE_INTENT);
@@ -870,7 +919,14 @@ public static Intent prepareBroadcast(String f, String type, MenuAction action)
intent.putExtra("ACTION", action.getCurrentAction());
} else if (type.equals(Constants.RESOURCE_VIEW_INTENT)) {
- intent.putExtra("RESOURCE", f);
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.putExtra("RESOURCE", f);
+ String ext = ExtendedMimeTypeMap.getFileExtensionFromUrl(f);
+ String itype = Constants.MIME.getMimeTypeFromExtension(ext);
+ LogWrapper.Logd(TAG, "ext = " + ext);
+ LogWrapper.Logd(TAG, "File = " + f);
+ i.setType(itype);
+ intent = i;
}
return intent;
@@ -884,10 +940,10 @@ public void performClick(File f) {
Log.d(TAG, "Sending UI refresh broadcast [dir=" + f.toString() + "]");
PreferenceUtils.resetExitStatus(this.getActivity());
- sendBroadcast(prepareBroadcast(f.getPath(), Constants.UPDATE_INTENT, new MenuAction(MenuAction.ACTION_FORWARD)));
+ sendBroadcast(prepareBroadcast(f.getPath(), Constants.UPDATE_INTENT, new MenuAction(MenuAction.ACTION_FORWARD), null));
} else {
Log.d(TAG, "Sending media broadcast");
- sendBroadcast(prepareBroadcast(f.toString(), Constants.RESOURCE_VIEW_INTENT, null));
+ sendBroadcast(prepareBroadcast(f.toString(), Constants.RESOURCE_VIEW_INTENT, null, getActivity()));
}
@@ -900,7 +956,12 @@ private ActionBar getActionBar() {
}
private void sendBroadcast(Intent i) {
- this.getActivity().sendBroadcast(i);
+ if (i.hasExtra("RESOURCE")){
+ LogWrapper.Logd(TAG, "Starting an activity rather than sending a broadcast");
+ getActivity().startActivity(i);
+ }
+
+ getActivity().sendBroadcast(i);
}
@@ -928,16 +989,15 @@ public void run() {
// clear the adapter
list.clear();
if (files != null && files.length > 0) {
- // TODO: Make this faster for large data sets
// Perceived lag on data sets > 1000
// unkown for smaller data sets
// when perceived lag starts
LogWrapper.Logv(TAG, "Files " + files.length + "");
files = FileUtils.sortFiles(files, mWContext.get());
-
LogWrapper.Logv(TAG, "Files " + files.length + " after sorting");
for (File f : files) {
+ LogWrapper.Logv(TAG, "The file name is: " + f.getName() + " and the full path is " + f.getPath());
list.add(f);
list.notifyDataSetChanged();
}
diff --git a/src/main/java/org/linuxmotion/filemanager/preferences/PreferenceUtils.java b/src/main/java/org/linuxmotion/filemanager/preferences/PreferenceUtils.java
index 9bc76a8..a2807f9 100644
--- a/src/main/java/org/linuxmotion/filemanager/preferences/PreferenceUtils.java
+++ b/src/main/java/org/linuxmotion/filemanager/preferences/PreferenceUtils.java
@@ -150,16 +150,16 @@ public static void putHasCompletedRightCutPasteTutorial(Context context, boolean
}
- public static void putFavorite(Context context, int favoriteNumber, String favorite){
+ public static void putHomeDirectory(Context context, String favorite){
SharedPreferences prefs = context.getSharedPreferences(Constants.OPEN_FILE_MANAGER_PREFERENCES, 0);
SharedPreferences.Editor edit = prefs.edit();
- edit.putString(Constants.FAVORITE_BASE_PREF + favoriteNumber, favorite);
+ edit.putString(Constants.HOME_DIRECTORY_PREF, favorite);
edit.commit();
}
- public static String getFavorite(Context context, int favoriteNumber) {
+ public static String getHomeDirectory(Context context) {
SharedPreferences prefs = context.getSharedPreferences(Constants.OPEN_FILE_MANAGER_PREFERENCES, 0);
- return prefs.getString(Constants.FAVORITE_BASE_PREF + favoriteNumber, "");
+ return prefs.getString(Constants.HOME_DIRECTORY_PREF, Constants.SDCARD_DIR);
}
diff --git a/src/main/java/org/linuxmotion/filemanager/utils/Alerts.java b/src/main/java/org/linuxmotion/filemanager/utils/Alerts.java
index de667b6..d0251a2 100644
--- a/src/main/java/org/linuxmotion/filemanager/utils/Alerts.java
+++ b/src/main/java/org/linuxmotion/filemanager/utils/Alerts.java
@@ -10,13 +10,16 @@
import android.view.View;
import android.widget.EditText;
import android.widget.Switch;
+import android.widget.TextView;
import org.linuxmotion.asyncloaders.LogWrapper;
import org.linuxmotion.filemanager.R;
import org.linuxmotion.filemanager.models.FileDeleteDialogClickListener;
+import org.linuxmotion.filemanager.models.adapters.OpenAsAdapter;
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
/**
* Wrapper class for showing different alerts.
@@ -300,5 +303,86 @@ public void onClick(DialogInterface arg0, int arg1) {
}
+ public interface OpenAsListener {
+ public void onSelectTypeText();
+ public void onSelectTypePictures();
+ public void onSelectTypeMusic();
+ public void onSelectTypeVideo();
+ }
+ public static void OpenAsAlertBox(Context context, final OpenAsListener listener){
+
+
+ String[] dialogs = {"Text","Music", "Video", "Picture"};
+
+ AlertDialog.Builder rename = new AlertDialog.Builder(context);
+ rename.setTitle("Open As");
+ rename.setCancelable(true);
+ //View v = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.layout_dialog_open_as, null, false);
+ //rename.setView(v);
+
+ rename.setAdapter(new OpenAsAdapter(context, 0, dialogs), new OnClickListener(){
+
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ switch (i){
+
+ case 0:{
+ listener.onSelectTypeText();
+ }break;
+ case 1:{
+ listener.onSelectTypeMusic();
+ }break;
+ case 2:{
+ listener.onSelectTypeVideo();
+ }break;
+ case 3:{
+ listener.onSelectTypePictures();
+ }break;
+ }
+
+ }
+ });
+
+ rename.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface arg0, int arg1) {
+ // Do nothing
+
+ }
+
+
+ });
+
+
+ rename.create().show();
+ }
+ public interface FavoriteRemoveListener {
+ public void OnFavoriteRemoved(String favorite);
+ }
+ public static void FavoriteRemoveAlertBox(Context context, final FavoriteRemoveListener listener,final String favorite){
+
+
+ String[] dialogs = {"Text","Music", "Video", "Picture"};
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ builder.setCancelable(true);
+ builder.setNegativeButton("Cancel", new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+
+ }
+ });
+ builder.setPositiveButton("Delete", new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ listener.OnFavoriteRemoved(favorite);
+ }
+ });
+
+ builder.show();
+
+ }
+
}
diff --git a/src/main/java/org/linuxmotion/filemanager/utils/Constants.java b/src/main/java/org/linuxmotion/filemanager/utils/Constants.java
index 940ec30..5c87e32 100644
--- a/src/main/java/org/linuxmotion/filemanager/utils/Constants.java
+++ b/src/main/java/org/linuxmotion/filemanager/utils/Constants.java
@@ -17,8 +17,16 @@
*/
package org.linuxmotion.filemanager.utils;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Environment;
import android.webkit.MimeTypeMap;
+import org.linuxmotion.filemanager.models.ExtendedMimeTypeMap;
+
+import java.io.File;
+
public class Constants {
public static final boolean FULL_DBG = false;
@@ -27,7 +35,7 @@ public class Constants {
public static final String RESOURCE_VIEW_INTENT = "org.linuxmotion.intent.HANDLE_VIEW_RESOURCE";
- public static final String SDCARD_DIR = "/sdcard";
+ public static final String SDCARD_DIR = Environment.getExternalStorageDirectory().getPath();
public static final int REFRESH_UI = 1;
@@ -51,10 +59,12 @@ public class Constants {
public static final String RIGHT_CUT_PASTE_TUTORIAL_PREF = "right_cut_paste_tutorial";
- public static final String FAVORITE_BASE_PREF = "favorite_base_pref_";
+ public static final String HOME_DIRECTORY_PREF = "favorite_base_pref_";
+
+
+ public static ExtendedMimeTypeMap MIME = ExtendedMimeTypeMap.getSingleton();
- public static MimeTypeMap MIME = MimeTypeMap.getSingleton();
}
diff --git a/src/main/java/org/linuxmotion/filemanager/utils/FileUtils.java b/src/main/java/org/linuxmotion/filemanager/utils/FileUtils.java
index ca30959..fef47ef 100644
--- a/src/main/java/org/linuxmotion/filemanager/utils/FileUtils.java
+++ b/src/main/java/org/linuxmotion/filemanager/utils/FileUtils.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.util.Log;
+import org.linuxmotion.asyncloaders.LogWrapper;
import org.linuxmotion.filemanager.preferences.PreferenceUtils;
import java.io.File;
@@ -40,10 +41,10 @@ public static File[] getFilesInDirectory(String directory, Context context) {
File temp = new File(directory);
if (temp.exists()) {
-
-
- if (temp.listFiles() != null) {
- Log.d(TAG, "[Path = " + temp.toString() + " exists");
+ Log.d(TAG, "[Path = " + temp.toString() + " exists");
+ File[] files = temp.listFiles();
+ if (files != null) {
+ LogWrapper.Logd(TAG, "Found " + files.length + " files");
return temp.listFiles();
} else {
// If this point is reached then the directory doesnt contain any
diff --git a/src/main/res/drawable/list_background_slected.xml b/src/main/res/drawable/list_background_slected.xml
new file mode 100644
index 0000000..7fe9ebb
--- /dev/null
+++ b/src/main/res/drawable/list_background_slected.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/res/layout-sw600dp/layout_main_content.xml b/src/main/res/layout-sw600dp/layout_main_content.xml
new file mode 100644
index 0000000..4eae1f3
--- /dev/null
+++ b/src/main/res/layout-sw600dp/layout_main_content.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/res/layout/layout_dialog_open_as.xml b/src/main/res/layout/layout_dialog_open_as.xml
new file mode 100644
index 0000000..d0aaa1b
--- /dev/null
+++ b/src/main/res/layout/layout_dialog_open_as.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+ />
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/res/layout/layout_list_item_open_as.xml b/src/main/res/layout/layout_list_item_open_as.xml
new file mode 100644
index 0000000..59dd691
--- /dev/null
+++ b/src/main/res/layout/layout_list_item_open_as.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/res/layout/layout_main_content.xml b/src/main/res/layout/layout_main_content.xml
new file mode 100644
index 0000000..b9a51eb
--- /dev/null
+++ b/src/main/res/layout/layout_main_content.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/src/main/res/layout/layout_single_main.xml b/src/main/res/layout/layout_single_main.xml
index 3687f1c..4fb9beb 100644
--- a/src/main/res/layout/layout_single_main.xml
+++ b/src/main/res/layout/layout_single_main.xml
@@ -6,7 +6,6 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingLeft="8dp"
android:paddingRight="8dp">
diff --git a/src/main/res/menu/menu_context_actions.xml b/src/main/res/menu/menu_context_actions.xml
index cd756cf..e884406 100644
--- a/src/main/res/menu/menu_context_actions.xml
+++ b/src/main/res/menu/menu_context_actions.xml
@@ -35,4 +35,10 @@
android:icon="@drawable/ic_menu_rating_not_important"
android:showAsAction="ifRoom"/>
+
+
\ No newline at end of file
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index b42cf6d..936dbf5 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -42,5 +42,6 @@
File
Folder
Favorite
+ Home
diff --git a/src/main/res/values/styles.xml b/src/main/res/values/styles.xml
index 6ce89c7..ee24370 100644
--- a/src/main/res/values/styles.xml
+++ b/src/main/res/values/styles.xml
@@ -17,4 +17,10 @@
+
+