1c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan/* 2c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * Copyright (C) 2011 The Android Open Source Project 3c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * 4c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * Licensed under the Apache License, Version 2.0 (the "License"); 5c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * you may not use this file except in compliance with the License. 6c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * You may obtain a copy of the License at 7c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * 8c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * http://www.apache.org/licenses/LICENSE-2.0 9c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * 10c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * Unless required by applicable law or agreed to in writing, software 11c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * distributed under the License is distributed on an "AS IS" BASIS, 12c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * See the License for the specific language governing permissions and 14c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan * limitations under the License 15c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan */ 16c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 17c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuanpackage com.android.contacts.activities; 18c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 19c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuanimport android.app.ActionBar; 20c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuanimport android.app.Dialog; 211390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuanimport android.content.Context; 22c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuanimport android.content.Intent; 23c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuanimport android.net.Uri; 24c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuanimport android.os.Bundle; 25c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuanimport android.util.Log; 261390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuanimport android.view.LayoutInflater; 271390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuanimport android.view.View; 281390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuanimport android.view.View.OnClickListener; 29c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 30e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.ContactsActivity; 31e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R; 32e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.group.GroupEditorFragment; 33e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.util.DialogManager; 34e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.util.PhoneCapabilityTester; 35e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 36c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuanpublic class GroupEditorActivity extends ContactsActivity 37c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan implements DialogManager.DialogShowingViewActivity { 38c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 39c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan private static final String TAG = "GroupEditorActivity"; 40c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 41c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan public static final String ACTION_SAVE_COMPLETED = "saveCompleted"; 42c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan public static final String ACTION_ADD_MEMBER_COMPLETED = "addMemberCompleted"; 43c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan public static final String ACTION_REMOVE_MEMBER_COMPLETED = "removeMemberCompleted"; 44c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 45c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan private GroupEditorFragment mFragment; 46c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 47c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan private DialogManager mDialogManager = new DialogManager(this); 48c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 49c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan @Override 50c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan public void onCreate(Bundle savedState) { 51c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan super.onCreate(savedState); 52c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan String action = getIntent().getAction(); 53c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 54c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan if (ACTION_SAVE_COMPLETED.equals(action)) { 55c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan finish(); 56c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan return; 57c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 58c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 59c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan setContentView(R.layout.group_editor_activity); 60c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 61c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan ActionBar actionBar = getActionBar(); 62c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan if (actionBar != null) { 631390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan // Inflate a custom action bar that contains the "done" button for saving changes 641390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan // to the group 651390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan LayoutInflater inflater = (LayoutInflater) getSystemService 661390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan (Context.LAYOUT_INFLATER_SERVICE); 671390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan View customActionBarView = inflater.inflate(R.layout.editor_custom_action_bar, 681390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan null); 691390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan View saveMenuItem = customActionBarView.findViewById(R.id.save_menu_item); 701390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan saveMenuItem.setOnClickListener(new OnClickListener() { 711390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan @Override 721390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan public void onClick(View v) { 73ad8e14065996cf8c0f5e0d6bc90c7fa334fc227fMakoto Onuki mFragment.onDoneClicked(); 741390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan } 751390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan }); 761390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan // Show the custom action bar but hide the home icon and title 771390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, 781390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | 791390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan ActionBar.DISPLAY_SHOW_TITLE); 801390f85d3776dd9ad9d38f611f3a0d4ed59f6249Katherine Kuan actionBar.setCustomView(customActionBarView); 81c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 82c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 83c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan mFragment = (GroupEditorFragment) getFragmentManager().findFragmentById( 84c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan R.id.group_editor_fragment); 85c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan mFragment.setListener(mFragmentListener); 86c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan mFragment.setContentResolver(getContentResolver()); 87f81b6d9ba129f0220de93aa9a7426547889755c3Makoto Onuki 88f81b6d9ba129f0220de93aa9a7426547889755c3Makoto Onuki // NOTE The fragment will restore its state by itself after orientation changes, so 89f81b6d9ba129f0220de93aa9a7426547889755c3Makoto Onuki // we need to do this only for a new instance. 90f81b6d9ba129f0220de93aa9a7426547889755c3Makoto Onuki if (savedState == null) { 91f81b6d9ba129f0220de93aa9a7426547889755c3Makoto Onuki Uri uri = Intent.ACTION_EDIT.equals(action) ? getIntent().getData() : null; 92f81b6d9ba129f0220de93aa9a7426547889755c3Makoto Onuki mFragment.load(action, uri, getIntent().getExtras()); 93f81b6d9ba129f0220de93aa9a7426547889755c3Makoto Onuki } 94c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 95c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 96c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan @Override 97c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan protected Dialog onCreateDialog(int id, Bundle args) { 98c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan if (DialogManager.isManagedId(id)) { 99c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan return mDialogManager.onCreateDialog(id, args); 100c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } else { 101c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan // Nobody knows about the Dialog 102c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan Log.w(TAG, "Unknown dialog requested, id: " + id + ", args: " + args); 103c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan return null; 104c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 105c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 106c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 107c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan @Override 108c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan public void onBackPressed() { 109d25d46b30ae006a17a68906e2a774a9691b5f9dbKatherine Kuan // If the change could not be saved, then revert to the default "back" button behavior. 110f30723782e801deaf159aea2443e9507596ef11dDaniel Lehmann if (!mFragment.save()) { 111d25d46b30ae006a17a68906e2a774a9691b5f9dbKatherine Kuan super.onBackPressed(); 112d25d46b30ae006a17a68906e2a774a9691b5f9dbKatherine Kuan } 113c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 114c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 115c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan @Override 116c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan protected void onNewIntent(Intent intent) { 117c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan super.onNewIntent(intent); 118c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 119c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan if (mFragment == null) { 120c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan return; 121c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 122c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 123c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan String action = intent.getAction(); 124c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan if (ACTION_SAVE_COMPLETED.equals(action)) { 125f30723782e801deaf159aea2443e9507596ef11dDaniel Lehmann mFragment.onSaveCompleted(true, intent.getData()); 126c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 127c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 128c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 129c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan private final GroupEditorFragment.Listener mFragmentListener = 130c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan new GroupEditorFragment.Listener() { 131c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan @Override 132c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan public void onGroupNotFound() { 133c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan finish(); 134c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 135c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 136c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan @Override 137c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan public void onReverted() { 138c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan finish(); 139c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 140c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 141c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan @Override 14294f216b210f29abe7fdb96a18a1718e91b628f54Makoto Onuki public void onAccountsNotFound() { 14394f216b210f29abe7fdb96a18a1718e91b628f54Makoto Onuki finish(); 14494f216b210f29abe7fdb96a18a1718e91b628f54Makoto Onuki } 14594f216b210f29abe7fdb96a18a1718e91b628f54Makoto Onuki 14694f216b210f29abe7fdb96a18a1718e91b628f54Makoto Onuki @Override 147a615b7ac82f3512a1689bab3542bbe403ed90923Katherine Kuan public void onSaveFinished(int resultCode, Intent resultIntent) { 1482c1bfd01bcd8f00723110c6964b399b96405a12eBrian Attwell if (resultIntent != null) { 149a615b7ac82f3512a1689bab3542bbe403ed90923Katherine Kuan Intent intent = new Intent(GroupEditorActivity.this, GroupDetailActivity.class); 150a615b7ac82f3512a1689bab3542bbe403ed90923Katherine Kuan intent.setData(resultIntent.getData()); 151c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 152c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan startActivity(intent); 1532c1bfd01bcd8f00723110c6964b399b96405a12eBrian Attwell finish(); 154c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 155c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 156c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan }; 157c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan 158c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan @Override 159c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan public DialogManager getDialogManager() { 160c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan return mDialogManager; 161c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan } 162c6b8afe730255537978f2c938cca6986cae63c34Katherine Kuan} 163