/*
* Copyright 2013 Niek Haarman
*
* 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.marshalchen.common.demoofui.listviewanimations.itemmanipulationexamples;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.OnNavigationListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.TextView;
import android.widget.Toast;
import com.marshalchen.common.uimodule.listviewanimations.ArrayAdapter;
import com.marshalchen.common.uimodule.listviewanimations.itemmanipulation.OnDismissCallback;
import com.marshalchen.common.uimodule.listviewanimations.itemmanipulation.swipedismiss.SwipeDismissAdapter;
import com.marshalchen.common.uimodule.listviewanimations.itemmanipulation.swipedismiss.contextualundo.ContextualUndoAdapter;
import com.marshalchen.common.uimodule.listviewanimations.itemmanipulation.swipedismiss.contextualundo.ContextualUndoAdapter.CountDownFormatter;
import com.marshalchen.common.uimodule.listviewanimations.itemmanipulation.swipedismiss.contextualundo.ContextualUndoAdapter.DeleteItemCallback;
import com.marshalchen.common.demoofui.R;
import com.marshalchen.common.demoofui.listviewanimations.ListAnimationListActivity;
import java.util.Arrays;
public class SwipeDismissActivity extends ListAnimationListActivity implements OnNavigationListener, OnDismissCallback, DeleteItemCallback {
private ArrayAdapter<Integer> mAdapter;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdapter = createListAdapter();
setSwipeDismissAdapter();
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
getSupportActionBar().setListNavigationCallbacks(new AnimSelectionAdapter(), this);
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
private void setSwipeDismissAdapter() {
SwipeDismissAdapter adapter = new SwipeDismissAdapter(mAdapter, this);
adapter.setAbsListView(getListView());
getListView().setAdapter(adapter);
}
@Override
public void onDismiss(final AbsListView listView, final int[] reverseSortedPositions) {
for (int position : reverseSortedPositions) {
mAdapter.remove(position);
}
Toast.makeText(this, "Removed positions: " + Arrays.toString(reverseSortedPositions), Toast.LENGTH_SHORT).show();
}
private void setContextualUndoAdapter() {
ContextualUndoAdapter adapter = new ContextualUndoAdapter(mAdapter, R.layout.list_anim_undo_row, R.id.undo_row_undobutton, this);
adapter.setAbsListView(getListView());
getListView().setAdapter(adapter);
}
@Override
public void deleteItem(final int position) {
mAdapter.remove(position);
mAdapter.notifyDataSetChanged();
}
private void setContextualUndoWithTimedDeleteAdapter() {
ContextualUndoAdapter adapter = new ContextualUndoAdapter(mAdapter, R.layout.list_anim_undo_row, R.id.undo_row_undobutton, 3000, this);
adapter.setAbsListView(getListView());
getListView().setAdapter(adapter);
}
private void setContextualUndoWithTimedDeleteAndCountDownAdapter() {
ContextualUndoAdapter adapter = new ContextualUndoAdapter(mAdapter, R.layout.list_anim_undo_row, R.id.undo_row_undobutton, 3000, R.id.undo_row_texttv, this, new MyFormatCountDownCallback());
adapter.setAbsListView(getListView());
getListView().setAdapter(adapter);
}
private class MyFormatCountDownCallback implements CountDownFormatter {
@Override
public String getCountDownString(final long millisUntilFinished) {
int seconds = (int) Math.ceil(millisUntilFinished / 1000.0);
if (seconds > 0) {
return "countdown_seconds";
}
return "countdown_dismissing";
}
}
/* Non-ListViewAnimations related stuff below */
@Override
public boolean onNavigationItemSelected(final int itemPosition, final long itemId) {
switch (itemPosition) {
case 0:
setSwipeDismissAdapter();
return true;
case 1:
setContextualUndoAdapter();
return true;
case 2:
setContextualUndoWithTimedDeleteAdapter();
return true;
case 3:
setContextualUndoWithTimedDeleteAndCountDownAdapter();
return true;
default:
return false;
}
}
private class AnimSelectionAdapter extends ArrayAdapter<String> {
public AnimSelectionAdapter() {
addAll("Swipe-To-Dismiss", "Contextual Undo", "CU - Timed Delete", "CU - Count Down");
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
TextView tv = (TextView) convertView;
if (tv == null) {
tv = (TextView) LayoutInflater.from(SwipeDismissActivity.this).inflate(android.R.layout.simple_list_item_1, parent, false);
}
tv.setText(getItem(position));
return tv;
}
}
}