package com.boardgamegeek.ui; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; import com.boardgamegeek.R; import com.boardgamegeek.events.LocationSelectedEvent; import com.boardgamegeek.events.PlaySelectedEvent; import com.boardgamegeek.events.PlaysCountChangedEvent; import com.boardgamegeek.tasks.RenameLocationTask; import com.boardgamegeek.ui.dialog.EditTextDialogFragment; import com.boardgamegeek.ui.dialog.EditTextDialogFragment.EditTextDialogListener; import com.boardgamegeek.util.ActivityUtils; import com.boardgamegeek.util.DialogUtils; import com.boardgamegeek.util.TaskUtils; import com.boardgamegeek.util.ToolbarUtils; import com.boardgamegeek.util.fabric.DataManipulationEvent; import com.crashlytics.android.answers.Answers; import com.crashlytics.android.answers.ContentViewEvent; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import hugo.weaving.DebugLog; public class LocationActivity extends SimpleSinglePaneActivity { private int playCount; private String locationName; private EditTextDialogFragment editTextDialogFragment; @DebugLog @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Intent intent = getIntent(); locationName = intent.getStringExtra(ActivityUtils.KEY_LOCATION_NAME); setSubtitle(); if (savedInstanceState == null) { Answers.getInstance().logContentView(new ContentViewEvent() .putContentType("Location") .putContentName(locationName)); } EventBus.getDefault().removeStickyEvent(LocationSelectedEvent.class); } @DebugLog private void setSubtitle() { String text = locationName; if (TextUtils.isEmpty(locationName)) { text = getString(R.string.no_location); } setSubtitle(text); } @NonNull @DebugLog @Override protected Bundle onBeforeArgumentsSet(@NonNull Bundle arguments) { final Intent intent = getIntent(); arguments.putInt(PlaysFragment.KEY_MODE, PlaysFragment.MODE_LOCATION); arguments.putString(ActivityUtils.KEY_LOCATION, intent.getStringExtra(ActivityUtils.KEY_LOCATION_NAME)); return arguments; } @NonNull @DebugLog @Override protected Fragment onCreatePane(Intent intent) { return new PlaysFragment(); } @DebugLog @Override protected int getOptionsMenuId() { return R.menu.location; } @DebugLog @Override public boolean onPrepareOptionsMenu(Menu menu) { ToolbarUtils.setActionBarText(menu, R.id.menu_list_count, playCount < 0 ? "" : String.valueOf(playCount)); return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (item.getItemId() == R.id.menu_edit) { showDialog(locationName); return true; } return super.onOptionsItemSelected(item); } @SuppressWarnings("unused") @DebugLog @Subscribe public void onEvent(@NonNull PlaySelectedEvent event) { ActivityUtils.startPlayActivity(this, event); } @SuppressWarnings("unused") @DebugLog @Subscribe(sticky = true) public void onEvent(@NonNull PlaysCountChangedEvent event) { playCount = event.getCount(); supportInvalidateOptionsMenu(); } @SuppressWarnings("unused") @DebugLog @Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(@NonNull RenameLocationTask.Event event) { locationName = event.getLocationName(); getIntent().putExtra(ActivityUtils.KEY_LOCATION_NAME, locationName); setSubtitle(); // recreate fragment to load the list with the new location getSupportFragmentManager().beginTransaction().remove(getFragment()).commit(); createFragment(); editTextDialogFragment = null; if (!TextUtils.isEmpty(event.getMessage()) && rootContainer != null) { Snackbar.make(rootContainer, event.getMessage(), Snackbar.LENGTH_LONG).show(); } } @DebugLog private void showDialog(final String oldLocation) { if (editTextDialogFragment == null) { editTextDialogFragment = EditTextDialogFragment.newInstance(R.string.title_edit_location, (ViewGroup) findViewById(R.id.root_container), new EditTextDialogListener() { @Override public void onFinishEditDialog(String inputText) { if (!TextUtils.isEmpty(inputText)) { DataManipulationEvent.log("Location", "Edit"); RenameLocationTask task = new RenameLocationTask(LocationActivity.this, oldLocation, inputText); TaskUtils.executeAsyncTask(task); } } }); } editTextDialogFragment.setText(oldLocation); DialogUtils.showFragment(this, editTextDialogFragment, "edit_location"); } }