176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler/* 276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Copyright (C) 2014 The Android Open Source Project 376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * 476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * you may not use this file except in compliance with the License. 676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * You may obtain a copy of the License at 776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * 876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * http://www.apache.org/licenses/LICENSE-2.0 976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * 1076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Unless required by applicable law or agreed to in writing, software 1176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 1276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * See the License for the specific language governing permissions and 1476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * limitations under the License. 1576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler */ 1676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 1776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerpackage com.android.email.activity.setup; 1876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 1976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.app.Fragment; 20e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantlerimport android.os.Bundle; 21ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantlerimport android.view.LayoutInflater; 22ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantlerimport android.view.View; 23ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantlerimport android.view.ViewGroup; 24ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantlerimport android.widget.TextView; 25ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 26ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantlerimport com.android.email.R; 27ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantlerimport com.android.email.activity.UiUtilities; 28ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantlerimport com.google.common.annotations.VisibleForTesting; 2976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 3076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler/** 3176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Superclass for setup UI fragments. 3276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Currently holds a super-interface for the callbacks, as well as the state it was launched for so 3376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * we can unwind things correctly when the user navigates the back stack. 3476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler */ 35ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantlerpublic class AccountSetupFragment extends Fragment implements View.OnClickListener { 36e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler private static final String SAVESTATE_STATE = "AccountSetupFragment.state"; 3776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler private int mState; 3876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 39ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler protected View mNextButton; 40ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler protected View mPreviousButton; 41ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 4276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler public interface Callback { 43ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler void onNextButton(); 44ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler void onBackPressed(); 4576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } 4676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 47e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler @Override 48e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler public void onCreate(Bundle savedInstanceState) { 49e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler super.onCreate(savedInstanceState); 50e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler if (savedInstanceState != null) { 51e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler mState = savedInstanceState.getInt(SAVESTATE_STATE); 52e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler } 53e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler } 54e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler 55e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler @Override 56e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler public void onSaveInstanceState(Bundle outState) { 57e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler super.onSaveInstanceState(outState); 58e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler outState.putInt(SAVESTATE_STATE, mState); 59e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler } 60e8fe78062d5d5ab9df2a75bdf324567ec8b95a65Tony Mantler 6176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler public void setState(int state) { 6276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler mState = state; 6376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } 6476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 6576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler public int getState() { 6676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler return mState; 6776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } 68ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 69ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler /** 70ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * This method wraps the given content layout with the chrome appropriate for the account setup 71ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * flow. It also attaches itself as a click handler to the previous and next buttons. 72ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * 73ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * @param inflater LayoutInflater scoped to the appropriate context 74ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * @param container ViewGroup to inflate the view into 75ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * @param contentLayout Resource ID of the main content layout to insert into the template 76ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * @param headline Resource ID of the headline string 77ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * @return Fully inflated view hierarchy. 78ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler */ 79ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler protected View inflateTemplatedView(final LayoutInflater inflater, final ViewGroup container, 80ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler final int contentLayout, final int headline) { 81ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler final View template = inflater.inflate(R.layout.account_setup_template, container, false); 82ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 83ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler TextView headlineView = UiUtilities.getView(template, R.id.headline); 840dae4d3ffb65eb23d5a2ea19acd4603cfba914cdMartin Hibdon if (headline > 0) { 850dae4d3ffb65eb23d5a2ea19acd4603cfba914cdMartin Hibdon headlineView.setText(headline); 860dae4d3ffb65eb23d5a2ea19acd4603cfba914cdMartin Hibdon headlineView.setVisibility(View.VISIBLE); 870dae4d3ffb65eb23d5a2ea19acd4603cfba914cdMartin Hibdon } else { 880dae4d3ffb65eb23d5a2ea19acd4603cfba914cdMartin Hibdon headlineView.setVisibility(View.GONE); 890dae4d3ffb65eb23d5a2ea19acd4603cfba914cdMartin Hibdon } 90ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 91ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler final ViewGroup contentContainer = 92ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler (ViewGroup) template.findViewById(R.id.setup_fragment_content); 93ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler inflater.inflate(contentLayout, contentContainer, true); 94ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 95ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler mNextButton = UiUtilities.getView(template, R.id.next); 96ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler mNextButton.setOnClickListener(this); 97ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler mPreviousButton = UiUtilities.getView(template, R.id.previous); 98ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler mPreviousButton.setOnClickListener(this); 99ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler return template; 100ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler } 101ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 102ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler @Override 103ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler public void onClick(View v) { 104ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler final int viewId = v.getId(); 105ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler final Callback callback = (Callback) getActivity(); 106ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 107ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler if (viewId == R.id.next) { 108ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler callback.onNextButton(); 109ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler } else if (viewId == R.id.previous) { 110ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler callback.onBackPressed(); 111ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler } 112ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler } 113ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 114ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler public void setNextButtonEnabled(boolean enabled) { 115ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler if (mNextButton != null) { 116ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler mNextButton.setEnabled(enabled); 117ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler } 118ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler } 119ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 120cc82c7bae27cdee49f3536ce056c809ce92b7427Tony Mantler public boolean isNextButtonEnabled() { 121cc82c7bae27cdee49f3536ce056c809ce92b7427Tony Mantler return mNextButton.isEnabled(); 122cc82c7bae27cdee49f3536ce056c809ce92b7427Tony Mantler } 123cc82c7bae27cdee49f3536ce056c809ce92b7427Tony Mantler 124cc82c7bae27cdee49f3536ce056c809ce92b7427Tony Mantler 125ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler /** 126ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * Set visibility of the "previous" button 127ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * @param visibility {@link View#INVISIBLE}, {@link View#VISIBLE}, {@link View#GONE} 128ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler */ 129ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler public void setPreviousButtonVisibility(int visibility) { 130ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler mPreviousButton.setVisibility(visibility); 131ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler } 132ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler 133ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler /** 134ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * Set the visibility of the "next" button 135ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler * @param visibility {@link View#INVISIBLE}, {@link View#VISIBLE}, {@link View#GONE} 136ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler */ 137ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler public void setNextButtonVisibility(int visibility) { 138ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler mNextButton.setVisibility(visibility); 139ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler } 14076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler} 141