Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes #92 : Applications view UI redesign! #106

Merged
merged 2 commits into from May 9, 2017
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions app/build.gradle
Expand Up @@ -38,6 +38,12 @@ dependencies {
compile 'de.hdodenhof:circleimageview:2.1.0'
compile 'org.apache.commons:commons-math3:3.6.1'
compile 'org.apache.commons:commons-lang3:3.5'
// Card View
compile 'com.android.support:cardview-v7:25.2.0'
// Recycler View
compile 'com.android.support:recyclerview-v7:25.2.0'
// Picasso
compile 'com.squareup.picasso:picasso:2.5.2'

testCompile 'junit:junit:4.12'
}
@@ -0,0 +1,82 @@
package org.fossasia.pslab.adapters;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import org.fossasia.pslab.items.ApplicationItem;
import org.fossasia.pslab.R;

import java.util.List;

/**
* Created by Padmal on 5/7/17.
*/

public class ApplicationAdapter extends RecyclerView.Adapter<ApplicationAdapter.Holder> {

private Context mContext;
private List<ApplicationItem> applicationList;
private final OnItemClickListener listener;

/**
* View holder for application list item
*/
public class Holder extends RecyclerView.ViewHolder {

public TextView applicationName;
public ImageView applicationIcon;

public Holder(View itemView) {
super(itemView);
this.applicationName = (TextView) itemView.findViewById(R.id.application_name);
this.applicationIcon = (ImageView) itemView.findViewById(R.id.application_icon);
}

public void setup(final ApplicationItem applicationItem, final OnItemClickListener listener) {
// Set application name
applicationName.setText(applicationItem.getApplicationName());
// Set application Icon
Picasso.with(mContext).load(applicationItem.getApplicationIcon()).into(applicationIcon);
itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
listener.onItemClick(applicationItem);
}
});
}
}

public ApplicationAdapter(Context mContext, List<ApplicationItem> applicationList, OnItemClickListener listener) {
this.mContext = mContext;
this.applicationList = applicationList;
this.listener = listener;
}

@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.application_list_item, parent, false);
return new Holder(itemView);
}

@Override
public void onBindViewHolder(Holder holder, int position) {
holder.setup(applicationList.get(position), listener);
}

@Override
public int getItemCount() {
return applicationList.size();
}

public interface OnItemClickListener {
void onItemClick(ApplicationItem item);
}

}

This file was deleted.

@@ -1,15 +1,24 @@
package org.fossasia.pslab.fragment;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.Toast;

import org.fossasia.pslab.items.ApplicationItem;
import org.fossasia.pslab.R;
import org.fossasia.pslab.adapters.ApplicationsAdapter;
import org.fossasia.pslab.adapters.ApplicationAdapter;

import java.util.ArrayList;
import java.util.List;


/**
Expand All @@ -18,21 +27,102 @@

public class ApplicationsFragment extends Fragment {

private String[] applicationsList = {"Oscilloscope", "Control", "Advance Control", "Logical Analyzer", "Data Sensor Logger", "Wireless Sensor", "Sensor QuickView", "Wireless Sensor QuickView"};
private int[] imageList = {org.fossasia.pslab.R.drawable.osc, org.fossasia.pslab.R.drawable.control, org.fossasia.pslab.R.drawable.advance, org.fossasia.pslab.R.drawable.la, org.fossasia.pslab.R.drawable.sensor, org.fossasia.pslab.R.drawable.wirelesssensor, org.fossasia.pslab.R.drawable.sensor_quickview, org.fossasia.pslab.R.drawable.wireless_sensor_quickview};
private ApplicationAdapter applicationAdapter;
private List<ApplicationItem> applicationItemList;
private Context context;

public static ApplicationsFragment newInstance() {
ApplicationsFragment applicationsFragment = new ApplicationsFragment();
return applicationsFragment;
return new ApplicationsFragment();
}

@Nullable
@Override
public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.applications_fragment, container, false);
ListView applicationsListView = (ListView) view.findViewById(org.fossasia.pslab.R.id.applicationsListView);
applicationsListView.setAdapter(new ApplicationsAdapter(getContext(), applicationsList, imageList));
// Initiate context
context = getActivity().getApplicationContext();
// Initiate resources
applicationItemList = new ArrayList<>();
applicationAdapter = new ApplicationAdapter(context, applicationItemList,
new ApplicationAdapter.OnItemClickListener() {
@Override
public void onItemClick(ApplicationItem item) {
Toast.makeText(context, item.getApplicationName(),
Toast.LENGTH_LONG).show();
}
});
// Initiate Views
initiateViews(view);
// Generate Applications
new loadList().execute();
// Return created view
return view;
}

/**
* Initiate Recycler view
*/
private void initiateViews(View view) {
// Initiate Recycler View with a Grid
RecyclerView listView = (RecyclerView) view.findViewById(R.id.applications_recycler_view);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(context, 2);
listView.setLayoutManager(mLayoutManager);
listView.setItemAnimator(new DefaultItemAnimator());
// Set adapter
listView.setAdapter(applicationAdapter);
}

