Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,42 @@
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatImageView;
import android.text.Editable;
import android.text.Html;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.squareup.picasso.Picasso;

import org.xml.sax.XMLReader;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import hamletleon.empleado_androidjava.R;
import hamletleon.empleado_androidjava.app.shared.IApiService;
import hamletleon.empleado_androidjava.infrastructure.api.ApiUtils;
import hamletleon.empleado_androidjava.infrastructure.entities.Job;
import hamletleon.empleado_androidjava.infrastructure.entities.JobDetails;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

import static hamletleon.empleado_androidjava.infrastructure.utils.tools.SendEmailIntent;

public class JobDetailsActivity extends AppCompatActivity {
@BindView(R.id.scrollView)
View mScrollView;
@BindView(R.id.progress)
View mProgress;

// Obsolete Design
@BindView(R.id.oldView)
View mOldView;
@BindView(R.id.jobTitle)
TextView mJobTitle;
@BindView(R.id.jobType)
Expand All @@ -26,39 +53,144 @@ public class JobDetailsActivity extends AppCompatActivity {
@BindView(R.id.jobDate)
TextView mJobDate;

// New Design
@BindView(R.id.newView)
View mNewView;
@BindView(R.id.companyLogo)
AppCompatImageView mCompanyLogo;
@BindView(R.id.companyName)
TextView mCompanyName;
@BindView(R.id.companyLocation)
TextView mCompanyLocation;
@BindView(R.id.companyWebsite)
TextView mCompanyWebsite;
@BindView(R.id.jobTitleNew)
TextView mJobTitleNew;
@BindView(R.id.jobCategoryNew)
TextView mJobCategoryNew;
@BindView(R.id.jobDetails)
TextView mJobDetailsTextView;
@BindView(R.id.jobContactEmail)
TextView mJobContactEmail;

private IApiService mApiService;
private Job mJob;
private JobDetails mJobDetails;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_job_details);
ButterKnife.bind(this);
Intent intent = getIntent();

Job mJob;
if (intent != null && intent.getExtras() != null && intent.getExtras().containsKey(Job.class.getSimpleName())) {
mJob = intent.getExtras().getParcelable(Job.class.getSimpleName());
if (mJob == null) return;
} else {
Toast.makeText(this, "FATAL ERROR!", Toast.LENGTH_SHORT).show();
return;
}
mApiService = ApiUtils.getApiService();

if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
setTitle("Detalles de puesto");

if (mJob.JobURI != null) {
requestJobDetails(mJob.JobURI);
} else {
setOldView();
}
}

private void setOldView() {
mJobTitle.setText(mJob.jobTitle);
mJobType.setText(mJob.jobType);
mJobLocation.setText(mJob.jobLocation);
mJobCompany.setText(mJob.jobCompany);
mJobCategory.setText(mJob.jobCategory);
mJobDate.setText(mJob.jobDate);
mProgress.setVisibility(View.GONE);
mOldView.setVisibility(View.VISIBLE);
}

