package com.openfarmanager.android.tips; import android.app.Activity; import android.graphics.Point; import android.os.Build; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewTreeObserver; import com.github.amlcurran.showcaseview.ShowcaseView; import com.github.amlcurran.showcaseview.targets.ViewTarget; import com.openfarmanager.android.App; import com.openfarmanager.android.R; import com.openfarmanager.android.controllers.FileSystemController; import com.openfarmanager.android.fragments.MainPanel; import com.openfarmanager.android.model.SelectParams; import com.openfarmanager.android.view.panels.MainToolbar; /** * @author Vlad Namashko */ public class MainTips { private ShowcaseView mShowCaseView; private int mCurrentStep = 0; private FileSystemController mFileSystemController; private MainToolbar mMainToolbarPanel; private View mRootAnchor; private Point mCurrentPathViewPoint; private Activity mActivity; public MainTips(Activity activity, FileSystemController controller, MainToolbar panel) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { return; } mActivity = activity; mFileSystemController = controller; mMainToolbarPanel = panel; mFileSystemController.setInitActivePanel(); init(); } private void init() { mRootAnchor = mActivity.findViewById(App.sInstance.getSettings().isMultiPanelMode() ? R.id.panel_left : R.id.panels_holder); mRootAnchor.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mRootAnchor.getViewTreeObserver().removeGlobalOnLayoutListener(this); mShowCaseView = new ShowcaseView.Builder(mActivity) .setTarget(new ViewTarget(mRootAnchor)) .setOnClickListener(mClickListener) .build(); mCurrentPathViewPoint = new ViewTarget(mActivity.findViewById(R.id.current_path)).getPoint(); mShowCaseView.setStyle(R.style.CustomShowcaseTheme); mShowCaseView.setContentTitle(mActivity.getString(R.string.main_panel)); mShowCaseView.setContentText(mActivity.getString(R.string.main_panel_common)); } }); } private void nextStep() { MainPanel panel = mFileSystemController.getActivePanel(); float density = mActivity.getResources().getDisplayMetrics().density; if (mCurrentStep == 0) { int selectedFiles = panel.select(new SelectParams(SelectParams.SelectionType.NAME, "*", false, false, null, null)); if (selectedFiles == 0) { // skip "selected files" mCurrentStep = 2; nextStep(); return; } int offset = (int) (50 * density); mShowCaseView.setContentText(mActivity.getString(R.string.main_panel_quick_panel)); mShowCaseView.setShowcase(new Point(offset + (int) (32 * density * 2), offset + (int) (32 * density)), true); } else if (mCurrentStep == 1) { mShowCaseView.setContentText(mActivity.getString(R.string.main_panel_size)); mShowCaseView.setShowcase(new ViewTarget(R.id.selected_files_size, mActivity), true); } else if (mCurrentStep == 2) { panel.unselectAll(); panel.invalidate(); // tips for different mode if (App.sInstance.getSettings().isMultiPanelMode()) { mFileSystemController.expandPanel(true); mShowCaseView.setContentText(mActivity.getString(R.string.main_panel_expand)); } else { ViewPager pager = (ViewPager) mActivity.findViewById(R.id.view_pager); if (pager != null) { pager.scrollTo(300, 0); mShowCaseView.setContentText(mActivity.getString(R.string.main_panel_swipe)); } } mShowCaseView.setShowcase(new ViewTarget(mRootAnchor), true); } else if (mCurrentStep == 3) { // back operation if (App.sInstance.getSettings().isMultiPanelMode()) { mFileSystemController.expandPanel(false); } else { ViewPager pager = (ViewPager) mActivity.findViewById(R.id.view_pager); if (pager != null) { pager.scrollTo(0, 0); } } mShowCaseView.setContentTitle(mActivity.getString(R.string.current_path)); mShowCaseView.setContentText(mActivity.getString(R.string.current_path_summary)); mShowCaseView.setShowcase(mCurrentPathViewPoint, true); } else if (mCurrentStep == 4) { mShowCaseView.setContentTitle(mActivity.getString(R.string.tools)); mShowCaseView.setContentText(mActivity.getString(R.string.tools_summary)); mShowCaseView.setShowcase(new ViewTarget(R.id.network, mActivity), true); } else if (mCurrentStep == 5) { mShowCaseView.setContentText(mActivity.getString(R.string.tools_change_directory)); mShowCaseView.setShowcase(new ViewTarget(R.id.change_folder, mActivity), true); } else if (mCurrentStep == 6) { mShowCaseView.setContentTitle(mActivity.getString(R.string.bottom_panel)); mShowCaseView.setContentText(mActivity.getString(R.string.bottom_panel_alt)); mShowCaseView.setShowcase(new ViewTarget(mMainToolbarPanel.getAltView()), true); } else if (mCurrentStep == 7) { mShowCaseView.setContentTitle(mActivity.getString(R.string.bottom_panel)); mShowCaseView.setContentText(mActivity.getString(R.string.bottom_panel_select)); mShowCaseView.setShowcase(new ViewTarget(mMainToolbarPanel.getSelectView()), true); } else if (mCurrentStep == 8) { if (mMainToolbarPanel.getApplicationsView() == null) { mCurrentStep++; nextStep(); return; } mShowCaseView.setContentText(mActivity.getString(R.string.bottom_panel_applications)); mShowCaseView.setShowcase(new ViewTarget(mMainToolbarPanel.getApplicationsView()), true); } else if (mCurrentStep == 9) { if (mMainToolbarPanel.getQuickView() == null) { mCurrentStep++; nextStep(); return; } mShowCaseView.setContentText(mActivity.getString(R.string.bottom_panel_quick_view)); mShowCaseView.setShowcase(new ViewTarget(mMainToolbarPanel.getQuickView()), true); if (mMainToolbarPanel.getMoreView().getWidth() == 0) { // hided mShowCaseView.setButtonText(mActivity.getString(R.string.btn_finish)); mCurrentStep++; } } else if (mCurrentStep == 10) { mShowCaseView.setContentText(mActivity.getString(R.string.bottom_panel_more)); mShowCaseView.setShowcase(new ViewTarget(mMainToolbarPanel.getMoreView()), true); mShowCaseView.setButtonText(mActivity.getString(R.string.btn_finish)); } else { mShowCaseView.hide(); } mCurrentStep++; } private View.OnClickListener mClickListener = new View.OnClickListener() { @Override public void onClick(View v) { try { nextStep(); } catch (Exception e) { // handle unexpected showcase crash mShowCaseView.hide(); } } }; }