/*
* Created by Angel Leon (@gubatron), Alden Torres (aldenml)
* Copyright (c) 2011-2014, FrostWire(R). All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.bt.download.android.gui.activities.internal;
import com.bt.download.android.R;
import com.bt.download.android.core.ConfigurationManager;
import com.bt.download.android.core.Constants;
import com.bt.download.android.core.FileDescriptor;
import com.bt.download.android.gui.Librarian;
import com.bt.download.android.gui.activities.AudioPlayerActivity;
import com.bt.download.android.gui.activities.MainActivity;
import com.bt.download.android.gui.activities.PreferencesActivity;
import com.bt.download.android.gui.dialogs.ShareIndicationDialog;
import com.bt.download.android.gui.fragments.BrowsePeerFragment;
import com.bt.download.android.gui.fragments.TransfersFragment;
import com.bt.download.android.gui.fragments.TransfersFragment.TransferStatus;
import com.bt.download.android.gui.services.Engine;
import com.bt.download.android.gui.util.UIUtils;
import com.frostwire.logging.Logger;
import android.app.Fragment;
import android.content.Intent;
import android.net.Uri;
import java.util.ArrayList;
import java.util.Arrays;
/**
*
* @author gubatron
* @author aldenml
*
*/
public final class MainController {
private static final Logger LOG = Logger.getLogger(MainController.class);
private final MainActivity activity;
public MainController(MainActivity activity) {
this.activity = activity;
}
public MainActivity getActivity() {
return activity;
}
public void closeSlideMenu() {
activity.closeSlideMenu();
}
public void switchFragment(int itemId) {
Fragment fragment = activity.getFragmentByMenuId(itemId);
if (fragment != null) {
activity.switchContent(fragment);
}
}
public void showPreferences() {
Intent i = new Intent(activity, PreferencesActivity.class);
activity.startActivity(i);
}
/**
* Will try to launch the app, if it cannot find the launch intent, it'll take the user to the Android market.
*/
// public void launchFrostWireTV() {
// Intent intent = null;
// try {
// intent = activity.getApplicationContext().getPackageManager().getLaunchIntentForPackage("com.bt.download.android.tv");
//
// //on the nexus it wasn't throwing the NameNotFoundException, it was just returning null
// if (intent == null) {
// throw new NullPointerException();
// }
// } catch (Throwable t) {
// intent = new Intent();
// intent.setData(Uri.parse("market://details?id=com.bt.download.android.tv"));
// }
// activity.startActivity(intent);
// }
public void showTransfers(TransferStatus status) {
if (!(activity.getCurrentFragment() instanceof TransfersFragment)) {
TransfersFragment fragment = (TransfersFragment) activity.getFragmentByMenuId(R.id.menu_main_transfers);
fragment.selectStatusTab(status);
switchFragment(R.id.menu_main_transfers);
}
}
public void shutdown() {
Intent i = new Intent(activity, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("shutdown-" + ConfigurationManager.instance().getUUIDString(), true);
activity.startActivity(i);
}
public void showMyFiles() {
if (!(activity.getCurrentFragment() instanceof BrowsePeerFragment)) {
switchFragment(R.id.menu_main_library);
}
if (ConfigurationManager.instance().getBoolean(Constants.PREF_KEY_GUI_SHOW_SHARE_INDICATION)) {
ShareIndicationDialog dlg = new ShareIndicationDialog();
dlg.show(activity.getFragmentManager());
}
}
// public void startWizardActivity() {
// Intent i = new Intent(activity, WizardActivity.class);
// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
// activity.startActivity(i);
// }
public void launchPlayerActivity() {
if (Engine.instance().getMediaPlayer().getCurrentFD() != null) {
Intent i = new Intent(activity, AudioPlayerActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(i);
}
}
public void handleSendAction(Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_SEND)) {
handleSendSingleFile(intent);
} else if (action.equals(Intent.ACTION_SEND_MULTIPLE)) {
handleSendMultipleFiles(intent);
}
}
private void handleSendMultipleFiles(Intent intent) {
ArrayList<Uri> fileUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (fileUris != null) {
for (Uri uri : fileUris) {
shareFileByUri(uri);
}
UIUtils.showLongMessage(activity, activity.getString(R.string.n_files_shared, fileUris.size()));
}
}
private void handleSendSingleFile(Intent intent) {
Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (uri == null) {
return;
}
try {
shareFileByUri(uri);
UIUtils.showLongMessage(activity, R.string.one_file_shared);
} catch (Throwable t) {
UIUtils.showLongMessage(activity, R.string.couldnt_share_file);
}
}
private void shareFileByUri(Uri uri) {
if (uri == null) {
return;
}
FileDescriptor fileDescriptor = Librarian.instance().getFileDescriptor(uri);
if (fileDescriptor != null) {
fileDescriptor.shared = true;
Librarian.instance().updateSharedStates(fileDescriptor.fileType, Arrays.asList(fileDescriptor));
}
}
}