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