package com.bitmovin.bitcodin.Job;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bitmovin.bitcodin.R;
import com.bitmovin.bitcodin.Settings;
import com.bitmovin.bitcodin.Thumbnail.ThumbnailManager;
import com.bitmovin.bitcodin.api.BitcodinApi;
import java.util.ArrayList;
@SuppressWarnings("FieldCanBeLocal")
public class JobManager implements JobLoaderListener {
private LinearLayout jobContainerLayout;
private BitcodinApi mBitcodinApi;
private JobLoader mJobLoader;
private ThumbnailManager mThumbnailManager;
private Context context;
private ArrayList<JobManagerListener> listeners;
private ArrayList<BitcodinJob> mJobs;
private LayoutInflater mLayoutInflater;
public JobManager(Context context, LinearLayout jobContainerLayout, String apiKey) {
this.jobContainerLayout = jobContainerLayout;
this.context = context;
this.mThumbnailManager = new ThumbnailManager(context);
this.listeners = new ArrayList<>();
this.mBitcodinApi = new BitcodinApi(apiKey);
this.mJobLoader = new JobLoader(this.mBitcodinApi, this, this.mThumbnailManager);
this.mLayoutInflater = (LayoutInflater)
this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addListener(JobManagerListener listener) {
if (this.listeners != null) {
this.listeners.add(listener);
}
}
public void loadJobs(int page) {
this.mJobLoader.loadPage(page);
if (this.listeners != null) {
for (JobManagerListener listener : this.listeners) {
listener.onStartLoading();
}
}
}
@Override
public void onNumJobsAvailable(long numJobs, long perPage) {
if (this.listeners != null) {
for (JobManagerListener listener : this.listeners) {
listener.onNumJobsAvailable(numJobs, perPage);
}
}
}
@Override
public void onJobLoaded(ArrayList<BitcodinJob> jobs) {
this.mJobs = jobs;
if (this.jobContainerLayout.getChildCount() > 0) {
this.jobContainerLayout.post(new Runnable() {
@Override
public void run() {
jobContainerLayout.removeAllViews();
}
});
}
for (final BitcodinJob job : this.mJobs) {
final View currentView = createJobView(job);
this.jobContainerLayout.post(new Runnable() {
@Override
public void run() {
jobContainerLayout.addView(currentView);
}
});
}
if (this.listeners != null) {
for (JobManagerListener listener : this.listeners) {
listener.onJobsLoaded(jobs.size());
}
}
}
@Override
public void onJobChanged(ArrayList<BitcodinJob> jobs) {
onJobLoaded(jobs);
}
private View createJobView(BitcodinJob job) {
View jobWrapper = this.mLayoutInflater.inflate(
R.layout.job_item,
this.jobContainerLayout,
false
);
LinearLayout sourceWrapper = (LinearLayout) jobWrapper.findViewById(R.id.sourceContainer);
ImageView thumbnailIV = (ImageView) jobWrapper.findViewById(R.id.jobThumbnailIV);
TextView jobIdTV = (TextView) jobWrapper.findViewById(R.id.jobIdTV);
TextView jobInputfileTV = (TextView) jobWrapper.findViewById(R.id.jobInputfileTV);
thumbnailIV.setImageDrawable(this.mThumbnailManager.get(job.getThumbnail()));
jobIdTV.setText("" + job.getId());
jobInputfileTV.setText("" + job.getInputFilename());
if (!Settings.DASH_ONLY) {
for (final BitcodinJob.Source mSource : job.getSources()) {
if (mSource.getType() != BitcodinJob.Source.Type.OTHER) {
sourceWrapper.addView(createSourceView(job, mSource, sourceWrapper));
}
}
}
jobWrapper.setOnClickListener(new OnJobItemClickListener(job, this.listeners));
return jobWrapper;
}
private View createSourceView(BitcodinJob job, BitcodinJob.Source src, LinearLayout wrapper) {
View sourceView = this.mLayoutInflater.inflate(R.layout.source_item, wrapper, false);
TextView srcType = (TextView) sourceView.findViewById(R.id.typeTV);
TextView srcUrl = (TextView) sourceView.findViewById(R.id.urlTV);
if (src.getTypeStr() == "HLS") {
srcType.setText(src.getTypeStr() + " (video only)");
} else {
srcType.setText(src.getTypeStr());
}
srcUrl.setText(src.getSrcUrl());
sourceView.setOnClickListener(new OnSourceItemClickListener(job, src, this.listeners));
return sourceView;
}
@Override
public void onProgressChanged(double progress) {
if (this.listeners != null) {
for (JobManagerListener listener : this.listeners) {
listener.onProgressChanged(progress);
}
}
}
}