package com.patloew.countries.ui.detail; import android.databinding.Observable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.graphics.drawable.DrawableCompat; import android.view.Menu; import android.view.MenuItem; import com.patloew.countries.BR; import com.patloew.countries.R; import com.patloew.countries.databinding.ActivityDetailBinding; import com.patloew.countries.ui.base.BaseActivity; import com.patloew.countries.ui.base.navigator.Navigator; import org.parceler.Parcels; /* Copyright 2016 Patrick Löwenstein * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ public class DetailActivity extends BaseActivity<ActivityDetailBinding, DetailMvvm.ViewModel> implements DetailMvvm.View { private Menu menu = null; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); activityComponent().inject(this); setAndBindContentView(savedInstanceState, R.layout.activity_detail); setSupportActionBar(binding.toolbar); getSupportActionBar().setTitle(R.string.toolbar_title_detail); getSupportActionBar().setDisplayHomeAsUpEnabled(true); viewModel.update(Parcels.unwrap(getIntent().getParcelableExtra(Navigator.EXTRA_ARG)), false); viewModel.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { @Override public void onPropertyChanged(Observable observable, int propertyId) { if(propertyId == BR.bookmarkDrawable && menu != null) { MenuItem favoriteItem = menu.findItem(R.id.menu_item_favorite); favoriteItem.setIcon(viewModel.getBookmarkDrawable()); tintMenuIcon(favoriteItem); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_details, menu); this.menu = menu; MenuItem favoriteItem = menu.findItem(R.id.menu_item_favorite); MenuItem mapItem = menu.findItem(R.id.menu_item_maps); favoriteItem.setIcon(viewModel.getBookmarkDrawable()); tintMenuIcon(favoriteItem); tintMenuIcon(mapItem); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case android.R.id.home: { finish(); break; } case R.id.menu_item_favorite: { viewModel.onBookmarkClick(null); break; } case R.id.menu_item_maps: { viewModel.onMapClick(null); break; } } return super.onOptionsItemSelected(item); } private static void tintMenuIcon(MenuItem menuItem) { Drawable favoriteIcon = DrawableCompat.wrap(menuItem.getIcon().mutate()); DrawableCompat.setTint(favoriteIcon, 0xFFFFFFFF); menuItem.setIcon(favoriteIcon); } }