/*
* Copyright (c) 2015 Jonas Kalderstam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.nononsenseapps.filepicker.sample;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ClipData;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RadioGroup;
import android.widget.TextView;
import com.dropbox.client2.DropboxAPI;
import com.dropbox.client2.android.AndroidAuthSession;
import com.nononsenseapps.filepicker.AbstractFilePickerFragment;
import com.nononsenseapps.filepicker.FilePickerActivity;
import com.nononsenseapps.filepicker.sample.dropbox.DropboxFilePickerActivity;
import com.nononsenseapps.filepicker.sample.dropbox.DropboxFilePickerActivity2;
import com.nononsenseapps.filepicker.sample.dropbox.DropboxSyncHelper;
import java.util.ArrayList;
public class NoNonsenseFilePicker extends Activity {
private static final int CODE_SD = 0;
private static final int CODE_DB = 1;
private TextView textView;
private DropboxAPI<AndroidAuthSession> mDBApi = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_no_nonsense_file_picker);
final CheckBox checkAllowCreateDir =
(CheckBox) findViewById(R.id.checkAllowCreateDir);
final CheckBox checkAllowMultiple =
(CheckBox) findViewById(R.id.checkAllowMultiple);
final CheckBox checkLightTheme =
(CheckBox) findViewById(R.id.checkLightTheme);
final RadioGroup radioGroup =
(RadioGroup) findViewById(R.id.radioGroup);
textView = (TextView) findViewById(R.id.text);
findViewById(R.id.button_sd)
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
Intent i;
if (checkLightTheme.isChecked()) {
i = new Intent(NoNonsenseFilePicker.this,
FilePickerActivity2.class);
} else {
i = new Intent(NoNonsenseFilePicker.this,
FilePickerActivity.class);
}
i.setAction(Intent.ACTION_GET_CONTENT);
i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE,
checkAllowMultiple.isChecked());
i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR,
checkAllowCreateDir.isChecked());
// What mode is selected
final int mode;
switch (radioGroup.getCheckedRadioButtonId()) {
case R.id.radioDir:
mode = AbstractFilePickerFragment.MODE_DIR;
break;
case R.id.radioFilesAndDirs:
mode =
AbstractFilePickerFragment.MODE_FILE_AND_DIR;
break;
case R.id.radioFile:
default:
mode = AbstractFilePickerFragment.MODE_FILE;
break;
}
i.putExtra(FilePickerActivity.EXTRA_MODE, mode);
startActivityForResult(i, CODE_SD);
}
});
findViewById(R.id.button_image)
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
Intent i;
if (checkLightTheme.isChecked()) {
i = new Intent(NoNonsenseFilePicker.this,
ImagePickerActivity2.class);
} else {
i = new Intent(NoNonsenseFilePicker.this,
ImagePickerActivity.class);
}
i.setAction(Intent.ACTION_GET_CONTENT);
i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE,
checkAllowMultiple.isChecked());
i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR,
checkAllowCreateDir.isChecked());
// What mode is selected (makes no sense to restrict to folders here)
final int mode;
switch (radioGroup.getCheckedRadioButtonId()) {
case R.id.radioFilesAndDirs:
mode =
AbstractFilePickerFragment.MODE_FILE_AND_DIR;
break;
case R.id.radioFile:
default:
mode = AbstractFilePickerFragment.MODE_FILE;
break;
}
i.putExtra(FilePickerActivity.EXTRA_MODE, mode);
startActivityForResult(i, CODE_SD);
}
});
findViewById(R.id.button_dropbox)
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
// First we must authorize the user
if (mDBApi == null) {
mDBApi = DropboxSyncHelper
.getDBApi(NoNonsenseFilePicker.this);
}
// If not authorized, then ask user for login/permission
if (!mDBApi.getSession().isLinked()) {
mDBApi.getSession().startOAuth2Authentication(
NoNonsenseFilePicker.this);
} else { // User is authorized, open file picker
Intent i;
if (checkLightTheme.isChecked()) {
i = new Intent(NoNonsenseFilePicker.this,
DropboxFilePickerActivity2.class);
} else {
i = new Intent(NoNonsenseFilePicker.this,
DropboxFilePickerActivity.class);
}
i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE,
checkAllowMultiple.isChecked());
i.putExtra(
FilePickerActivity.EXTRA_ALLOW_CREATE_DIR,
checkAllowCreateDir.isChecked());
// What mode is selected
final int mode;
switch (radioGroup.getCheckedRadioButtonId()) {
case R.id.radioDir:
mode = AbstractFilePickerFragment.MODE_DIR;
break;
case R.id.radioFilesAndDirs:
mode =
AbstractFilePickerFragment.MODE_FILE_AND_DIR;
break;
case R.id.radioFile:
default:
mode = AbstractFilePickerFragment.MODE_FILE;
break;
}
i.putExtra(FilePickerActivity.EXTRA_MODE, mode);
startActivityForResult(i, CODE_DB);
}
}
});
}
/**
* This is entirely for Dropbox's benefit
*/
protected void onResume() {
super.onResume();
if (mDBApi != null && mDBApi.getSession().authenticationSuccessful()) {
try {
// Required to complete auth, sets the access token on the session
mDBApi.getSession().finishAuthentication();
String accessToken = mDBApi.getSession().getOAuth2AccessToken();
DropboxSyncHelper.saveToken(this, accessToken);
} catch (IllegalStateException e) {
Log.i("DbAuthLog", "Error authenticating", e);
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.no_nonsense_file_picker, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
return id == R.id.action_settings || super.onOptionsItemSelected(item);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if ((CODE_SD == requestCode || CODE_DB == requestCode) &&
resultCode == Activity.RESULT_OK) {
if (data.getBooleanExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE,
false)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
ClipData clip = data.getClipData();
StringBuilder sb = new StringBuilder();
if (clip != null) {
for (int i = 0; i < clip.getItemCount(); i++) {
sb.append(clip.getItemAt(i).getUri().toString());
sb.append("\n");
}
}
textView.setText(sb.toString());
} else {
ArrayList<String> paths = data.getStringArrayListExtra(
FilePickerActivity.EXTRA_PATHS);
StringBuilder sb = new StringBuilder();
if (paths != null) {
for (String path : paths) {
sb.append(path);
sb.append("\n");
}
}
textView.setText(sb.toString());
}
} else {
textView.setText(data.getData().toString());
}
}
}
}