package com.stardust.scriptdroid.ui.console;
import android.content.Context;
import android.content.ContextWrapper;
import android.support.annotation.Nullable;
import android.view.ContextThemeWrapper;
import android.view.View;
import android.widget.TextView;
import com.stardust.enhancedfloaty.FloatyService;
import com.stardust.enhancedfloaty.ResizableExpandableFloaty;
import com.stardust.enhancedfloaty.ResizableExpandableFloatyWindow;
import com.stardust.scriptdroid.R;
import com.stardust.util.ViewUtil;
/**
* Created by Stardust on 2017/4/20.
*/
public class ConsoleFloaty extends ResizableExpandableFloaty.AbstractResizableExpandableFloaty {
private ContextWrapper mContextWrapper;
private View mResizer, mMoveCursor;
private TextView mTitleView;
private StardustConsole mConsole;
private CharSequence mTitle;
public ConsoleFloaty(StardustConsole console) {
mConsole = console;
setShouldRequestFocusWhenExpand(false);
setInitialX(100);
setInitialY(1000);
}
@Override
public View inflateCollapsedView(FloatyService service, final ResizableExpandableFloatyWindow window) {
ensureContextWrapper(service);
View view = View.inflate(mContextWrapper, R.layout.floating_window_collapse, null);
view.post(new Runnable() {
@Override
public void run() {
window.expand();
}
});
return view;
}
private void ensureContextWrapper(Context context) {
if (mContextWrapper == null) {
mContextWrapper = new ContextThemeWrapper(context, R.style.AppTheme);
}
}
@Override
public View inflateExpandedView(FloatyService service, ResizableExpandableFloatyWindow window) {
ensureContextWrapper(service);
View view = View.inflate(mContextWrapper, R.layout.floating_console_expand, null);
setListeners(view, window);
setUpConsole(view, window);
setInitialMeasure(view);
return view;
}
private void setInitialMeasure(final View view) {
view.post(new Runnable() {
@Override
public void run() {
ViewUtil.setViewMeasure(view, 800, 800);
}
});
}
private void initConsoleTitle(View view) {
mTitleView = (TextView) view.findViewById(R.id.title);
if (mTitle != null) {
mTitleView.setText(mTitle);
}
}
private void setListeners(final View view, final ResizableExpandableFloatyWindow window) {
setWindowOperationIconListeners(view, window);
}
private void setUpConsole(View view, ResizableExpandableFloatyWindow window) {
ConsoleView consoleView = (ConsoleView) view.findViewById(R.id.console);
consoleView.setConsole(mConsole);
consoleView.setWindow(window);
initConsoleTitle(view);
}
private void setWindowOperationIconListeners(View view, final ResizableExpandableFloatyWindow window) {
view.findViewById(R.id.close).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
window.close();
}
});
view.findViewById(R.id.move_or_resize).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mMoveCursor.getVisibility() == View.VISIBLE) {
mMoveCursor.setVisibility(View.GONE);
mResizer.setVisibility(View.GONE);
} else {
mMoveCursor.setVisibility(View.VISIBLE);
mResizer.setVisibility(View.VISIBLE);
}
}
});
view.findViewById(R.id.minimize).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
window.collapse();
}
});
}
@Nullable
@Override
public View getResizerView(View expandedView) {
mResizer = expandedView.findViewById(R.id.resizer);
return mResizer;
}
@Nullable
@Override
public View getMoveCursorView(View expandedView) {
mMoveCursor = expandedView.findViewById(R.id.move_cursor);
return mMoveCursor;
}
public void setTitle(final CharSequence title) {
mTitle = title;
if (mTitleView != null) {
mTitleView.post(new Runnable() {
@Override
public void run() {
mTitleView.setText(title);
}
});
}
}
}