package com.seafile.seadroid2.ui;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.text.ClipboardManager;
import android.webkit.MimeTypeMap;
import android.widget.Toast;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.seafile.seadroid2.R;
import com.seafile.seadroid2.SeadroidApplication;
import com.seafile.seadroid2.account.Account;
import com.seafile.seadroid2.ui.activity.BaseActivity;
import com.seafile.seadroid2.ui.activity.BrowserActivity;
import com.seafile.seadroid2.ui.activity.GalleryActivity;
import com.seafile.seadroid2.ui.activity.MarkdownActivity;
import com.seafile.seadroid2.ui.dialog.AppChoiceDialog;
import com.seafile.seadroid2.ui.dialog.GetShareLinkDialog;
import com.seafile.seadroid2.ui.dialog.GetShareLinkEncryptDialog;
import com.seafile.seadroid2.ui.dialog.TaskDialog;
import com.seafile.seadroid2.util.Utils;
import java.io.File;
import java.util.List;
/**
* Activity Utils
*/
public class WidgetUtils {
public static void chooseShareApp(final BaseActivity activity,
final String repoID,
final String path,
final boolean isdir,
final Account account,
final String password,
final String days) {
final Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
// Get a list of apps
List<ResolveInfo> infos = Utils.getAppsByIntent(shareIntent);
String title = activity.getString(isdir ? R.string.share_dir_link : R.string.share_file_link);
AppChoiceDialog dialog = new AppChoiceDialog();
dialog.addCustomAction(0, activity.getResources().getDrawable(R.drawable.copy_link),
activity.getString(R.string.copy_link));
dialog.init(title, infos, new AppChoiceDialog.OnItemSelectedListener() {
@Override
public void onCustomActionSelected(AppChoiceDialog.CustomAction action) {
final GetShareLinkDialog gdialog = new GetShareLinkDialog();
gdialog.init(repoID, path, isdir, account, password, days);
gdialog.setTaskDialogLisenter(new TaskDialog.TaskDialogListener() {
@Override
@SuppressWarnings("deprecation")
public void onTaskSuccess() {
ClipboardManager clipboard = (ClipboardManager)
activity.getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(gdialog.getLink());
// ClipData clip = ClipData.newPlainText("seafile shared link", gdialog.getLink());
// clipboard.setPrimaryClip(clip);
Toast.makeText(activity, R.string.link_ready_to_be_pasted, Toast.LENGTH_SHORT).show();
}
});
gdialog.show(activity.getSupportFragmentManager(), "DialogFragment");
}
@Override
public void onAppSelected(ResolveInfo appInfo) {
String className = appInfo.activityInfo.name;
String packageName = appInfo.activityInfo.packageName;
shareIntent.setClassName(packageName, className);
final GetShareLinkDialog gdialog = new GetShareLinkDialog();
gdialog.init(repoID, path, isdir, account,password, days);
gdialog.setTaskDialogLisenter(new TaskDialog.TaskDialogListener() {
@Override
public void onTaskSuccess() {
shareIntent.putExtra(Intent.EXTRA_TEXT, gdialog.getLink());
activity.startActivity(shareIntent);
}
});
gdialog.show(activity.getSupportFragmentManager(), "DialogFragment");
}
});
dialog.show(activity.getSupportFragmentManager(), BrowserActivity.CHOOSE_APP_DIALOG_FRAGMENT_TAG);
}
public static void inputSharePassword(final BaseActivity activity,
final String repoID,
final String path,
final boolean isdir,
final Account account){
final GetShareLinkEncryptDialog dialog = new GetShareLinkEncryptDialog();
dialog.setTaskDialogLisenter(new TaskDialog.TaskDialogListener() {
@Override
public void onTaskSuccess() {
String password = dialog.getPassword();
String days = dialog.getDays();
chooseShareApp(activity,repoID,path,isdir,account,password,days);
}
});
dialog.show(activity.getSupportFragmentManager(),BrowserActivity.CHARE_LINK_PASSWORD_FRAGMENT_TAG);
}
/**
* display the file according to its file type
*
* @param file
*/
public static void showFile(final BaseActivity activity, File file) {
String name = file.getName();
String suffix = name.substring(name.lastIndexOf('.') + 1).toLowerCase();
// Open markdown files in MarkdownActivity
if (suffix.equals("md") || suffix.equals("markdown")) {
startMarkdownActivity(activity, file.getPath());
activity.overridePendingTransition(0, 0);
return;
}
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(suffix);
if (mime==null)
mime = "*/*"; // forces app chooser dialog on unknown type
Intent open = new Intent(Intent.ACTION_VIEW);
open.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
open.setDataAndType((Uri.fromFile(file)), mime);
if (activity.getPackageManager().resolveActivity(open, 0) == null) {
String message = String.format(activity.getString(R.string.op_exception_suitable_app_not_found), mime);
activity.showShortToast(activity, message);
mime = "*/*";
open.setType(mime);
}
try {
activity.startActivity(open);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
}
public static void showRepo(Context context, String repoID, String repoName, String path, String dirID) {
Intent intent = new Intent(context, BrowserActivity.class);
intent.putExtra("repoID", repoID);
intent.putExtra("repoName", repoName);
intent.putExtra("path", path);
intent.putExtra("dirID", dirID);
context.startActivity(intent);
}
public static void startMarkdownActivity(Context context, String path) {
Intent intent = new Intent(context, MarkdownActivity.class);
intent.putExtra("path", path);
context.startActivity(intent);
}
/**
* start and pass data to {@link GalleryActivity}
*
* @param repoId
* @param path
* @param fileName
* @param account
*/
public static void startGalleryActivity(Activity activity, String repoName, String repoId, String path, String fileName, Account account) {
Intent intent = new Intent(activity, GalleryActivity.class);
intent.putExtra("repoName", repoName);
intent.putExtra("repoId", repoId);
intent.putExtra("path", path);
intent.putExtra("account", account);
intent.putExtra("fileName", fileName);
activity.startActivity(intent);
}
public static int getThumbnailWidth() {
return (int) SeadroidApplication.getAppContext().getResources().getDimension(R.dimen.lv_icon_width);
}
public static DisplayImageOptions iconOptions = new DisplayImageOptions.Builder()
.delayBeforeLoading(0)
.resetViewBeforeLoading(true)
.cacheInMemory(true)
.cacheOnDisk(false)
.build();
}