blob: 89cf1bc4c8a4ab1e06d020024daa240af30ca51d [file] [log] [blame]
mariagpuyolea078ed2016-03-07 20:02:10 -08001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.emergency;
17
mariagpuyol232daaf2016-03-09 11:26:00 -080018import android.app.Activity;
mariagpuyolea078ed2016-03-07 20:02:10 -080019import android.app.Fragment;
20import android.app.FragmentManager;
21import android.content.res.Configuration;
mariagpuyolea078ed2016-03-07 20:02:10 -080022import android.support.annotation.LayoutRes;
mariagpuyolea078ed2016-03-07 20:02:10 -080023import android.support.design.widget.TabLayout;
24import android.support.design.widget.TabLayout.TabLayoutOnPageChangeListener;
25import android.support.design.widget.TabLayout.ViewPagerOnTabSelectedListener;
26import android.support.v13.app.FragmentStatePagerAdapter;
27import android.support.v4.view.ViewPager;
mariagpuyolea078ed2016-03-07 20:02:10 -080028import android.support.v7.widget.Toolbar;
mariagpuyolea078ed2016-03-07 20:02:10 -080029import android.view.MenuItem;
30import android.view.View;
31import android.view.ViewGroup;
mariagpuyol58748352016-03-09 15:36:28 -080032
33import com.android.emergency.edit.EditEmergencyContactsFragment;
34import com.android.emergency.edit.EditEmergencyInfoFragment;
35import com.android.emergency.view.ViewEmergencyContactsFragment;
36import com.android.emergency.view.ViewEmergencyInfoFragment;
mariagpuyolea078ed2016-03-07 20:02:10 -080037
38/**
mariagpuyol9be32652016-03-16 12:34:53 -070039 * An activity uses a tab layout to separate personal and medical information
mariagpuyolea078ed2016-03-07 20:02:10 -080040 * from emergency contacts.
41 */
mariagpuyol9be32652016-03-16 12:34:53 -070042public abstract class EmergencyTabActivity extends Activity {
mariagpuyolea078ed2016-03-07 20:02:10 -080043 public static final int INDEX_INFO_TAB = 0;
44 public static final int INDEX_CONTACTS_TAB = 1;
45 private static final int NUMBER_TABS = 2;
46
47 private ViewPagerAdapter mTabsAdapter;
48 private TabLayout mTabLayout;
49
50 private Fragment[] mFragments = new Fragment[NUMBER_TABS];
51
mariagpuyol232daaf2016-03-09 11:26:00 -080052 private void setupTabs() {
mariagpuyolea078ed2016-03-07 20:02:10 -080053 mTabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
54
55 if (mTabsAdapter == null) {
56 // The viewpager that will host the section contents.
57 ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
58 mTabsAdapter = new ViewPagerAdapter(getFragmentManager());
59 viewPager.setAdapter(mTabsAdapter);
60 mTabLayout.setTabsFromPagerAdapter(mTabsAdapter);
61
62 // Set a listener via setOnTabSelectedListener(OnTabSelectedListener) to be notified
63 // when any tab's selection state has been changed.
64 mTabLayout.setOnTabSelectedListener(
65 new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
66
67 // Use a TabLayout.TabLayoutOnPageChangeListener to forward the scroll and selection
68 // changes to this layout
69 viewPager.addOnPageChangeListener(new TabLayoutOnPageChangeListener(mTabLayout));
70 }
mariagpuyolea078ed2016-03-07 20:02:10 -080071 }
72
mariagpuyol9be32652016-03-16 12:34:53 -070073 @Override
74 protected void onResume() {
75 super.onResume();
76 int display_mode = getResources().getConfiguration().orientation;
77
78 if (display_mode == Configuration.ORIENTATION_PORTRAIT) {
79 mTabLayout.setTabMode(TabLayout.MODE_FIXED);
80 mTabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
81 }
82 }
83
mariagpuyolea078ed2016-03-07 20:02:10 -080084 /** Returns the index of the currently selected tab. */
85 public int getSelectedTabPosition() {
86 return mTabLayout.getSelectedTabPosition();
87 }
88
89 @Override
mariagpuyolea078ed2016-03-07 20:02:10 -080090 public void setContentView(@LayoutRes int layoutResID) {
mariagpuyol9be32652016-03-16 12:34:53 -070091 super.setContentView(layoutResID);
mariagpuyol232daaf2016-03-09 11:26:00 -080092 setupTabs();
mariagpuyol9be32652016-03-16 12:34:53 -070093 Toolbar toolbar = (Toolbar) findViewById(R.id.action_bar);
94 toolbar.setTitle(getActivityTitle());
95 toolbar.setNavigationOnClickListener(new View.OnClickListener() {
96 @Override
97 public void onClick(View v) {
mariagpuyolea078ed2016-03-07 20:02:10 -080098 onBackPressed();
mariagpuyol9be32652016-03-16 12:34:53 -070099 }
100 });
mariagpuyolea078ed2016-03-07 20:02:10 -0800101 }
102
103 /** Returns whether the activity is in view mode (true) or in edit mode (false). */
104 public abstract boolean isInViewMode();
105
mariagpuyol9be32652016-03-16 12:34:53 -0700106 /** Returns the activity title. */
107 public abstract String getActivityTitle();
mariagpuyolea078ed2016-03-07 20:02:10 -0800108
109 /** The adapter used to handle the two fragments. */
110 private class ViewPagerAdapter extends FragmentStatePagerAdapter {
111 public ViewPagerAdapter(FragmentManager fm) {
112 super(fm);
113 }
114
115 @Override
116 public Object instantiateItem(ViewGroup container, int position) {
117 Fragment fragment = (Fragment) super.instantiateItem(container, position);
118 mFragments[position] = fragment;
119 return fragment;
120 }
121
122 @Override
123 public void destroyItem(ViewGroup container, int position, Object object) {
124 mFragments[position] = null;
125 }
126
127 @Override
128 public Fragment getItem(int position) {
129 Fragment fragment = mFragments[position];
130 if (fragment != null) {
131 return fragment;
132 }
133 switch (position) {
134 case INDEX_INFO_TAB:
mariagpuyol58748352016-03-09 15:36:28 -0800135 if (isInViewMode()) {
136 return ViewEmergencyInfoFragment.newInstance();
137 } else {
138 return EditEmergencyInfoFragment.newInstance();
139 }
mariagpuyolea078ed2016-03-07 20:02:10 -0800140 case INDEX_CONTACTS_TAB:
mariagpuyol58748352016-03-09 15:36:28 -0800141 if (isInViewMode()) {
142 return ViewEmergencyContactsFragment.newInstance();
143 } else {
144 return EditEmergencyContactsFragment.newInstance();
145 }
mariagpuyolea078ed2016-03-07 20:02:10 -0800146 }
147 return null;
148 }
149
150 @Override
151 public int getCount() {
152 return NUMBER_TABS;
153 }
154
155 @Override
156 public CharSequence getPageTitle(int position) {
157 switch (position) {
158 case INDEX_INFO_TAB:
159 return getResources().getString(R.string.tab_title_info);
160 case INDEX_CONTACTS_TAB:
161 return getResources().getString(R.string.tab_title_contacts);
162 }
163 return null;
164 }
165 }
166}