mirror of
				https://github.com/SimpleMobileTools/Simple-File-Manager.git
				synced 2025-06-05 22:09:15 +02:00 
			
		
		
		
	add breadcrumbs
This commit is contained in:
		| @@ -0,0 +1,107 @@ | |||||||
|  | package com.simplemobiletools.filemanager; | ||||||
|  |  | ||||||
|  | import android.content.Context; | ||||||
|  | import android.graphics.Point; | ||||||
|  | import android.util.AttributeSet; | ||||||
|  | import android.view.Display; | ||||||
|  | import android.view.LayoutInflater; | ||||||
|  | import android.view.View; | ||||||
|  | import android.view.WindowManager; | ||||||
|  | import android.widget.LinearLayout; | ||||||
|  | import android.widget.TextView; | ||||||
|  |  | ||||||
|  | public class Breadcrumbs extends LinearLayout { | ||||||
|  |     private LayoutInflater mInflater; | ||||||
|  |     private int mDeviceWidth; | ||||||
|  |  | ||||||
|  |     public Breadcrumbs(Context context, AttributeSet attrs) { | ||||||
|  |         super(context, attrs); | ||||||
|  |         init(context); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void init(Context context) { | ||||||
|  |         mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); | ||||||
|  |         final Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); | ||||||
|  |         final Point deviceDisplay = new Point(); | ||||||
|  |         display.getSize(deviceDisplay); | ||||||
|  |         mDeviceWidth = deviceDisplay.x; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onLayout(boolean changed, int l, int t, int r, int b) { | ||||||
|  |         final int paddingTop = getPaddingTop(); | ||||||
|  |         final int paddingLeft = getPaddingLeft(); | ||||||
|  |         final int childRight = getMeasuredWidth() - getPaddingRight(); | ||||||
|  |         final int childBottom = getMeasuredHeight() - getPaddingBottom(); | ||||||
|  |         final int childHeight = childBottom - paddingTop; | ||||||
|  |  | ||||||
|  |         final int usableWidth = mDeviceWidth - paddingLeft - getPaddingRight(); | ||||||
|  |         int maxHeight = 0; | ||||||
|  |         int curWidth; | ||||||
|  |         int curHeight; | ||||||
|  |         int curLeft = paddingLeft; | ||||||
|  |         int curTop = paddingTop; | ||||||
|  |  | ||||||
|  |         final int cnt = getChildCount(); | ||||||
|  |         for (int i = 0; i < cnt; i++) { | ||||||
|  |             final View child = getChildAt(i); | ||||||
|  |  | ||||||
|  |             child.measure(MeasureSpec.makeMeasureSpec(usableWidth, MeasureSpec.AT_MOST), | ||||||
|  |                     MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.AT_MOST)); | ||||||
|  |             curWidth = child.getMeasuredWidth(); | ||||||
|  |             curHeight = child.getMeasuredHeight(); | ||||||
|  |  | ||||||
|  |             if (curLeft + curWidth >= childRight) { | ||||||
|  |                 curLeft = paddingLeft; | ||||||
|  |                 curTop += maxHeight; | ||||||
|  |                 maxHeight = 0; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             child.layout(curLeft, curTop, curLeft + curWidth, curTop + curHeight); | ||||||
|  |             if (maxHeight < curHeight) | ||||||
|  |                 maxHeight = curHeight; | ||||||
|  |  | ||||||
|  |             curLeft += curWidth; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | ||||||
|  |         final int usableWidth = mDeviceWidth - getPaddingLeft() - getPaddingRight(); | ||||||
|  |         int width = 0; | ||||||
|  |         int rowHeight = 0; | ||||||
|  |         int lines = 1; | ||||||
|  |  | ||||||
|  |         final int cnt = getChildCount(); | ||||||
|  |         for (int i = 0; i < cnt; i++) { | ||||||
|  |             final View child = getChildAt(i); | ||||||
|  |             measureChild(child, widthMeasureSpec, heightMeasureSpec); | ||||||
|  |             width += child.getMeasuredWidth(); | ||||||
|  |             rowHeight = child.getMeasuredHeight(); | ||||||
|  |  | ||||||
|  |             if (width / usableWidth > 0) { | ||||||
|  |                 lines++; | ||||||
|  |                 width = child.getMeasuredWidth(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         final int parentWidth = MeasureSpec.getSize(widthMeasureSpec); | ||||||
|  |         final int calculatedHeight = getPaddingTop() + getPaddingBottom() + (rowHeight * lines); | ||||||
|  |         setMeasuredDimension(parentWidth, calculatedHeight); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setInitialBreadcrumb() { | ||||||
|  |         addBreadcrumb("home"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void addBreadcrumb(String text) { | ||||||
|  |         final View view = mInflater.inflate(R.layout.breadcrumb_item, null, false); | ||||||
|  |         final TextView textView = (TextView) view.findViewById(R.id.breadcrumb_text); | ||||||
|  |         textView.setText(text); | ||||||
|  |         addView(view); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void removeBreadcrumb() { | ||||||
|  |         removeView(getChildAt(getChildCount() - 1)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -6,20 +6,24 @@ import android.content.pm.PackageManager; | |||||||
| import android.os.Bundle; | import android.os.Bundle; | ||||||
| import android.os.Environment; | import android.os.Environment; | ||||||
| import android.support.v4.app.ActivityCompat; | import android.support.v4.app.ActivityCompat; | ||||||
| import android.support.v4.app.FragmentManager; |  | ||||||
| import android.support.v7.app.AppCompatActivity; | import android.support.v7.app.AppCompatActivity; | ||||||
| import android.view.Menu; | import android.view.Menu; | ||||||
| import android.view.MenuItem; | import android.view.MenuItem; | ||||||
|  |  | ||||||
|  | import com.simplemobiletools.filemanager.Breadcrumbs; | ||||||
| import com.simplemobiletools.filemanager.Config; | import com.simplemobiletools.filemanager.Config; | ||||||
| import com.simplemobiletools.filemanager.Constants; | import com.simplemobiletools.filemanager.Constants; | ||||||
| import com.simplemobiletools.filemanager.R; | import com.simplemobiletools.filemanager.R; | ||||||
| import com.simplemobiletools.filemanager.Utils; | import com.simplemobiletools.filemanager.Utils; | ||||||
| import com.simplemobiletools.filemanager.fragments.ItemsFragment; | import com.simplemobiletools.filemanager.fragments.ItemsFragment; | ||||||
|  | import com.simplemobiletools.filemanager.models.FileDirItem; | ||||||
|  |  | ||||||
|  | import butterknife.BindView; | ||||||
| import butterknife.ButterKnife; | import butterknife.ButterKnife; | ||||||
|  |  | ||||||
| public class MainActivity extends AppCompatActivity implements ItemsFragment.ItemInteractionListener { | public class MainActivity extends AppCompatActivity implements ItemsFragment.ItemInteractionListener { | ||||||
|  |     @BindView(R.id.breadcrumbs) Breadcrumbs mBreadcrumbs; | ||||||
|  |  | ||||||
|     private static final int STORAGE_PERMISSION = 1; |     private static final int STORAGE_PERMISSION = 1; | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
| @@ -47,13 +51,12 @@ public class MainActivity extends AppCompatActivity implements ItemsFragment.Ite | |||||||
|     private void initRootFileManager() { |     private void initRootFileManager() { | ||||||
|         final String path = Environment.getExternalStorageDirectory().toString(); |         final String path = Environment.getExternalStorageDirectory().toString(); | ||||||
|         openPath(path); |         openPath(path); | ||||||
|  |         mBreadcrumbs.setInitialBreadcrumb(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void openPath(String path) { |     private void openPath(String path) { | ||||||
|         final Bundle bundle = new Bundle(); |         final Bundle bundle = new Bundle(); | ||||||
|         bundle.putString(Constants.PATH, path); |         bundle.putString(Constants.PATH, path); | ||||||
|         if (getSupportFragmentManager().getBackStackEntryCount() > 0) |  | ||||||
|             setTitle(path); |  | ||||||
|  |  | ||||||
|         final ItemsFragment fragment = new ItemsFragment(); |         final ItemsFragment fragment = new ItemsFragment(); | ||||||
|         fragment.setArguments(bundle); |         fragment.setArguments(bundle); | ||||||
| @@ -81,16 +84,11 @@ public class MainActivity extends AppCompatActivity implements ItemsFragment.Ite | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void onBackPressed() { |     public void onBackPressed() { | ||||||
|         final FragmentManager manager = getSupportFragmentManager(); |         final int cnt = getSupportFragmentManager().getBackStackEntryCount(); | ||||||
|         final int cnt = manager.getBackStackEntryCount(); |  | ||||||
|         if (cnt == 1) |         if (cnt == 1) | ||||||
|             finish(); |             finish(); | ||||||
|         else { |         else { | ||||||
|             if (cnt == 2) { |             mBreadcrumbs.removeBreadcrumb(); | ||||||
|                 setTitle(getResources().getString(R.string.app_name)); |  | ||||||
|             } else { |  | ||||||
|                 setTitle(manager.getBackStackEntryAt(cnt - 2).getName()); |  | ||||||
|             } |  | ||||||
|             super.onBackPressed(); |             super.onBackPressed(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -110,7 +108,8 @@ public class MainActivity extends AppCompatActivity implements ItemsFragment.Ite | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void itemClicked(String path) { |     public void itemClicked(FileDirItem item) { | ||||||
|         openPath(path); |         openPath(item.getPath()); | ||||||
|  |         mBreadcrumbs.addBreadcrumb(" -> " + item.getName()); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -163,7 +163,7 @@ public class ItemsFragment extends android.support.v4.app.Fragment | |||||||
|         final FileDirItem item = mItems.get(position); |         final FileDirItem item = mItems.get(position); | ||||||
|         if (item.getIsDirectory()) { |         if (item.getIsDirectory()) { | ||||||
|             if (mListener != null) |             if (mListener != null) | ||||||
|                 mListener.itemClicked(item.getPath()); |                 mListener.itemClicked(item); | ||||||
|         } else { |         } else { | ||||||
|             final String path = item.getPath(); |             final String path = item.getPath(); | ||||||
|             final File file = new File(path); |             final File file = new File(path); | ||||||
| @@ -588,6 +588,6 @@ public class ItemsFragment extends android.support.v4.app.Fragment | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public interface ItemInteractionListener { |     public interface ItemInteractionListener { | ||||||
|         void itemClicked(String path); |         void itemClicked(FileDirItem item); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,21 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <FrameLayout | <RelativeLayout | ||||||
|     android:id="@+id/fragment_holder" |     android:id="@+id/main_screen" | ||||||
|     xmlns:android="http://schemas.android.com/apk/res/android" |     xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|     android:layout_width="match_parent" |     android:layout_width="match_parent" | ||||||
|     android:layout_height="match_parent"/> |     android:layout_height="match_parent"> | ||||||
|  |  | ||||||
|  |     <com.simplemobiletools.filemanager.Breadcrumbs | ||||||
|  |         android:id="@+id/breadcrumbs" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="wrap_content" | ||||||
|  |         android:padding="@dimen/activity_margin"/> | ||||||
|  |  | ||||||
|  |     <FrameLayout | ||||||
|  |         android:id="@+id/fragment_holder" | ||||||
|  |         xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent" | ||||||
|  |         android:layout_below="@+id/breadcrumbs"/> | ||||||
|  |  | ||||||
|  | </RelativeLayout> | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								app/src/main/res/layout/breadcrumb_item.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								app/src/main/res/layout/breadcrumb_item.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <TextView | ||||||
|  |     android:id="@+id/breadcrumb_text" | ||||||
|  |     xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:layout_width="wrap_content" | ||||||
|  |     android:layout_height="wrap_content"/> | ||||||
		Reference in New Issue
	
	Block a user