/* * Copyright (C) 2014 Michell Bak * * 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.miz.mizuu; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.miz.base.MizActivity; import com.miz.db.DbAdapterSources; import com.miz.functions.FileSource; import com.miz.utils.TypefaceUtils; import java.util.ArrayList; public class FileSources extends MizActivity { private DbAdapterSources mDatabase = MizuuApplication.getSourcesAdapter(); private ArrayList<FileSourceListItem> mItems = new ArrayList<FileSourceListItem>(); private ListView mListView; private LinearLayout mEmptyView; private ListAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mEmptyView = (LinearLayout) findViewById(R.id.noFileSources); mListView = (ListView) findViewById(R.id.listView1); mAdapter = new ListAdapter(); mListView.setAdapter(mAdapter); mListView.setEmptyView(mEmptyView); loadSources(); LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("mizuu-filesource-change")); } @Override protected int getLayoutResource() { return R.layout.filesources_layout; } private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { loadSources(); } }; @Override public void onStart() { super.onStart(); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override protected void onDestroy() { super.onDestroy(); LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); break; case R.id.add_source: addFileSource(); break; } return super.onOptionsItemSelected(item); } private void addFileSource() { Intent i = new Intent(this, AddFileSource.class); startActivity(i); } private void loadSources() { ArrayList<FileSource> sources = new ArrayList<FileSource>(); boolean hasMovies = false, hasShows = false; // Fetch all movie sources and add them to the array Cursor cursor = mDatabase.fetchAllSources(); try { while (cursor.moveToNext()) { FileSource fs = new FileSource( cursor.getLong(cursor.getColumnIndex(DbAdapterSources.KEY_ROWID)), cursor.getString(cursor.getColumnIndex(DbAdapterSources.KEY_FILEPATH)), cursor.getInt(cursor.getColumnIndex(DbAdapterSources.KEY_FILESOURCE_TYPE)), cursor.getString(cursor.getColumnIndex(DbAdapterSources.KEY_USER)), cursor.getString(cursor.getColumnIndex(DbAdapterSources.KEY_PASSWORD)), cursor.getString(cursor.getColumnIndex(DbAdapterSources.KEY_DOMAIN)), cursor.getString(cursor.getColumnIndex(DbAdapterSources.KEY_TYPE)) ); sources.add(fs); if (fs.isMovie()) hasMovies = true; if (!fs.isMovie()) hasShows = true; } } catch (Exception ignored) { } finally { cursor.close(); } mItems.clear(); if (hasMovies) { mItems.add(new FileSourceListItem(null, getString(R.string.chooserMovies), true)); for (int i = 0; i < sources.size(); i++) { if (sources.get(i).isMovie()) mItems.add(new FileSourceListItem(sources.get(i), sources.get(i).getTitle(), false)); } } if (hasShows) { mItems.add(new FileSourceListItem(null, getString(R.string.chooserTVShows), true)); for (int i = 0; i < sources.size(); i++) { if (!sources.get(i).isMovie()) mItems.add(new FileSourceListItem(sources.get(i), sources.get(i).getTitle(), false)); } } mAdapter.notifyDataSetChanged(); } public void removeSelectedSource(int id) { mDatabase.deleteSource(mItems.get(id).getFileSource().getRowId()); loadSources(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.filebrowser, menu); return true; } public class ListAdapter extends BaseAdapter { private LayoutInflater mInflater; public ListAdapter() { mInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return mItems.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { return mItems.get(position).isHeader() ? 0 : 1; } @Override public boolean isEnabled(int position) { return !mItems.get(position).isHeader(); } public View getView(final int position, View convertView, ViewGroup parent) { if (mItems.get(position).isHeader()) { convertView = mInflater.inflate(R.layout.file_source_list_header, parent, false); TextView title = (TextView) convertView.findViewById(R.id.title); title.setText(mItems.get(position).getTitle()); title.setTypeface(TypefaceUtils.getRobotoMedium(getApplicationContext())); } else { convertView = mInflater.inflate(R.layout.filesource_list, parent, false); ((TextView) convertView.findViewById(R.id.txtListTitle)).setText(mItems.get(position).getTitle()); ((TextView) convertView.findViewById(R.id.txtListTitle)).setTypeface(TypefaceUtils.getRobotoCondensedRegular(getApplicationContext())); ((TextView) convertView.findViewById(R.id.txtListPlot)).setText(mItems.get(position).getFileSource().getFilepath()); ((TextView) convertView.findViewById(R.id.txtListPlot)).setTypeface(TypefaceUtils.getRobotoLight(getApplicationContext())); ((ImageView) convertView.findViewById(R.id.traktIcon)).setImageResource(mItems.get(position).getFileSource().isMovie() ? R.drawable.ic_movie_white_24dp : R.drawable.ic_tv_white_24dp); convertView.findViewById(R.id.imageView2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { removeSelectedSource(position); } }); } return convertView; } } private class FileSourceListItem { private FileSource mFileSource; private String mTitle; private boolean mHeader; public FileSourceListItem(FileSource fileSource, String title, boolean header) { mFileSource = fileSource; mTitle = title; mHeader = header; } public FileSource getFileSource() { return mFileSource; } public String getTitle() { return mTitle; } public boolean isHeader() { return mHeader; } } }