package im.actor.sdk.controllers.pickers.file;
import android.animation.ValueAnimator;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import android.widget.AdapterView;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v7.app.AppCompatActivity;
import im.actor.sdk.controllers.pickers.file.items.ExplorerItem;
import java.io.File;
import java.util.ArrayList;
import im.actor.sdk.R;
/**
* Created by kiolt_000 on 15/09/2014.
*/
public abstract class BasePickerActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
protected ArrayList<String> selectedItems = new ArrayList<String>();
private boolean searchEnabled;
protected Fragment currentFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.picker_activity_picker);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.setCustomAnimations(R.animator.picker_fragment_explorer_welcome_enter, R.animator.picker_fragment_explorer_welcome_exit)
.add(R.id.container, getWelcomeFragment())
.commit();
}
//getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// getSupportActionBar().setDisplayShowHomeEnabled(false);
// getSupportActionBar().setDisplayUseLogoEnabled(false);
View select = findViewById(R.id.select);
select.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
returnResult();
}
});
View cancel = findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
protected void returnResult() {
Intent returnIntent = new Intent();
returnIntent.putExtra("picked", selectedItems);
setResult(RESULT_OK, returnIntent);
save();
finish();
}
protected abstract Fragment getWelcomeFragment();
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (currentFragment != null) {
currentFragment.onCreateOptionsMenu(menu, getMenuInflater());
return true;
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
// finish();
onBackPressed();
return true;
}
if (currentFragment != null)
return currentFragment.onOptionsItemSelected(item);
return super.onOptionsItemSelected(item);
}
@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);
// currentFragment = fragment;
}
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
protected abstract void save();
public boolean selectItem(String path) {
boolean selected = !selectedItems.contains(path);
if (selected) {
if (selectedItems.size() > 9) {
Toast.makeText(this, "You can pick only 10 items.", Toast.LENGTH_SHORT).show();
return false;
}
selectedItems.add(path);
} else {
selectedItems.remove(path);
}
//itemView.findViewById(R.id.selected).setSelected(selected);
updateCounter();
return selected;
}
public void selectItem(ExplorerItem item, View itemView) {
item.setSelected(selectItem(item.getPath()));
item.bindData(itemView);
}
public void updateCounter() {
final TextView counterView = (TextView) findViewById(R.id.counter);
View selectView = findViewById(R.id.select);
View cancelView = findViewById(R.id.cancel);
View controllerHolder = findViewById(R.id.controllers);
if (!selectedItems.isEmpty()) {
counterView.setText("" + selectedItems.size());
}
final View counterHolder = findViewById(R.id.counter_holder);
findViewById(R.id.select_text).setEnabled(!selectedItems.isEmpty());
selectView.setEnabled(!selectedItems.isEmpty());
if ((selectedItems.isEmpty() && counterHolder.getVisibility() != View.GONE)
|| (!selectedItems.isEmpty() && counterHolder.getVisibility() == View.GONE)) {
final int i = counterHolder.getLayoutParams().width;
ValueAnimator valueAnimator;
if (!selectedItems.isEmpty()) {
valueAnimator = ValueAnimator.ofInt(0, i);
} else {
valueAnimator = ValueAnimator.ofInt(i, 0);
}
valueAnimator.setDuration(100);
valueAnimator.setInterpolator(new DecelerateInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
Integer width = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams params = counterHolder.getLayoutParams();
if (width == 0) {
params.width = i;
counterHolder.setVisibility(View.GONE);
} else {
counterHolder.setVisibility(View.VISIBLE);
params.width = width;
}
counterHolder.setLayoutParams(params);
counterHolder.invalidate();
}
});
valueAnimator.start();
}
}
public boolean isSelected(String path) {
return selectedItems.contains(path);
}
public boolean isSelected(File file) {
return isSelected(file.getPath());
}
public void setFragment(Fragment fragment) {
this.currentFragment = fragment;
}
}