package com.codepath.example.menuspopupsdialogsdemo;
import java.util.ArrayList;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.PopupWindow;
import android.widget.Toast;
import com.codepath.example.menuspopupsdialogsdemo.CustomAlertDialogFragment.CustomAlertListener;
import com.codepath.example.menuspopupsdialogsdemo.EditNameDialog.EditNameDialogListener;
public class MainActivity extends FragmentActivity implements EditNameDialogListener,
CustomAlertListener {
private ArrayList<String> items;
private ArrayAdapter<String> adapterItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
populateListView();
}
public void populateListView() {
items = new ArrayList<String>();
items.add("First");
items.add("Second");
items.add("Third");
items.add("Fourth");
items.add("Fifth");
adapterItems = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items);
ListView lvItems = (ListView) findViewById(R.id.lvItems);
lvItems.setAdapter(adapterItems);
// Setup contextual action mode when item is clicked
lvItems.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (currentActionMode != null) { return; }
currentListItemIndex = position;
currentActionMode = startActionMode(modeCallBack);
view.setSelected(true);
}
});
}
public void onShowDialogWindow(View v) {
FragmentManager fm = getSupportFragmentManager();
EditNameDialog editNameDialog = EditNameDialog.newInstance("Type your name");
editNameDialog.show(fm, "fragment_edit_name");
}
public void onShowAlertDialog(View v) {
FragmentManager fm = getSupportFragmentManager();
CustomAlertDialogFragment alertDialog = CustomAlertDialogFragment.newInstance("Some title");
alertDialog.show(fm, "fragment_alert");
}
public void onShowPopupWindow(View v) {
PopupWindow popup = new PopupWindow(MainActivity.this);
View layout = getLayoutInflater().inflate(R.layout.popup_window, null);
popup.setContentView(layout);
// Set content width and height
popup.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
popup.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
// Closes the popup window when touch outside of it - when looses focus
popup.setOutsideTouchable(true);
popup.setFocusable(true);
// Show anchored to button
popup.setBackgroundDrawable(new BitmapDrawable());
popup.showAsDropDown(v);
}
public void onShowPopupMenu(View v) {
PopupMenu popup = new PopupMenu(this, v);
// Inflate the menu from xml
popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
// Setup menu item selection
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_more:
Toast.makeText(MainActivity.this, "More!", Toast.LENGTH_SHORT).show();
return true;
case R.id.menu_hide:
Toast.makeText(MainActivity.this, "Hide!", Toast.LENGTH_SHORT).show();
return true;
default:
return false;
}
}
});
// Show the menu
popup.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onFinishEditDialog(String inputText) {
Toast.makeText(this, "Your name is: " + inputText, Toast.LENGTH_SHORT).show();
}
@Override
public void onOKButton() {
Toast.makeText(this, "Pressed OK!", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelButton() {
Toast.makeText(this, "Pressed Cancel!", Toast.LENGTH_SHORT).show();
}
// Tracks current contextual action mode
private ActionMode currentActionMode;
// Tracks current menu item
private int currentListItemIndex;
// Define the callback when ActionMode is activated
private ActionMode.Callback modeCallBack = new ActionMode.Callback() {
// Called when the action mode is created; startActionMode() was called
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.setTitle("Remove Item");
mode.getMenuInflater().inflate(R.menu.menu_item, menu);
return true;
}
// Called each time the action mode is shown.
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false; // Return false if nothing is done
}
// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_delete:
items.remove(currentListItemIndex);
adapterItems.notifyDataSetChanged();
mode.finish(); // Action picked, so close the contextual menu
return true;
default:
return false;
}
}
// Called when the user exits the action mode
@Override
public void onDestroyActionMode(ActionMode mode) {
currentActionMode = null; // Clear current action mode
}
};
}