1 /*
2  * Copyright (C) 2011 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  */
16 
17 package com.android.contacts.activities;
18 
19 import android.app.ActionBar;
20 import android.content.ContentUris;
21 import android.content.Intent;
22 import android.net.Uri;
23 import android.os.Bundle;
24 import android.provider.ContactsContract.Groups;
25 import android.text.TextUtils;
26 import android.view.Menu;
27 import android.view.MenuInflater;
28 import android.view.MenuItem;
29 import android.view.View;
30 import android.view.View.OnClickListener;
31 
32 import com.android.contacts.ContactsActivity;
33 import com.android.contacts.R;
34 import com.android.contacts.group.GroupDetailDisplayUtils;
35 import com.android.contacts.group.GroupDetailFragment;
36 import com.android.contacts.common.model.AccountTypeManager;
37 import com.android.contacts.common.model.account.AccountType;
38 
39 public class GroupDetailActivity extends ContactsActivity {
40 
41     private static final String TAG = "GroupDetailActivity";
42 
43     private boolean mShowGroupSourceInActionBar;
44 
45     private String mAccountTypeString;
46     private String mDataSet;
47 
48     private GroupDetailFragment mFragment;
49 
50     @Override
onCreate(Bundle savedState)51     public void onCreate(Bundle savedState) {
52         super.onCreate(savedState);
53 
54         // TODO: Create Intent Resolver to handle the different ways users can get to this list.
55         // TODO: Handle search or key down
56 
57         setContentView(R.layout.group_detail_activity);
58 
59         mShowGroupSourceInActionBar = getResources().getBoolean(
60                 R.bool.config_show_group_action_in_action_bar);
61 
62         mFragment = (GroupDetailFragment) getFragmentManager().findFragmentById(
63                 R.id.group_detail_fragment);
64         mFragment.setListener(mFragmentListener);
65         mFragment.setShowGroupSourceInActionBar(mShowGroupSourceInActionBar);
66         mFragment.loadGroup(getIntent().getData());
67         mFragment.closeActivityAfterDelete(true);
68 
69         // We want the UP affordance but no app icon.
70         ActionBar actionBar = getActionBar();
71         if (actionBar != null) {
72             actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE,
73                     ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE
74                     | ActionBar.DISPLAY_SHOW_HOME);
75         }
76     }
77 
78     private final GroupDetailFragment.Listener mFragmentListener =
79             new GroupDetailFragment.Listener() {
80 
81         @Override
82         public void onGroupSizeUpdated(String size) {
83             getActionBar().setSubtitle(size);
84         }
85 
86         @Override
87         public void onGroupTitleUpdated(String title) {
88             getActionBar().setTitle(title);
89         }
90 
91         @Override
92         public void onAccountTypeUpdated(String accountTypeString, String dataSet) {
93             mAccountTypeString = accountTypeString;
94             mDataSet = dataSet;
95             invalidateOptionsMenu();
96         }
97 
98         @Override
99         public void onEditRequested(Uri groupUri) {
100             final Intent intent = new Intent(GroupDetailActivity.this, GroupEditorActivity.class);
101             intent.setData(groupUri);
102             intent.setAction(Intent.ACTION_EDIT);
103             startActivity(intent);
104         }
105 
106         @Override
107         public void onContactSelected(Uri contactUri) {
108             Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
109             startActivity(intent);
110         }
111 
112     };
113 
114     @Override
onCreateOptionsMenu(Menu menu)115     public boolean onCreateOptionsMenu(Menu menu) {
116         super.onCreateOptionsMenu(menu);
117         if (mShowGroupSourceInActionBar) {
118             MenuInflater inflater = getMenuInflater();
119             inflater.inflate(R.menu.group_source, menu);
120         }
121         return true;
122     }
123 
124     @Override
onPrepareOptionsMenu(Menu menu)125     public boolean onPrepareOptionsMenu(Menu menu) {
126         if (!mShowGroupSourceInActionBar) {
127             return false;
128         }
129         MenuItem groupSourceMenuItem = menu.findItem(R.id.menu_group_source);
130         if (groupSourceMenuItem == null) {
131             return false;
132         }
133         final AccountTypeManager manager = AccountTypeManager.getInstance(this);
134         final AccountType accountType =
135                 manager.getAccountType(mAccountTypeString, mDataSet);
136         if (TextUtils.isEmpty(mAccountTypeString)
137                 || TextUtils.isEmpty(accountType.getViewGroupActivity())) {
138             groupSourceMenuItem.setVisible(false);
139             return false;
140         }
141         View groupSourceView = GroupDetailDisplayUtils.getNewGroupSourceView(this);
142         GroupDetailDisplayUtils.bindGroupSourceView(this, groupSourceView,
143                 mAccountTypeString, mDataSet);
144         groupSourceView.setOnClickListener(new OnClickListener() {
145             @Override
146             public void onClick(View v) {
147                 final Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI,
148                         mFragment.getGroupId());
149                 final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
150                 intent.setClassName(accountType.syncAdapterPackageName,
151                         accountType.getViewGroupActivity());
152                 startActivity(intent);
153             }
154         });
155         groupSourceMenuItem.setActionView(groupSourceView);
156         groupSourceMenuItem.setVisible(true);
157         return true;
158     }
159 
160     @Override
onOptionsItemSelected(MenuItem item)161     public boolean onOptionsItemSelected(MenuItem item) {
162         switch (item.getItemId()) {
163             case android.R.id.home:
164                 Intent intent = new Intent(this, PeopleActivity.class);
165                 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
166                 startActivity(intent);
167                 finish();
168                 return true;
169             default:
170                 break;
171         }
172         return super.onOptionsItemSelected(item);
173     }
174 }
175