/* * Copyright (c) 2013 Allogy Interactive. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.allogy.app.adapter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Locale; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Environment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.TextView; import com.allogy.app.R; import com.allogy.app.media.EReaderActivity; import com.allogy.app.media.HtmlActivity; import com.allogy.app.provider.Academic; import com.allogy.app.util.Util; public class FileAdapter extends CursorAdapter { @SuppressWarnings("unused") private final String LOG_TAG = FileAdapter.class.getName(); private final static int MAX_BKCOVER_WIDTH = 100; private final static int MAX_BKCOVER_HEIGHT = 168; private Activity mActivity; private LayoutInflater mInflater; private int mIdIndex; private int mLessonIndex; private int mMediaTypeIndex; private int mURIIndex; private int mFileSizeIndex; private int mExtraNameIndex; public static final class LibraryFileItemViews { public long id; public long lessonId; public ImageView fileIcon; public TextView fileName; public int mediaType; public String URI; public int fileSize; } public static final class LibraryFileIconItems { public int id; public int type; public String path; } public FileAdapter(Activity act, Cursor cursor) { super(act, cursor, true); mActivity = act; mInflater = LayoutInflater.from(mActivity); mIdIndex = cursor.getColumnIndexOrThrow(Academic.LessonFiles._ID); mLessonIndex = cursor.getColumnIndexOrThrow(Academic.LessonFiles.LESSON_ID); mMediaTypeIndex = cursor.getColumnIndexOrThrow(Academic.LessonFiles.MEDIA_TYPE); mURIIndex = cursor.getColumnIndexOrThrow(Academic.LessonFiles.URI); mFileSizeIndex = cursor.getColumnIndexOrThrow(Academic.LessonFiles.FILESIZE); mExtraNameIndex = cursor.getColumnIndexOrThrow(Academic.LessonFiles.EXTRA_NAME); } @Override public void bindView(View view, Context context, Cursor cursor) { long lessonId = cursor.getInt(mLessonIndex); String URI = cursor.getString(mURIIndex); String extraName = cursor.getString(mExtraNameIndex); int mediaType = cursor.getInt(mMediaTypeIndex); int fileSize = cursor.getInt(mFileSizeIndex); long id = cursor.getInt(mIdIndex); final LibraryFileItemViews libFileViews = (LibraryFileItemViews) view .getTag(); final LibraryFileIconItems iconItems = (LibraryFileIconItems) libFileViews.fileIcon .getTag(); switch (mediaType) { case Academic.CONTENT_TYPE_PLAINTEXT: libFileViews.fileIcon.setImageBitmap(decodeFile(new File( Environment.getExternalStorageDirectory() + "/Allogy/Icons/text_icon.png"))); libFileViews.fileName.setText(Util.getFileNameFromPath(URI) .replace(".txt", "").replace("_", " ")); break; case (Academic.CONTENT_TYPE_PDF): libFileViews.fileIcon.setImageBitmap(BitmapFactory.decodeResource( mActivity.getResources(), R.drawable.pdf_logo)); libFileViews.fileName.setText("PDF File"); break; case (Academic.CONTENT_TYPE_LIBRARY_HTML): libFileViews.fileIcon.setImageBitmap(decodeFile(new File( Environment.getExternalStorageDirectory() + "/Allogy/Icons/html_icon.png"))); String displayText; if(extraName != null) { displayText = extraName; } else { displayText = Util.getFileNameFromPath(URI) .replace(".html", ""); } libFileViews.fileName.setText(displayText); break; } libFileViews.lessonId = lessonId; libFileViews.mediaType = mediaType; libFileViews.fileSize = fileSize; libFileViews.id = id; libFileViews.URI = URI; iconItems.path = URI; view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent iReadebook = new Intent(); LibraryFileItemViews items = (LibraryFileItemViews) v.getTag(); LibraryFileIconItems icons = (LibraryFileIconItems) items.fileIcon.getTag(); switch (items.mediaType) { case Academic.CONTENT_TYPE_LIBRARY_HTML: iReadebook.setClass(mActivity, HtmlActivity.class); Uri fileUri = Uri.fromFile(new File( Environment.getExternalStorageDirectory() + items.URI)); iReadebook.setData(fileUri); // The title for the html viewer String lastPath = fileUri.getLastPathSegment(); int extension = lastPath.lastIndexOf("."); iReadebook.putExtra(HtmlActivity.BUNDLE_ARG_TITLE, lastPath.substring(0, extension)); break; case Academic.CONTENT_TYPE_PLAINTEXT: iReadebook.putExtra(EReaderActivity.EXTRA_EBOOK_TYPE, EReaderActivity.TYPE_PLAINTEXT); iReadebook.setClass(mActivity, EReaderActivity.class); break; case Academic.CONTENT_TYPE_PDF: iReadebook.putExtra(EReaderActivity.EXTRA_EBOOK_TYPE, EReaderActivity.TYPE_PDF); iReadebook.setClass(mActivity, EReaderActivity.class); break; default: // -1 is value used is eReaderActivity to indicate unknown // file type iReadebook.putExtra(EReaderActivity.EXTRA_EBOOK_TYPE, -1); iReadebook.setClass(mActivity, EReaderActivity.class); break; } if(items.mediaType != Academic.CONTENT_TYPE_LIBRARY_HTML) { // Pass path to content to eReaderActivity if the book is not html iReadebook.putExtra(EReaderActivity.EXTRA_FILE_URI, icons.path); } mActivity.startActivity(iReadebook); } }); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View view = mInflater .inflate(R.layout.list_file_library, parent, false); LibraryFileItemViews views = new LibraryFileItemViews(); views.fileName = (TextView) view.findViewById(R.id.library_file_title); views.fileIcon = (ImageView) view.findViewById(R.id.library_file_cover); view.setTag(views); views.fileIcon.setTag(new LibraryFileIconItems()); return view; } /** * @author Thomas Vervest * @param f * @return */ private Bitmap decodeFile(File f) { Bitmap b = null; try { // Decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(f), null, o); int scale = 1; if (o.outHeight > MAX_BKCOVER_HEIGHT || o.outWidth > MAX_BKCOVER_WIDTH) { scale = (int) Math.pow( 2, (int) Math.round(Math.log(MAX_BKCOVER_HEIGHT / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5))); } // Decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; b = BitmapFactory.decodeStream(new FileInputStream(f), null, o2); } catch (FileNotFoundException e) { } return b; } private String getLocalizedFileNameFor(String unlocalized) { String test = unlocalized.toLowerCase(Locale.US); if(test.contains("level-1")) { return mActivity.getResources().getString(R.string.ptl_level_1); } else if(test.contains("level-2")) { return mActivity.getResources().getString(R.string.ptl_level_2); } else if(test.contains("level-3")) { return mActivity.getResources().getString(R.string.ptl_level_3); } else { return unlocalized; } } }