Java tutorial
/* * Copyleft PadLand * * 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. */ package com.mikifus.padland; import android.app.LoaderManager; import android.content.ClipData; import android.content.Context; import android.content.CursorLoader; import android.content.Intent; import android.content.Loader; import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.text.ClipboardManager; import android.util.Log; import android.util.SparseBooleanArray; import android.view.ActionMode; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ExpandableListView; import android.widget.ListView; import android.widget.Toast; import com.mikifus.padland.Dialog.NewPadGroup; import java.util.ArrayList; import java.util.HashMap; /** * This activity displays a list of previously checked documents. * Here documents can be deleted via Intent. * It handles as well the sharing intent to the app. * * @author mikifus * @since 0.1 */ public class PadListActivity extends PadLandDataActivity { public static final String TAG = "PadListActivity"; public static final String INTENT_FOCUS_PAD = "focus_pad"; /** * mActionMode defines behaviour of the action-bar */ protected ActionMode mActionMode; /** * expandableListView */ // private ExpandableListView expandableListView; /** * Adapter to play with the expandableListView */ // private PadListAdapter adapter = null; /** * Override onCreate * * @param savedInstanceState */ @Override protected void onCreate(Bundle savedInstanceState) { // Layout super.onCreate(savedInstanceState); // Intent this._actionFromIntent(); setContentView(R.layout.activity_padlist); // Intent this._textFromIntent(); // Loader // this.initLoader(this); // Init list view //this._initListView(); // this._detectItemFocus(); } /** * If there is a share intent this function gets the extra text * and copies it into clipboard */ private void _textFromIntent() { String extra_text = getIntent().getStringExtra(Intent.EXTRA_TEXT); if (extra_text != null) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(extra_text); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService( Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("Copied Text", extra_text); clipboard.setPrimaryClip(clip); } Toast.makeText(this, getString(R.string.activity_padlist_implicitintent_text_copied), Toast.LENGTH_LONG) .show(); } } /** * If there is an intent with "action", here it is processed * For now there is only the delete action. */ private void _actionFromIntent() { String action = getIntent().getStringExtra("action"); ArrayList<String> pad_id_list = getIntent().getStringArrayListExtra("pad_id"); if (action != null && pad_id_list.size() > 0) { Log.d("DELETE_PAD_INTENT", "list: " + pad_id_list.toString()); switch (action) { case "delete": for (int i = 0; i < pad_id_list.size(); i++) { Log.d("DELETE_PAD_INTENT", "action: " + action + " list_get: " + pad_id_list.get(i)); // boolean result = padlandDb.deletePad(Long.parseLong(pad_id_list.get(i))); // if (result) { // Toast.makeText(this, getString(R.string.padlist_document_deleted), Toast.LENGTH_LONG).show(); // } } break; } } // if( adapter != null ) { // adapter.notifyDataSetChanged(); // } } private void _detectItemFocus() { Bundle extras = getIntent().getExtras(); if (extras == null) { return; } long pad_id = extras.getLong(INTENT_FOCUS_PAD, 0); if (pad_id > 0) { // Bundle position = adapter.getPosition(pad_id); // expandableListView.smoothScrollToPosition(position.getInt("groupPosition"), position.getInt("childPosition")); // expandableListView.setSelectedChild(position.getInt("groupPosition"), position.getInt("childPosition"), true); } } /** * When the list is empty a message with a button is shown. * This handles the button onClick. * * @param view */ public void onNewPadClick(View view) { Intent newPadIntent = new Intent(this, NewPadActivity.class); startActivity(newPadIntent); } /** * When the list is empty a message with a button is shown. * This handles the button onClick. * * @param view */ public void onNewPadgroupClick(View view) { showNewPadgroupDialog(); } private void showNewPadgroupDialog() { FragmentManager fm = getSupportFragmentManager(); NewPadGroup dialog = new NewPadGroup(); dialog.show(fm, "dialog_new_padgroup"); } /** * Makes an empty ListView and returns it. * * @return ListView */ // private void _initListView() { // expandableListView = (ExpandableListView) findViewById(R.id.listView); // expandableListView.setTextFilterEnabled(true); // expandableListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); // expandableListView.setEmptyView(findViewById(android.R.id.empty)); // // // Set the data // setAdapter(); // // // events // this._setListViewEvents(); // // adapter.notifyDataSetChanged(); // } /** * This function adds events listeners for a ListView object to provide usage of the ActionBar */ // private void _setListViewEvents() { // expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { // @Override // public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { // Log.d(TAG, "child click: " + id); // // // DO NOT try to handle selection with this listener, you will hurt yourself // // Intent padViewIntent = new Intent(PadListActivity.this, PadInfoActivity.class); // padViewIntent.putExtra("pad_id", id); // // startActivity(padViewIntent); // // return true; // } // }); // // expandableListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { // @Override // public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { // // convert the input flat list position to a packed position // long packedPosition = expandableListView.getExpandableListPosition(position); // // int itemType = ExpandableListView.getPackedPositionType(packedPosition); // int groupPosition = ExpandableListView.getPackedPositionGroup(packedPosition); // int childPosition = ExpandableListView.getPackedPositionChild(packedPosition); // // Log.d(TAG, "Longclick: item: "+itemType+" childpos:" + childPosition + " pos:" + position + " id:" + id); // // // GROUP-item clicked // if (itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { // long groupId = adapter.getGroupId(groupPosition); // if( groupId > 0 ) { // Log.d("MY","ASI"); // menu_delete_group(groupId); // return true; // } // } // // CHILD-item clicked // else if (itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { // startActionMode(); // boolean checked = expandableListView.isItemChecked(position); // expandableListView.setItemChecked(position, !checked); // view.setSelected(!checked); // if (expandableListView.getCheckedItemCount() == 0) { // mActionMode.finish(); // } // // Return true as we are handling the event. // return true; // } // // return false; // } // }); // // // If there was something selected, just in case, we start the actionmode to allow // // the user cancel the previous selection at least. // if(expandableListView.getCheckedItemCount() > 0) { // startActionMode(); // } // } /** * Check an item and set is as selected. * */ // public void startActionMode() { //// Log.d(TAG, "SELECTION NEW: pos:" + String.valueOf(position) + " id:" + String.valueOf(id)); //// // if (mActionMode == null) { //// // Start the CAB using the ActionMode.Callback defined above // PadListActivity.this.startActionMode(PadListActivity.this); // } // } /** * Gets an adapter for the expandableListView with the contents from the database * * @return */ // private void setAdapter() // { //// ArrayList<HashMap<String, ArrayList>> group_data = getGroupsForAdapter(); // HashMap<Long, ArrayList<String>> padlist_data = _getPadListData(); // // adapter = new PadListAdapter(this); // // // Bind to adapter. // expandableListView.setAdapter(adapter); // // // Expand all groups by default // for(int i=0; i < adapter.getGroupCount(); i++) { // expandableListView.expandGroup(i); // } // } private HashMap<Long, ArrayList<String>> _getPadListData() { Uri padlist_uri = Uri.parse(getString(R.string.request_padlist)); Cursor cursor = getContentResolver().query(padlist_uri, new String[] { PadContentProvider._ID, PadContentProvider.NAME, PadContentProvider.URL }, null, null, PadContentProvider.LAST_USED_DATE + " ASC"); HashMap<Long, ArrayList<String>> result = new HashMap<>(); if (cursor == null || cursor.getCount() == 0) { return result; } HashMap<Long, ArrayList<String>> pad_data = new HashMap<>(); cursor.moveToFirst(); while (!cursor.isAfterLast()) { long id = cursor.getLong(0); String name = cursor.getString(1); String url = cursor.getString(2); ArrayList<String> pad_strings = new ArrayList<String>(); pad_strings.add(name); pad_strings.add(url); pad_data.put(id, pad_strings); // do something cursor.moveToNext(); } cursor.close(); return pad_data; } /** * Data loader initial event * * @param id * @param args * @return */ // @Override // public Loader<Cursor> onCreateLoader(int id, Bundle args) { // String[] projection = {PadContentProvider._ID, PadContentProvider.NAME, PadContentProvider.URL}; // CursorLoader cursorLoader = new CursorLoader(this, PadContentProvider.PADLIST_CONTENT_URI, projection, null, null, null); // return cursorLoader; // } /** * Data loader finish event * * @param loader * @param data */ // @Override // public void onLoadFinished(Loader<Cursor> loader, Cursor data) { // setAdapter(); // } // // /** // * Data loader event // * // * @param loader // */ // @Override // public void onLoaderReset(Loader<Cursor> loader) { // // data is not available anymore, delete reference // setAdapter(); // } /** * Called when the action mode is created; startActionMode() was called * * @param mode * @param menu * @return boolean */ // @Override // public boolean onCreateActionMode(ActionMode mode, Menu menu) { // // Inflate a menu resource providing context menu items // MenuInflater inflater = mode.getMenuInflater(); // inflater.inflate(R.menu.rowselection, menu); // // mActionMode = mode; // // return true; // } /** * Called each time the action mode is shown. Always called after onCreateActionMode, but * may be called multiple times if the mode is invalidated. * * @param mode * @param menu * @return boolean */ // @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 // * // * @param mode // * @param item // * @return // */ // @Override // public boolean onActionItemClicked(ActionMode mode, MenuItem item) { // switch (item.getItemId()) { // case R.id.menuitem_group: // menu_group(getCheckedItemIds()); // // Action picked, so close the CAB // mode.finish(); // return true; // case R.id.menuitem_delete: // AskDelete(getCheckedItemIds()); // // Action picked, so close the CAB // mode.finish(); // return true; // case R.id.menuitem_share: // menu_share(getCheckedItemIds()); // // Action picked, so close the CAB // mode.finish(); // return true; // default: // return false; // } // } // // private ArrayList<String> getCheckedItemIds() // { // ArrayList<String> selectedItems = new ArrayList<>(); // HashMap<Long, ArrayList<String>> padlist_data = _getPadListData(); // // SparseBooleanArray positions = expandableListView.getCheckedItemPositions(); // Log.d(TAG, "selectedItemsPositions: " + positions); // for (int i = 0; i < positions.size(); ++i) // { // int position = positions.keyAt(i); // if ( positions.valueAt(i) ) { // long packed_position = expandableListView.getExpandableListPosition(position); // int group = expandableListView.getPackedPositionGroup(packed_position); // int child = expandableListView.getPackedPositionChild(packed_position); // Log.d(TAG, "selectedItemsPositions: g: " + group + "c: " + child); // if( child == -1 ) // { // continue; // } // selectedItems.add( String.valueOf(adapter.getChildId(group, child)) ); // } // } // Log.d(TAG, "selectedItemsIds: " + selectedItems.toString()); // // return selectedItems; // } // // /** // * Called when the user exits the action mode // * // * @param mode // */ // @Override // public void onDestroyActionMode(ActionMode mode) { // mActionMode = null; // uncheckAllItems(); // } // // private void uncheckAllItems() { // if( expandableListView == null ) { // return; // } // SparseBooleanArray checked = expandableListView.getCheckedItemPositions(); // for (int i = 0; i < checked.size(); i++) { // // Item position in adapter // int position = checked.keyAt(i); // // Add sport if it is checked i.e.) == TRUE! // if (checked.valueAt(i)) { // expandableListView.setItemChecked(position, false); // } // } // } // // /** // * backbutton event // */ // public void onBackPressed() { // onDestroyActionMode(mActionMode); // super.onBackPressed(); // } // public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu, R.menu.pad_list); } // // @Override // public void onStart() { // super.onStart(); // } // // @Override // public void onStop() { // super.onStop(); // } // // public void notifyDataSetChanged() { // if( expandableListView != null ) { // setAdapter(); //// ((BaseExpandableListAdapter) expandableListView.getExpandableListAdapter()).notifyDataSetChanged(); // } // } }