package com.openfarmanager.android.view;
import android.content.Context;
import android.os.Handler;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
import android.widget.ListPopupWindow;
import android.widget.TextView;
import com.openfarmanager.android.App;
import com.openfarmanager.android.R;
import com.openfarmanager.android.view.presenters.ActionBarPresenter;
import com.openfarmanager.android.view.presenters.ActionBarPresenterImpl;
import com.openfarmanager.android.view.presenters.view.ActionBarView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static com.openfarmanager.android.fragments.MainPanel.LEFT_PANEL;
/**
* author: Vlad Namashko
*/
public class ActionBar extends FrameLayout implements ActionBarView {
protected int mPanelLocation;
protected View mChangePath;
protected View mAddToBookmarks;
protected View mNetwork;
protected View mHome;
protected TextView mCurrentPathView;
protected String mCurrentPath;
private ActionBarPresenter mActionBarPresenter;
public ActionBar(Context context) {
super(context);
mActionBarPresenter = new ActionBarPresenterImpl(this);
}
public void setPanelLocation(int location) {
mPanelLocation = location;
boolean isLeft = mPanelLocation == LEFT_PANEL;
inflate(getContext(), getLayout(isLeft), this);
bindViews();
updateNavigationItemsVisibility(false, true, true);
}
protected void bindViews() {
mChangePath = findViewById(R.id.change_folder);
mAddToBookmarks = findViewById(R.id.add_to_bookmarks);
mNetwork = findViewById(R.id.network);
mHome = findViewById(R.id.home);
mCurrentPathView = (TextView) findViewById(R.id.current_path);
mChangePath.setOnClickListener(view -> mActionBarPresenter.changePath());
mAddToBookmarks.setOnClickListener(view -> mActionBarPresenter.addBookmark());
mNetwork.setOnClickListener(view -> mActionBarPresenter.openNetwork());
mHome.setOnClickListener(view -> mActionBarPresenter.gotoHome());
mCurrentPathView.setOnLongClickListener(view -> {
final List<String> items = new ArrayList<>(Arrays.asList(mCurrentPath.split("/")));
if (items.size() == 0) {
return false;
}
items.set(0, "/");
items.remove(items.size() - 1);
ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_selectable_list_item, items);
final ListPopupWindow select = new ListPopupWindow(getContext());
select.setBackgroundDrawable(getResources().getDrawable(R.drawable.panel_path_background));
select.setAnchorView(view);
select.setAdapter(adapter);
select.setModal(true);
select.setWidth(400);
select.setOnItemClickListener((parent, view1, pos, id) -> {
select.dismiss();
mActionBarPresenter.openDirectory(TextUtils.join("/", items.subList(0, pos + 1)));
});
select.show();
return false;
});
}
protected int getLayout(boolean isLeft) {
return isLeft ? R.layout.action_bar_left_side : R.layout.action_bar_right_side;
}
public void updateBackground() {
int color = App.sInstance.getSettings().getMainPanelColor();
mChangePath.setBackgroundColor(color);
mAddToBookmarks.setBackgroundColor(color);
mNetwork.setBackgroundColor(color);
mHome.setBackgroundColor(color);
}
public void updateNavigationItemsVisibility(final boolean forceHide, boolean isCopyFolderSupported, boolean isBookmarksSupported) {
mChangePath.setVisibility(!forceHide && isCopyFolderSupported ? View.VISIBLE : View.GONE);
mAddToBookmarks.setVisibility(!forceHide && isBookmarksSupported ? View.VISIBLE : View.GONE);
mNetwork.setVisibility(!forceHide && isCopyFolderSupported ? View.VISIBLE : View.GONE);
boolean isHomeFolderEnabled = App.sInstance.getSettings().isEnableHomeFolder();
mHome.setVisibility(!forceHide && isCopyFolderSupported && isHomeFolderEnabled ?
View.VISIBLE : View.GONE);
}
public void setActive(boolean active) {
if (mCurrentPathView != null) {
mCurrentPathView.setSelected(active);
mCurrentPathView.setBackgroundColor(active ?
App.sInstance.getSettings().getSecondaryColor() : App.sInstance.getSettings().getMainPanelColor());
}
}
public void updateCurrentPath(String absolutePath) {
mCurrentPath = absolutePath;
mCurrentPathView.setText(absolutePath);
}
@Override
public int getPanelLocation() {
return mPanelLocation;
}
}