1/*
2 * Copyright (C) 2015 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
17package com.android.messaging.ui.conversationlist;
18
19import android.graphics.drawable.ColorDrawable;
20import android.os.Bundle;
21import android.support.v7.app.ActionBar;
22import android.view.Menu;
23import android.view.MenuItem;
24
25import com.android.messaging.R;
26import com.android.messaging.ui.UIIntents;
27import com.android.messaging.util.DebugUtils;
28import com.android.messaging.util.Trace;
29
30public class ConversationListActivity extends AbstractConversationListActivity {
31    @Override
32    protected void onCreate(final Bundle savedInstanceState) {
33        Trace.beginSection("ConversationListActivity.onCreate");
34        super.onCreate(savedInstanceState);
35        setContentView(R.layout.conversation_list_activity);
36        Trace.endSection();
37        invalidateActionBar();
38    }
39
40    @Override
41    protected void updateActionBar(final ActionBar actionBar) {
42        actionBar.setTitle(getString(R.string.app_name));
43        actionBar.setDisplayShowTitleEnabled(true);
44        actionBar.setDisplayHomeAsUpEnabled(false);
45        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
46        actionBar.setBackgroundDrawable(new ColorDrawable(
47                getResources().getColor(R.color.action_bar_background_color)));
48        actionBar.show();
49        super.updateActionBar(actionBar);
50    }
51
52    @Override
53    public void onResume() {
54        super.onResume();
55        // Invalidate the menu as items that are based on settings may have changed
56        // while not in the app (e.g. Talkback enabled/disable affects new conversation
57        // button)
58        supportInvalidateOptionsMenu();
59    }
60
61    @Override
62    public void onBackPressed() {
63        if (isInConversationListSelectMode()) {
64            exitMultiSelectState();
65        } else {
66            super.onBackPressed();
67        }
68    }
69
70    @Override
71    public boolean onCreateOptionsMenu(final Menu menu) {
72        if (super.onCreateOptionsMenu(menu)) {
73            return true;
74        }
75        getMenuInflater().inflate(R.menu.conversation_list_fragment_menu, menu);
76        final MenuItem item = menu.findItem(R.id.action_debug_options);
77        if (item != null) {
78            final boolean enableDebugItems = DebugUtils.isDebugEnabled();
79            item.setVisible(enableDebugItems).setEnabled(enableDebugItems);
80        }
81        return true;
82    }
83
84    @Override
85    public boolean onOptionsItemSelected(final MenuItem menuItem) {
86        switch(menuItem.getItemId()) {
87            case R.id.action_start_new_conversation:
88                onActionBarStartNewConversation();
89                return true;
90            case R.id.action_settings:
91                onActionBarSettings();
92                return true;
93            case R.id.action_debug_options:
94                onActionBarDebug();
95                return true;
96            case R.id.action_show_archived:
97                onActionBarArchived();
98                return true;
99            case R.id.action_show_blocked_contacts:
100                onActionBarBlockedParticipants();
101                return true;
102        }
103        return super.onOptionsItemSelected(menuItem);
104    }
105
106    @Override
107    public void onActionBarHome() {
108        exitMultiSelectState();
109    }
110
111    public void onActionBarStartNewConversation() {
112        UIIntents.get().launchCreateNewConversationActivity(this, null);
113    }
114
115    public void onActionBarSettings() {
116        UIIntents.get().launchSettingsActivity(this);
117    }
118
119    public void onActionBarBlockedParticipants() {
120        UIIntents.get().launchBlockedParticipantsActivity(this);
121    }
122
123    public void onActionBarArchived() {
124        UIIntents.get().launchArchivedConversationsActivity(this);
125    }
126
127    @Override
128    public boolean isSwipeAnimatable() {
129        return !isInConversationListSelectMode();
130    }
131
132    @Override
133    public void onWindowFocusChanged(final boolean hasFocus) {
134        super.onWindowFocusChanged(hasFocus);
135        final ConversationListFragment conversationListFragment =
136                (ConversationListFragment) getFragmentManager().findFragmentById(
137                        R.id.conversation_list_fragment);
138        // When the screen is turned on, the last used activity gets resumed, but it gets
139        // window focus only after the lock screen is unlocked.
140        if (hasFocus && conversationListFragment != null) {
141            conversationListFragment.setScrolledToNewestConversationIfNeeded();
142        }
143    }
144}
145