/**
* Generate an array of Application Items and add them to the adapter in background
*/
private class loadList extends AsyncTask<Void, Void, Void> {

@Override
protected Void doInBackground(Void... params) {
int[] applications = new int[]{
R.drawable.osciloscope_icon,
R.drawable.control_icon,
R.drawable.advance_icon,
R.drawable.logic_analzers_icon,
R.drawable.sensor_icon,
R.drawable.wireless_sensor_icon,
R.drawable.sensor_qv_icon,
R.drawable.wireless_sensor_qv_icon};

applicationItemList.add(new ApplicationItem(
getResources().getString(R.string.oscilloscope), applications[0])
);
applicationItemList.add(new ApplicationItem(
getResources().getString(R.string.control), applications[1])
);
applicationItemList.add(new ApplicationItem(
getResources().getString(R.string.advance_control), applications[2])
);
applicationItemList.add(new ApplicationItem(
getResources().getString(R.string.logical_analyzer), applications[3])
);
applicationItemList.add(new ApplicationItem(
getResources().getString(R.string.data_sensor_logger), applications[4])
);
applicationItemList.add(new ApplicationItem(
getResources().getString(R.string.w_sensor_logger), applications[5])
);
applicationItemList.add(new ApplicationItem(
getResources().getString(R.string.sensor_qview), applications[6])
);
applicationItemList.add(new ApplicationItem(
getResources().getString(R.string.w_sensor_qview), applications[7])
);
return null;
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
// Notify the adapter that data has been fetched
applicationAdapter.notifyDataSetChanged();
}
}

}
36 changes: 36 additions & 0 deletions app/src/main/java/org/fossasia/pslab/items/ApplicationItem.java
@@ -0,0 +1,36 @@
package org.fossasia.pslab.items;

/**
* Created by Padmal on 5/7/17.
*/

public class ApplicationItem {

private String applicationName;
private int applicationIcon;

// Default constructor
public ApplicationItem() {/**/}

public ApplicationItem(String applicationName, int applicaitonIcon) {
this.applicationName = applicationName;
this.applicationIcon = applicaitonIcon;
}

public String getApplicationName() {
return applicationName;
}

public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}

public int getApplicationIcon() {
return applicationIcon;
}

public void setApplicationIcon(int applicationIcon) {
this.applicationIcon = applicationIcon;
}

}
31 changes: 31 additions & 0 deletions app/src/main/java/org/fossasia/pslab/items/SquareImageView.java
@@ -0,0 +1,31 @@
package org.fossasia.pslab.items;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
* Created by Padmal on 5/8/17.
*/

public class SquareImageView extends ImageView {
public SquareImageView(Context context) {
super(context);
}

public SquareImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public SquareImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);

int width = getMeasuredWidth();
setMeasuredDimension(width, width);
}
}
Binary file removed app/src/main/res/drawable/advance.png
Binary file not shown.
Binary file added app/src/main/res/drawable/advance_icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed app/src/main/res/drawable/control.png
Binary file not shown.
Binary file added app/src/main/res/drawable/control_icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed app/src/main/res/drawable/la.PNG
Binary file not shown.
Binary file added app/src/main/res/drawable/logic_analzers_icon.PNG
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed app/src/main/res/drawable/osc.png
Binary file not shown.
Binary file added app/src/main/res/drawable/osciloscope_icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed app/src/main/res/drawable/sensor_quickview.png
Binary file not shown.
Binary file added app/src/main/res/drawable/sensor_qv_icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed app/src/main/res/drawable/wirelesssensor.png
Binary file not shown.