add breadcrumbs
This commit is contained in:
parent
a03578d055
commit
31a4f65cc9
|
@ -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/main_screen"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="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"
|
android:id="@+id/fragment_holder"
|
||||||
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"
|
||||||
|
android:layout_below="@+id/breadcrumbs"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
|
@ -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"/>
|
Loading…
Reference in New Issue