package com.laowch.githubtrends.ui; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.ActionBar; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.support.v7.widget.helper.ItemTouchHelper; import android.view.Menu; import android.view.MenuItem; import com.laowch.githubtrends.Constants; import com.laowch.githubtrends.R; import com.laowch.githubtrends.helper.OnStartDragListener; import com.laowch.githubtrends.helper.SimpleItemTouchHelperCallback; import com.laowch.githubtrends.utils.AnalyticsHelper; import com.laowch.githubtrends.utils.IntentUtils; import com.laowch.githubtrends.utils.LanguageHelper; import java.util.Arrays; /** * Created by lao on 15/9/28. */ public class CustomLanguagesActivity extends BaseActivity implements OnStartDragListener { final BroadcastReceiver languagesChangedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { updateView(); } }; private ItemTouchHelper mItemTouchHelper; CustomLanguageAdapter adapter; int mode; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_simple_recycler_view); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); adapter = new CustomLanguageAdapter(getContext(), this); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); recyclerView.setAdapter(adapter); ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(adapter); mItemTouchHelper = new ItemTouchHelper(callback); mItemTouchHelper.attachToRecyclerView(recyclerView); adapter.setItems(LanguageHelper.getInstance().getSelectedLanguages()); switchMode(getIntent().getIntExtra("mode", Constants.MODE_DRAGGABLE)); IntentFilter languageFilter = new IntentFilter(Constants.ACTION_SELECTED_LANGUAGES_CHANGE); LocalBroadcastManager.getInstance(this).registerReceiver(languagesChangedReceiver, languageFilter); } @Override protected void onDestroy() { super.onDestroy(); LocalBroadcastManager.getInstance(this).unregisterReceiver(languagesChangedReceiver); } public void updateView() { adapter.setItems(LanguageHelper.getInstance().getSelectedLanguages()); } @Override public void onStartDrag(RecyclerView.ViewHolder viewHolder) { mItemTouchHelper.startDrag(viewHolder); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_custom_languages, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { boolean isRemoveMode = mode == Constants.MODE_REMOVE; menu.findItem(R.id.action_add).setVisible(!isRemoveMode); menu.findItem(R.id.action_remove).setVisible(!isRemoveMode); menu.findItem(R.id.action_done).setVisible(isRemoveMode); menu.findItem(R.id.action_save).setVisible(!isRemoveMode); return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_add: AnalyticsHelper.sendEvent("CustomLangs", "Menu", "LangsAdd", 0l); IntentUtils.openAddLanguage(getContext()); return true; case R.id.action_remove: AnalyticsHelper.sendEvent("CustomLangs", "Menu", "LangRemove", 0l); switchMode(Constants.MODE_REMOVE); return true; case R.id.action_done: AnalyticsHelper.sendEvent("CustomLangs", "Menu", "Done", 0l); switchMode(Constants.MODE_DRAGGABLE); return true; case R.id.action_save: AnalyticsHelper.sendEvent("CustomLangs", "Menu", "Save", 0l); LanguageHelper.getInstance().setSelectedLanguages(adapter.mItems); LocalBroadcastManager.getInstance(getContext()).sendBroadcast(new Intent(Constants.ACTION_SELECTED_LANGUAGES_CHANGE)); finish(); return true; } return super.onOptionsItemSelected(item); } private void switchMode(int mode) { this.mode = mode; adapter.switchMode(mode); invalidateOptionsMenu(); } @Override public void onBackPressed() { if (Arrays.equals(adapter.mItems.toArray(), LanguageHelper.getInstance().getSelectedLanguages())) { super.onBackPressed(); } else { ConfirmDialog confirmDialog = ConfirmDialog.newInstance("Confirm Exit", "Do you want to save your changes before exiting?", R.string.save, R.string.not_save); confirmDialog.setConfirmDialogListener(new ConfirmDialog.IConfirmDialogListener() { @Override public void onConfirm() { AnalyticsHelper.sendEvent("CustomLangs", "ExitDialog", "Save", 0l); LanguageHelper.getInstance().setSelectedLanguages(adapter.mItems); LocalBroadcastManager.getInstance(getContext()).sendBroadcast(new Intent(Constants.ACTION_SELECTED_LANGUAGES_CHANGE)); finish(); } }); confirmDialog.setNegativeClickListener(new ConfirmDialog.INegativeClickListener() { @Override public void onNegativeButtonClick() { AnalyticsHelper.sendEvent("CustomLangs", "ExitDialog", "GiveUp", 0l); finish(); } }); confirmDialog.show(getSupportFragmentManager(), "confirm"); } } }