private void requestJobDetails(String jobUri) {
mApiService.getJobsDetails(jobUri.replaceFirst("/", "")).enqueue(new Callback<JobDetails>() {
@Override
public void onResponse(Call<JobDetails> call, Response<JobDetails> response) {
if (response.isSuccessful() && response.body() != null) {
mJobDetails = response.body();
setNewView();
} else {
setOldView();
Toast.makeText(JobDetailsActivity.this, "Error: " + response.message(), Toast.LENGTH_SHORT).show();
}
}

@Override
public void onFailure(Call<JobDetails> call, Throwable t) {
setOldView();
Toast.makeText(JobDetailsActivity.this, "Error -> " + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}

private void setNewView() {
mScrollView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

if (mJobDetails.companyLogo != null) {
String imgUrl;
if (mJobDetails.companyLogo.contains("http") || mJobDetails.companyLogo.contains("www."))
imgUrl = mJobDetails.companyLogo.trim();
else imgUrl = "http://www.emplea.do" + mJobDetails.companyLogo.trim();
Picasso.with(JobDetailsActivity.this).load(imgUrl).into(mCompanyLogo);
}

mCompanyName.setText(mJobDetails.companyName.trim());
mCompanyLocation.setText(mJobDetails.jobLocation.trim());

if (mJobDetails.companyWebsite != null)
mCompanyWebsite.setText(mJobDetails.companyWebsite.trim());
else mCompanyWebsite.setVisibility(View.GONE);
if (mJobDetails.jobTitle != null)
mJobTitleNew.setText(mJobDetails.jobTitle.trim());
else mJobTitleNew.setText(R.string.notSpecified);
if (mJobDetails.jobCategory != null)
mJobCategoryNew.setText(mJobDetails.jobCategory.trim());
else mJobCategoryNew.setText(R.string.notSpecified);
if (mJobDetails.jobDetails != null)
mJobDetailsTextView.setText(Html.fromHtml(mJobDetails.jobDetails.trim(), null, new UlTagHandler()));
else mJobDetailsTextView.setText(R.string.notSpecified);
if (mJobDetails.jobContacEmail != null)
mJobContactEmail.setText(String.format(getString(R.string.contactEmail), mJobDetails.jobContacEmail.trim()));
else mJobContactEmail.setText(R.string.notContactEmail);

mProgress.setVisibility(View.GONE);
mNewView.setVisibility(View.VISIBLE);
}

@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}

@OnClick(R.id.jobContactLayout)
public void OnContactLayoutClicked() {
SendEmailIntent(JobDetailsActivity.this, mJobDetails.jobContacEmail, "CV Puesto - " + mJobDetails.jobTitle,
"Saludos,\nEstoy interesado en el puesto de trabajo (" + mJobDetails.jobTitle + ")." +
"\n\nLe adjunto mi CV para que evalue si soy un candidato pertinente para el puesto." +
"\n\nGracias anteladas por su atención.\nQue tenga buen resto del día.");
}

public class UlTagHandler implements Html.TagHandler {
@Override
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
if (tag.equals("ul") && !opening) output.append("\n");
if (tag.equals("li") && opening) output.append("\n•\t");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
Expand Down Expand Up @@ -83,8 +84,11 @@ private void restorePreviousState(Bundle savedInstanceState) {
mJobCategorySpinner.setEnabled(savedInstanceState.getBoolean("SAVED_SPINNER_ENABLED", true));
if (list != null && list.size() != 0) setJobsList(list);
else requestJobs();
if (mRecyclerView.getLayoutManager() != null)
if (mRecyclerView.getLayoutManager() != null) {
mRecyclerView.getLayoutManager().onRestoreInstanceState(listState);
mRecyclerView.clearOnScrollListeners();
setScrollListener((LinearLayoutManager) mRecyclerView.getLayoutManager());
}
if (mProgress.getVisibility() == View.VISIBLE) {
mProgress.setVisibility(View.GONE);
mRecyclerView.setVisibility(View.VISIBLE);
Expand All @@ -95,7 +99,7 @@ private void restorePreviousState(Bundle savedInstanceState) {
private void requestJobs() {
CallUtil.enqueueWithRetry(mApiService.getJobsByCriteria(mCriteria.getMap()), new Callback<List<Job>>() {
@Override
public void onResponse(Call<List<Job>> call, Response<List<Job>> response) {
public void onResponse(@NonNull Call<List<Job>> call, @NonNull Response<List<Job>> response) {
if (response.isSuccessful() && response.body() != null) {
setJobsList(response.body());
if (mProgress.getVisibility() == View.VISIBLE) {
Expand All @@ -109,7 +113,7 @@ public void onResponse(Call<List<Job>> call, Response<List<Job>> response) {
}

@Override
public void onFailure(Call<List<Job>> call, Throwable t) {
public void onFailure(@NonNull Call<List<Job>> call, @NonNull Throwable t) {
Toast.makeText(MainActivity.this, "Error Fatal - " + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
Expand All @@ -118,15 +122,16 @@ private void setJobsList(List<Job> list) {
if (list != null && list.size() != 0) {
if (mAdapter == null) {
mAdapter = new JobsAdapter(list, mCriteria);
LinearLayoutManager manager = new LinearLayoutManager(this);
RecyclerView.LayoutManager manager = mRecyclerView.getLayoutManager();
if (manager == null) manager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(manager);
mRecyclerView.setAdapter(mAdapter);
setScrollListener(manager);
setScrollListener((LinearLayoutManager) manager);
} else {
mAdapter.onSearchPagination(list, mCriteria);
}
if (list.size() == mCriteria.PageSize) mCriteria.page++;
else endPageReached = true;
else if (list.size() < mCriteria.PageSize) endPageReached = true;
}
}
private void setScrollListener(final LinearLayoutManager manager) {
Expand All @@ -139,6 +144,7 @@ public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
}
}
};
mScrollListener.setCurrentPage(mCriteria.page);
assert mRecyclerView != null;
mRecyclerView.addOnScrollListener(mScrollListener);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
import java.util.Map;

import hamletleon.empleado_androidjava.infrastructure.entities.Job;
import hamletleon.empleado_androidjava.infrastructure.entities.JobDetails;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
import retrofit2.http.QueryMap;

/**
Expand All @@ -16,4 +18,7 @@
public interface IApiService {
@GET("empleos.json")
Call<List<Job>> getJobsByCriteria(@QueryMap Map<String, Object> criteria);

@GET("{jobUri}.json")
Call<JobDetails> getJobsDetails(@Path(value = "jobUri", encoded = true) String jobUri);
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public Job[] newArray(int size) {
private static transient SimpleDateFormat dateFormat = new SimpleDateFormat("dd MM 'de' yyyy", Locale.ENGLISH);
public String jobTitle;
public String JobLink;
public String JobURI;
public String jobCompany;
public String jobLocation;
public String jobDate;
Expand All @@ -37,6 +38,7 @@ public Job[] newArray(int size) {
protected Job(Parcel in) {
jobTitle = in.readString();
JobLink = in.readString();
JobURI = in.readString();
jobCompany = in.readString();
jobLocation = in.readString();
jobDate = in.readString();
Expand All @@ -57,6 +59,7 @@ public int describeContents() {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(jobTitle);
dest.writeString(JobLink);
dest.writeString(JobURI);
dest.writeString(jobCompany);
dest.writeString(jobLocation);
dest.writeString(jobDate);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package hamletleon.empleado_androidjava.infrastructure.entities;

import android.os.Parcel;
import android.os.Parcelable;

/**
* Created by hsantana on 28/11/2017.
*/

public class JobDetails implements Parcelable {
public static final Creator<JobDetails> CREATOR = new Creator<JobDetails>() {
@Override
public JobDetails createFromParcel(Parcel in) {
return new JobDetails(in);
}

@Override
public JobDetails[] newArray(int size) {
return new JobDetails[size];
}
};
public String jobTitle;
public String jobLocation;
public String jobCategory;
public String jobDetails;
public String jobContacEmail;
public String companyName;
public String companyWebsite;
public String companyLogo;

public JobDetails() {
}

private JobDetails(Parcel in) {
jobTitle = in.readString();
jobLocation = in.readString();
jobCategory = in.readString();
jobDetails = in.readString();
jobContacEmail = in.readString();
companyName = in.readString();
companyWebsite = in.readString();
companyLogo = in.readString();
}

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(jobTitle);
dest.writeString(jobLocation);
dest.writeString(jobCategory);
dest.writeString(jobDetails);
dest.writeString(jobContacEmail);
dest.writeString(companyName);
dest.writeString(companyWebsite);
dest.writeString(companyLogo);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ public EndlessRecyclerViewScrollListener(StaggeredGridLayoutManager layoutManage
visibleThreshold = visibleThreshold * layoutManager.getSpanCount();
}

public void setCurrentPage(int page) {
currentPage = page;
}

public int getLastVisibleItem(int[] lastVisibleItemPositions) {
int maxSize = 0;
for (int i = 0; i < lastVisibleItemPositions.length; i++) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ public static Retrofit getClient(String baseUrl) {
// interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
// .addInterceptor(interceptor)
.connectTimeout(2, TimeUnit.MINUTES)
.writeTimeout(2, TimeUnit.MINUTES)
.readTimeout(2, TimeUnit.MINUTES)
.connectTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
Expand Down
Loading