package com.basic.security.activity.helper; import android.os.SystemClock; import android.support.v4.app.FragmentManager; import android.view.View; import com.basic.security.base.BaseApplication; import com.basic.security.base.BaseFragment; import com.basic.security.fragment.CameraFragment; import com.basic.security.manager.FaceTitleAndTipsManager; import com.basic.security.utils.KeyboardUtil; import org.androidannotations.annotations.EActivity; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @EActivity public abstract class MaFragments extends MaBase { public BaseFragment currentFragment; public List fragments = new ArrayList<>(); BaseFragment previewFragment; public abstract void toggleFaceComponent(BaseFragment showFragment); public abstract void toggleVideoView(BaseFragment showFragment); public abstract void toggleCamera(BaseFragment showFragment); public abstract void toggleToolbarButtons(BaseFragment showFragment); public abstract void refreshCurrentFragmentShowTime(BaseFragment showFragment); public abstract void refreshCurrentFragmentShowTime(); public abstract void toggleIdCardPhoneComponent(BaseFragment showFragment); public abstract void toggleBackgroundAndBorderComponent(BaseFragment showFragment); public abstract void toggleSystemSettingTabsComponent(BaseFragment showFragment); public abstract void toggleSystemSettingHintTabsComponent(BaseFragment showFragment); public abstract void togglePersonManagerComponent(BaseFragment showFragment); public void showFragment(BaseFragment showFragment) { if (showFragment == fragment_su_logged_ic_wait_face || showFragment == fragment_su_logged_nic_wait_face) { BaseFragment.detectedResult = null; BaseApplication.getApplication().activity.fragment_face_detail.setPerson(null); BaseApplication.getApplication().activity.fragment_person_identity.setIdentityWithPerson(null); } if (showFragment == fragment_su_auto_wait_face) { BaseFragment.detectedResult = null; } showFragment(showFragment, false); } // @UiThread public void showFragment(final BaseFragment showFragment, boolean forceRefresh) { previewFragment = currentFragment; // LogFileUtils.logStacktraceToFile(this); previewFragment = currentFragment; if (currentFragment == fragment_home) { System.out.println(""); } BaseApplication.getApplication().activity.runOnUiThread(new Runnable() { @Override public void run() { // currentFragmentTextView.setText(showFragment.toString().split("_")[0]); if (currentFragment == showFragment && !forceRefresh) { return; } refreshCurrentFragmentShowTime(showFragment); togglePasswordOpenDoorFragment(showFragment); toggleFaceComponent(showFragment); toggleCamera(showFragment); toggleVideoView(showFragment); toggleToolbarButtons(showFragment); toggleIdCardPhoneComponent(showFragment); toggleBackgroundAndBorderComponent(showFragment); toggleSystemSettingTabsComponent(showFragment); KeyboardUtil.hideSoftKeyboard(); for (BaseFragment fragment : fragments) { if (fragment != showFragment) { hideOneFragment(fragment); } } SystemClock.sleep(100); for (BaseFragment fragment : fragments) { if (fragment == showFragment) { hideOneFragment(fragment); showOneFragment(fragment); } } toggleSystemSettingHintTabsComponent(showFragment); togglePersonManagerComponent(showFragment); if (previewFragment != fragment_su_auto_wait_face && previewFragment != fragment_door_access_result && previewFragment != fragment_su_auto_wait_admin ) { FaceTitleAndTipsManager.clearFaceTitle(); fragment_camera.drawFaceRect(CameraFragment.lastDetectedResult); } } }); } private void togglePasswordOpenDoorFragment(BaseFragment showFragment) { if (showFragment == fragment_su_auto_wait_face || showFragment == fragment_door_access_result || showFragment == fragment_su_auto_wait_admin // || showFragment == fragment_home ) { showOneFragment(fragment_password_open_door); } else { hideOneFragment(fragment_password_open_door); fragment_password_open_door.hideKeyboard(); } } public void showOneFragment(BaseFragment fragment) { if (!fragment.isShow || !fragment.getUserVisibleHint()) { View view = fragment.getView(); if (view != null) { view.setVisibility(View.VISIBLE); } fragment.show(); FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction() // .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .show(fragment) .commitAllowingStateLoss(); fragment.setUserVisibleHint(true); } } public void hideOneFragment(BaseFragment fragment) { if (fragment.isShow || fragment.getUserVisibleHint()) { View view = fragment.getView(); if (view != null) { view.setVisibility(View.INVISIBLE); } fragment.hide(); FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction() .hide(fragment) .commitAllowingStateLoss(); fragment.setUserVisibleHint(false); } } public void addFragment(BaseFragment... fragmentList) { for (BaseFragment fragment : fragmentList) { if (fragment != fragment_home) { hideOneFragment(fragment); } } fragments.addAll(Arrays.asList(fragmentList)); } public void addFragments() { addFragment( fragment_account_setting, fragment_base_setting, fragment_device_setting, fragment_cluster_setting, fragment_admin_face_login, fragment_admin_password_login, fragment_home, fragment_rule_detail, fragment_face_detail_time, fragment_rule_list, fragment_su_auto_ic_compare_success, fragment_su_auto_ic_wait_idcard, fragment_su_logged_ic_compare_success, fragment_su_logged_ic_wait_face, fragment_su_logged_ic_wait_idcard, fragment_su_logged_nic_wait_face, fragment_su_logged_nic_wait_detail, fragment_su_auto_wait_admin, fragment_su_auto_wait_face, fragment_person_manage, fragment_door_access_fail, fragment_door_access_result, fragment_visit_record_list, fragment_door_access_success, fragment_door_access_confirm, fragment_sign_up_success, fragment_su_logged_wait_face, fragment_su_auto_nic_wait_detail, fragment_hint_tab, fragment_hint_door_access, fragment_hint_recognize, fragment_hint_sign_up, fragment_time_rule, fragment_business_person, fragment_time_rule_add, fragment_visitor_model ); } }