package com.adafruit.bluefruit.le.connect.app.imagetransfer; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.util.Size; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; import androidx.viewpager.widget.ViewPager; import com.adafruit.bluefruit.le.connect.R; import com.google.android.material.tabs.TabLayout; public class ImageTransferFormatSelectorDialogFragment extends DialogFragment implements ImageTransferFormatSelectorPageFragment.FormatSelectorListener {// AppCompatDialogFragment { // Log private final static String TAG = ImageTransferFormatSelectorDialogFragment.class.getSimpleName(); // Constants private static final String ARG_PARAM_ISEINKMODEENABLED = "isEInkModeEnabled"; private static final String ARG_PARAM_RESOLUTION_WIDTH = "resolutionWidth"; private static final String ARG_PARAM_RESOLUTION_HEIGHT = "resolutionHeight"; public interface FormatSelectorListener { void onResolutionSelected(Size resolution, boolean isEInkMode); } // Params private boolean mIsEInkModeEnabled; private Size mResolution; private FormatSelectorListener mListener; public static ImageTransferFormatSelectorDialogFragment newInstance(boolean isEInkModeEnabled, Size resolution) { ImageTransferFormatSelectorDialogFragment fragment = new ImageTransferFormatSelectorDialogFragment(); Bundle args = new Bundle(); args.putBoolean(ARG_PARAM_ISEINKMODEENABLED, isEInkModeEnabled); args.putInt(ARG_PARAM_RESOLUTION_WIDTH, resolution.getWidth()); args.putInt(ARG_PARAM_RESOLUTION_HEIGHT, resolution.getHeight()); fragment.setArguments(args); return fragment; } public ImageTransferFormatSelectorDialogFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mIsEInkModeEnabled = getArguments().getBoolean(ARG_PARAM_ISEINKMODEENABLED); int resolutionWidth = getArguments().getInt(ARG_PARAM_RESOLUTION_WIDTH); int resolutionHeight = getArguments().getInt(ARG_PARAM_RESOLUTION_HEIGHT); mResolution = new Size(resolutionWidth, resolutionHeight); } } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.dialog_imagetransfer_chooseresolution, container, false); } @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { // Set animations Dialog dialog = getDialog(); if (dialog != null) { //dialog.setTitle(R.string.imagetransfer_resolution_choose); //dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); Window window = dialog.getWindow(); if (window != null) { window.setWindowAnimations(R.style.DialogAnimation); } } // Configure tabs and viewpager ViewPager viewPager = view.findViewById(R.id.viewpager); ResolutionsPageAdapter adapter = new ResolutionsPageAdapter(getChildFragmentManager(), FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, mResolution); viewPager.setAdapter(adapter); TabLayout tabLayout = view.findViewById(R.id.tabLayout); tabLayout.setupWithViewPager(viewPager); // Force titles TabLayout.Tab standardResolutions = tabLayout.getTabAt(0); if (standardResolutions != null) { standardResolutions.setText(R.string.imagetransfer_resolution_mode_standard); } TabLayout.Tab eInkResolutions = tabLayout.getTabAt(1); if (eInkResolutions != null) { eInkResolutions.setText(R.string.imagetransfer_resolution_mode_eink); } // Set initial item viewPager.setCurrentItem(mIsEInkModeEnabled ? 1 : 0); } @Override public void onResume() { super.onResume(); // Set dialog size Dialog dialog = getDialog(); if (dialog != null) { Window window = dialog.getWindow(); if (window != null) { int width = getResources().getDimensionPixelSize(R.dimen.imagetransfer_resolutiondialog_width); int height = getResources().getDimensionPixelSize(R.dimen.imagetransfer_resolutiondialog_height); window.setLayout(width, height); } } } @Override public void onAttach(@NonNull Context context) { super.onAttach(context); if (context instanceof FormatSelectorListener) { mListener = (FormatSelectorListener) context; } else if (getTargetFragment() instanceof FormatSelectorListener) { mListener = (FormatSelectorListener) getTargetFragment(); } else { throw new RuntimeException(context.toString() + " must implement FormatSelectorListener"); } } @Override public void onDetach() { super.onDetach(); mListener = null; } // region ResolutionsPageAdapter static class ResolutionsPageAdapter extends FragmentPagerAdapter { // Params private Size mResolution; //private Fragment mTargetFragment; ResolutionsPageAdapter(@NonNull FragmentManager fm, int behavior, Size resolution) {//}, Fragment targetFragment) { super(fm, behavior); mResolution = resolution; //mTargetFragment = targetFragment; } @Override public int getCount() { return 2; } @NonNull @Override public Fragment getItem(int position) { return ImageTransferFormatSelectorPageFragment.newInstance(position != 0, mResolution); } } // enregion // region FormatSelectorListener @Override public void onResolutionSelected(Size resolution, boolean isEInkMode) { if (mListener != null) { mListener.onResolutionSelected(resolution, isEInkMode); } dismiss(); } // endregion }