/** * Copyright (c) 2013, Redsolution LTD. All rights reserved. * * This file is part of Xabber project; you can redistribute it and/or * modify it under the terms of the GNU General Public License, Version 3. * * Xabber is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License, * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.xabber.android.ui.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.EditText; import android.widget.ListView; import android.widget.Spinner; import com.xabber.android.R; import com.xabber.android.data.Application; import com.xabber.android.data.SettingsManager; import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.SavedStatus; import com.xabber.android.data.account.StatusMode; import com.xabber.android.data.entity.AccountJid; import com.xabber.android.data.intent.AccountIntentBuilder; import com.xabber.android.ui.adapter.StatusEditorAdapter; import com.xabber.android.ui.adapter.StatusModeAdapter; import com.xabber.android.ui.color.BarPainter; import com.xabber.android.ui.helper.ToolbarHelper; public class StatusEditActivity extends ManagedListActivity implements OnItemClickListener, Toolbar.OnMenuItemClickListener, View.OnClickListener { private static final String SAVED_TEXT = "com.xabber.android.ui.activity.StatusEditor.SAVED_TEXT"; private static final String SAVED_MODE = "com.xabber.android.ui.activity.StatusEditor.SAVED_MODE"; private AccountJid account; private Spinner statusModeView; private EditText statusTextView; private SavedStatus actionWithItem; private StatusEditorAdapter adapter; private View savedStatusesTextView; public static Intent createIntent(Context context) { return StatusEditActivity.createIntent(context, null); } public static Intent createIntent(Context context, AccountJid account) { return new AccountIntentBuilder(context, StatusEditActivity.class).setAccount(account).build(); } private static AccountJid getAccount(Intent intent) { return AccountIntentBuilder.getAccount(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (isFinishing()) { return; } actionWithItem = null; setContentView(R.layout.activity_status); Toolbar toolbar = ToolbarHelper.setUpDefaultToolbar(this, null, R.drawable.ic_clear_white_24dp); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); toolbar.inflateMenu(R.menu.toolbar_set_status); toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { return onOptionsItemSelected(item); } }); Intent intent = getIntent(); account = StatusEditActivity.getAccount(intent); BarPainter barPainter = new BarPainter(this, toolbar); if (account != null) { barPainter.updateWithAccountName(account); } else { barPainter.setDefaultColor(); } ListView listView = getListView(); listView.setOnItemClickListener(this); registerForContextMenu(listView); adapter = new StatusEditorAdapter(this); View footerView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.status_history_footer, null, false); footerView.findViewById(R.id.clear_status_history_button).setOnClickListener(this); listView.addFooterView(footerView); setListAdapter(adapter); statusTextView = (EditText) findViewById(R.id.status_text); statusModeView = (Spinner) findViewById(R.id.status_icon); statusModeView.setAdapter(new StatusModeAdapter(this)); savedStatusesTextView = findViewById(R.id.saved_statuses_textview); StatusMode statusMode; String statusText; if (savedInstanceState == null) { if (account == null) { statusMode = SettingsManager.statusMode(); statusText = SettingsManager.statusText(); } else { AccountItem accountItem = AccountManager.getInstance().getAccount(account); if (accountItem == null) { Application.getInstance().onError(R.string.NO_SUCH_ACCOUNT); finish(); return; } statusMode = accountItem.getFactualStatusMode(); statusText = accountItem.getStatusText(); } } else { statusMode = StatusMode.valueOf(savedInstanceState.getString(SAVED_MODE)); statusText = savedInstanceState.getString(SAVED_TEXT); } showStatus(statusMode, statusText); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); StatusMode statusMode = (StatusMode) statusModeView.getSelectedItem(); outState.putString(SAVED_MODE, statusMode.name()); outState.putString(SAVED_TEXT, statusTextView.getText().toString()); } private void setStatus(StatusMode statusMode, String statusText) { AccountManager accountManager = AccountManager.getInstance(); if (account != null) { accountManager.setStatus(account, statusMode, statusText); } else { accountManager.setStatus(statusMode, statusText); } } private void showStatus(StatusMode statusMode, String statusText) { for (int index = 0; index < statusModeView.getCount(); index++) { if (statusMode == statusModeView.getAdapter().getItem(index)) { statusModeView.setSelection(index); } } statusTextView.setText(statusText); } @Override protected void onResume() { super.onResume(); adapter.onChange(); setStatusHistoryVisibility(); } private void setStatusHistoryVisibility() { boolean isHistoryEmpty = AccountManager.getInstance().getSavedStatuses().isEmpty(); int visibility = isHistoryEmpty ? View.GONE : View.VISIBLE; getListView().setVisibility(visibility); savedStatusesTextView.setVisibility(visibility); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.toolbar_set_status, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch (item.getItemId()) { case R.id.action_change_status: changeStatus(); return true; } return false; } private void clearStatusHistory() { AccountManager.getInstance().clearSavedStatuses(); adapter.onChange(); setStatusHistoryVisibility(); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; actionWithItem = (SavedStatus) getListView().getItemAtPosition(info.position); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.item_status, menu); } @Override public boolean onContextItemSelected(MenuItem item) { super.onContextItemSelected(item); switch (item.getItemId()) { case R.id.action_select_status: setStatus(actionWithItem.getStatusMode(), actionWithItem.getStatusText()); finish(); return true; case R.id.action_edit_status: showStatus(actionWithItem.getStatusMode(), actionWithItem.getStatusText()); statusTextView.requestFocus(); return true; case R.id.action_remove_status: AccountManager.getInstance().removeSavedStatus(actionWithItem); adapter.onChange(); setStatusHistoryVisibility(); return true; } return false; } private void changeStatus() { StatusMode statusMode = (StatusMode) statusModeView.getSelectedItem(); String statusText = statusTextView.getText().toString(); setStatus(statusMode, statusText); finish(); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { SavedStatus savedStatus = (SavedStatus) parent.getAdapter().getItem(position); setStatus(savedStatus.getStatusMode(), savedStatus.getStatusText()); finish(); } @Override public boolean onMenuItemClick(MenuItem menuItem) { return onOptionsItemSelected(menuItem); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.clear_status_history_button: clearStatusHistory(); default: } } }