com.ycdyng.onemultitrial.MultiFragment.AFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.ycdyng.onemultitrial.MultiFragment.AFragment.java

Source

/*
 * Copyright 2016 EastWood Yang
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.ycdyng.onemultitrial.MultiFragment;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.ycdyng.onemulti.MultiFragment;
import com.ycdyng.onemulti.OneMulti;
import com.ycdyng.onemultitrial.OneActivity.AActivity;
import com.ycdyng.onemultitrial.R;

import java.util.List;

public class AFragment extends MultiFragment implements View.OnClickListener {

    private TextView mTitleTextView;
    private Button mStartFragmentBButton;
    private Button mStartFragmentBForResultButton;
    private Button mStartFragmentCAndFinishFragmentAButton;
    private Button mFinishFragmentAButton;
    private Button mFinishActivityAButton;
    private Button mStartAnotherActivityButton;
    private TextView mInfoTextView;

    private long mWaitTime = 2000;
    private long mTouchTime = 0;

    @Override
    protected int getLayoutResourceId() {
        return R.layout.fragment_a;
    }

    @Override
    protected int getThemeResId() {
        return R.style.CustomAppTheme_0;
    }

    @Override
    protected void onCreateView(View rootView, ViewGroup container, Bundle savedInstanceState) {
        mTitleTextView = (TextView) rootView.findViewById(R.id.title_text_view);
        mStartFragmentBButton = (Button) rootView.findViewById(R.id.start_fragment_b_button);
        mStartFragmentBForResultButton = (Button) rootView.findViewById(R.id.start_fragment_b_for_result_button);
        mStartFragmentCAndFinishFragmentAButton = (Button) rootView
                .findViewById(R.id.start_fragment_c_and_finish_fragment_a_button);
        mFinishFragmentAButton = (Button) rootView.findViewById(R.id.finish_fragment_a_button);
        mFinishActivityAButton = (Button) rootView.findViewById(R.id.finish_activity_button);
        mStartAnotherActivityButton = (Button) rootView.findViewById(R.id.start_another_activity_button);
        mInfoTextView = (TextView) rootView.findViewById(R.id.info_text_view);

        mStartFragmentBButton.setOnClickListener(this);
        mStartFragmentBForResultButton.setOnClickListener(this);
        mStartFragmentCAndFinishFragmentAButton.setOnClickListener(this);

        if (getTargetFragment() != null) {
            mTitleTextView.setText("Fragment A (should setResult)");
            mStartFragmentCAndFinishFragmentAButton.setVisibility(View.GONE);
        } else {
            mTitleTextView.setText("Fragment A");
            mStartFragmentCAndFinishFragmentAButton.setVisibility(View.VISIBLE);
            mStartFragmentCAndFinishFragmentAButton.setOnClickListener(this);
        }

        mFinishFragmentAButton.setOnClickListener(this);
        mFinishActivityAButton.setOnClickListener(this);
        mStartAnotherActivityButton.setOnClickListener(this);
        mTitleTextView.postDelayed(new Runnable() {
            @Override
            public void run() {
                setInfo();
            }
        }, 250);

    }

    private void setInfo() {
        String info = "";
        List<Fragment> currentFragments = getActivity().getSupportFragmentManager().getFragments();
        info += "name           added visible detached removed hidden";
        for (int i = 0; i < currentFragments.size(); i++) {
            Fragment fragment = currentFragments.get(i);
            if (fragment != null) {
                info += "\n" + fragment.getClass().getSimpleName() + "   " + fragment.isAdded() + "     "
                        + fragment.isVisible() + "    " + fragment.isDetached() + "         "
                        + fragment.isRemoving() + "        " + fragment.isHidden();
            }
        }
        mInfoTextView.setText(info);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.start_fragment_b_button: {
            if (Build.VERSION.SDK_INT >= 23) {
                if (ContextCompat.checkSelfPermission(mContext,
                        Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(getActivity(),
                            new String[] { Manifest.permission.READ_EXTERNAL_STORAGE }, 10001);
                    return;
                }
            }
            Intent intent = new Intent(getActivity(), BFragment.class);
            startFragment(intent);
            break;
        }
        case R.id.start_fragment_b_for_result_button: {
            Intent intent = new Intent(getActivity(), BFragment.class);
            startFragmentForResult(intent, 100);
            break;
        }
        case R.id.start_fragment_c_and_finish_fragment_a_button: {
            Intent intent = new Intent(getActivity(), CFragment.class);
            startFragment(intent);
            finish();
            break;
        }
        case R.id.finish_fragment_a_button: {
            finish();
            break;
        }
        case R.id.finish_activity_button: {
            finishActivity();
            break;
        }
        case R.id.start_another_activity_button: {
            Intent intent = new Intent(getActivity(), AActivity.class);
            intent.putExtra(FRAGMENT_NAME, BFragment.class.getName());
            startActivity(intent);
            break;
        }
        }
    }

    @Override
    public boolean backPressed() {
        long currentTime = System.currentTimeMillis();
        if ((currentTime - mTouchTime) >= mWaitTime) {
            mTouchTime = currentTime;
            Toast.makeText(mContext, "Push back again !", Toast.LENGTH_SHORT).show();
            return true;
        } else {
            finishActivity();
            return true;
        }
    }

    @Override
    public void onFragmentResult(int requestCode, int resultCode, Intent data) {
        super.onFragmentResult(requestCode, resultCode, data);
        Toast.makeText(getContext(), "onFragmentResult: requestCode " + requestCode + ", resultCode " + resultCode,
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
        case 10001: {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Intent startBIntent = new Intent(getActivity(), BFragment.class);
                startFragment(startBIntent);
            }
            return;
        }
        }
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        Log.d("AFragment", "setUserVisibleHint: " + isVisibleToUser);
    }

}