package com.seafile.seadroid2.cameraupload;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import com.seafile.seadroid2.R;
import com.seafile.seadroid2.SettingsManager;
import com.seafile.seadroid2.account.Account;
import com.seafile.seadroid2.data.SeafRepo;
import com.seafile.seadroid2.ui.activity.BaseActivity;
import com.seafile.seadroid2.ui.activity.SeafilePathChooserActivity;
import com.seafile.seadroid2.ui.fragment.SettingsFragment;
import com.viewpagerindicator.LinePageIndicator;
import java.util.List;
/**
* Camera upload configuration helper
*/
public class CameraUploadConfigActivity extends BaseActivity {
public static final String DEBUG_TAG = "CameraUploadConfigActivity";
private ViewPager mViewPager;
private LinePageIndicator mIndicator;
private BucketsFragment mBucketsFragment;
private CloudLibraryFragment mCloudLibFragment;
private SettingsManager sm;
private SeafRepo mSeafRepo;
private Account mAccount;
/** handling data from configuration helper */
private boolean isChooseBothPages;
/** handling data from cloud library page */
private boolean isChooseLibPage;
/** handling data from local directory page */
private boolean isChooseDirPage;
private int mCurrentPosition;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
setContentView(R.layout.cuc_activity_layout);
if (getSupportActionBar() != null)
getSupportActionBar().hide();
isChooseBothPages = getIntent().getBooleanExtra(SettingsFragment.CAMERA_UPLOAD_BOTH_PAGES, false);
isChooseLibPage = getIntent().getBooleanExtra(SettingsFragment.CAMERA_UPLOAD_REMOTE_LIBRARY, false);
isChooseDirPage = getIntent().getBooleanExtra(SettingsFragment.CAMERA_UPLOAD_LOCAL_DIRECTORIES, false);
mViewPager = (ViewPager) findViewById(R.id.cuc_pager);
FragmentManager fm = getSupportFragmentManager();
mViewPager.setAdapter(new CameraUploadConfigAdapter(fm));
mViewPager.setOffscreenPageLimit(6);
mIndicator = (LinePageIndicator) findViewById(R.id.cuc_indicator);
mIndicator.setViewPager(mViewPager);
mIndicator.setOnPageChangeListener(pageChangeListener);
sm = SettingsManager.instance();
if (isChooseLibPage || isChooseDirPage) {
mIndicator.setVisibility(View.GONE);
}
}
/**
* Page scroll listener.
*/
private OnPageChangeListener pageChangeListener = new OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int scrollState) {}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
mCurrentPosition = position;
}
@Override
public void onPageSelected(int page){}
};
public void saveCameraUploadInfo(Account account, SeafRepo seafRepo) {
mSeafRepo = seafRepo;
mAccount = account;
}
public void saveSettings() {
if (isChooseBothPages || isChooseDirPage) {
SettingsManager settingsManager = SettingsManager.instance();
List<String> selectedBuckets = mBucketsFragment.getSelectionFragment().getSelectedBuckets();
if (mBucketsFragment.isAutoScanSelected()){
selectedBuckets.clear();
}
// this is the only setting that is safed here. all other are returned to caller
// and safed there...
settingsManager.setCameraUploadBucketList(selectedBuckets);
}
Intent intent = new Intent();
// update cloud library data
if (mSeafRepo != null && mAccount != null) {
intent.putExtra(SeafilePathChooserActivity.DATA_REPO_NAME, mSeafRepo.name);
intent.putExtra(SeafilePathChooserActivity.DATA_REPO_ID, mSeafRepo.id);
intent.putExtra(SeafilePathChooserActivity.DATA_ACCOUNT, mAccount);
}
setResult(RESULT_OK, intent);
}
@Override
public void onBackPressed() {
if (mCurrentPosition == 0) {
setResult(RESULT_CANCELED);
super.onBackPressed();
} else {
// navigate to previous page when press back button
mCurrentPosition -= 1;
mIndicator.setCurrentItem(mCurrentPosition);
}
}
public boolean isChooseLibPage() {
return isChooseLibPage;
}
public boolean isChooseDirPage() {
return isChooseDirPage;
}
public void saveDataPlanAllowed(boolean isAllowed) {
sm.saveDataPlanAllowed(isAllowed);
}
public void saveVideosAllowed(boolean isAllowed) {
sm.saveVideosAllowed(isAllowed);
}
class CameraUploadConfigAdapter extends FragmentStatePagerAdapter {
public CameraUploadConfigAdapter(FragmentManager fm) {
super(fm);
}
// This method controls which fragment should be shown on a specific screen.
@Override
public Fragment getItem(int position) {
if (isChooseLibPage) {
return position == 0 ? new CloudLibraryFragment() : null;
}
if (isChooseDirPage) {
switch (position) {
case 0:
mBucketsFragment = new BucketsFragment();
return mBucketsFragment;
default:
return null;
}
}
// Assign the appropriate screen to the fragment object, based on which screen is displayed.
switch (position) {
case 0:
return new ConfigWelcomeFragment();
case 1:
return new HowToUploadFragment();
case 2:
return new WhatToUploadFragment();
case 3:
mBucketsFragment = new BucketsFragment();
return mBucketsFragment;
case 4:
mCloudLibFragment = new CloudLibraryFragment();
return mCloudLibFragment;
case 5:
return new ReadyToScanFragment();
default:
return null;
}
}
@Override
public int getCount() {
if (isChooseLibPage || isChooseDirPage)
return 1;
else
return 6;
}
}
}