Skip to content

Commit

Permalink
Replacing the ListView with Recycler View. (#34)
Browse files Browse the repository at this point in the history
* Replaced the share_files listView with recyclerView

* Replaced the share_apps listView with recyclerView
  • Loading branch information
octacode authored and cpg committed Mar 14, 2017
1 parent 63bb7ca commit af02dd2
Show file tree
Hide file tree
Showing 8 changed files with 170 additions and 134 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ dependencies {

compile "com.android.support:support-v4:25.1.1"
compile "com.android.support:support-v13:25.1.1"
compile "com.android.support:recyclerview-v7:25.1.1"
compile 'com.android.support:appcompat-v7:25.1.1'
compile "com.github.dmytrodanylyk.android-process-button:library:1.0.4"
compile "com.jakewharton.byteunits:byteunits:0.9.1"
Expand Down
93 changes: 47 additions & 46 deletions src/main/java/org/amahi/anywhere/adapter/ServerAppsAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
package org.amahi.anywhere.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
Expand All @@ -31,6 +32,8 @@
import com.squareup.picasso.Picasso;

import org.amahi.anywhere.R;
import org.amahi.anywhere.bus.AppSelectedEvent;
import org.amahi.anywhere.bus.BusProvider;
import org.amahi.anywhere.server.model.ServerApp;

import java.util.Collections;
Expand All @@ -40,34 +43,68 @@
* Apps adapter. Visualizes web apps
* for the {@link org.amahi.anywhere.fragment.ServerAppsFragment}.
*/
public class ServerAppsAdapter extends BaseAdapter
public class ServerAppsAdapter extends RecyclerView.Adapter<ServerAppsAdapter.ServerAppsViewHolder>
{
private final LayoutInflater layoutInflater;

private List<ServerApp> apps;
private Context mContext;

public ServerAppsAdapter(Context context) {
this.layoutInflater = LayoutInflater.from(context);

mContext = context;
this.apps = Collections.emptyList();
}

public void replaceWith(List<ServerApp> apps) {
this.apps = apps;
class ServerAppsViewHolder extends RecyclerView.ViewHolder{
TextView text;
ImageView logo;
ServerAppsViewHolder(View itemView) {
super(itemView);
text = (TextView)itemView.findViewById(R.id.text);
logo = (ImageView)itemView.findViewById(R.id.logo);
}
}

notifyDataSetChanged();
@Override
public ServerAppsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ServerAppsViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.view_server_app_item, parent, false));
}

@Override
public void onBindViewHolder(final ServerAppsViewHolder holder, int position) {
holder.text.setText(apps.get(position).getName());
if(TextUtils.isEmpty(apps.get(position).getLogoUrl()))
holder.logo.setImageResource(R.drawable.ic_app_logo);
else {
Picasso
.with(mContext)
.load(apps.get(position).getLogoUrl())
.fit()
.centerInside()
.error(R.drawable.ic_app_logo)
.into(holder.logo);
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BusProvider.getBus().post(new AppSelectedEvent(apps.get(holder.getAdapterPosition())));
}
});
}

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

public void replaceWith(List<ServerApp> apps) {
this.apps = apps;

notifyDataSetChanged();
}

public List<ServerApp> getItems() {
return apps;
}

@Override
public ServerApp getItem(int position) {
return apps.get(position);
}
Expand All @@ -76,40 +113,4 @@ public ServerApp getItem(int position) {
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View view, ViewGroup container) {
ServerApp app = getItem(position);

if (view == null) {
view = newView(container);
}

bindView(app, view);

return view;
}

private View newView(ViewGroup container) {
return layoutInflater.inflate(R.layout.view_server_app_item, container, false);
}

private void bindView(ServerApp app, View view) {
ImageView appLogoView = (ImageView) view.findViewById(R.id.logo);
TextView appTextView = (TextView) view.findViewById(R.id.text);

if (TextUtils.isEmpty(app.getLogoUrl())) {
appLogoView.setImageResource(R.drawable.ic_app_logo);
} else {
Picasso
.with(view.getContext())
.load(app.getLogoUrl())
.fit()
.centerInside()
.error(R.drawable.ic_app_logo)
.into(appLogoView);
}

appTextView.setText(app.getName());
}
}
71 changes: 33 additions & 38 deletions src/main/java/org/amahi/anywhere/adapter/ServerSharesAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,16 @@
package org.amahi.anywhere.adapter;

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.BaseAdapter;
import android.widget.TextView;

import org.amahi.anywhere.R;
import org.amahi.anywhere.bus.BusProvider;
import org.amahi.anywhere.bus.ShareSelectedEvent;
import org.amahi.anywhere.server.model.ServerShare;

import java.util.Collections;
Expand All @@ -36,15 +39,40 @@
* Shares adapter. Visualizes shares
* for the {@link org.amahi.anywhere.fragment.ServerSharesFragment}.
*/
public class ServerSharesAdapter extends BaseAdapter
public class ServerSharesAdapter extends RecyclerView.Adapter<ServerSharesAdapter.ServerShareViewHolder>
{
private final LayoutInflater layoutInflater;

private List<ServerShare> shares;

public ServerSharesAdapter(Context context) {
this.layoutInflater = LayoutInflater.from(context);
class ServerShareViewHolder extends RecyclerView.ViewHolder{
TextView textView;
ServerShareViewHolder(View itemView) {
super(itemView);
textView = (TextView)itemView.findViewById(R.id.text);
}
}

@Override
public ServerShareViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ServerShareViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.view_server_share_item, parent, false));
}

@Override
public void onBindViewHolder(final ServerShareViewHolder holder, int position) {
holder.textView.setText(shares.get(position).getName());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BusProvider.getBus().post(new ShareSelectedEvent(shares.get(holder.getAdapterPosition())));
}
});
}

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

public ServerSharesAdapter(Context context) {
this.shares = Collections.emptyList();
}

Expand All @@ -54,16 +82,10 @@ public void replaceWith(List<ServerShare> shares) {
notifyDataSetChanged();
}

@Override
public int getCount() {
return shares.size();
}

public List<ServerShare> getItems() {
return shares;
}

@Override
public ServerShare getItem(int position) {
return shares.get(position);
}
Expand All @@ -72,31 +94,4 @@ public ServerShare getItem(int position) {
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View view, ViewGroup container) {
ServerShare share = getItem(position);

if (view == null) {
view = newView(container);
}

bindView(share, view);

return view;
}

private View newView(ViewGroup container) {
return layoutInflater.inflate(R.layout.view_server_share_item, container, false);
}

private void bindView(ServerShare share, View view) {
TextView shareView = (TextView) view;

shareView.setText(getShareName(share));
}

private String getShareName(ServerShare share) {
return share.getName();
}
}
57 changes: 36 additions & 21 deletions src/main/java/org/amahi/anywhere/fragment/ServerAppsFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,22 @@

package org.amahi.anywhere.fragment;

import android.app.ListFragment;
import android.app.Fragment;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
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.LinearLayout;

import com.squareup.otto.Subscribe;

import org.amahi.anywhere.AmahiApplication;
import org.amahi.anywhere.R;
import org.amahi.anywhere.adapter.ServerAppsAdapter;
import org.amahi.anywhere.bus.AppSelectedEvent;
import org.amahi.anywhere.bus.BusProvider;
import org.amahi.anywhere.bus.ServerAppsLoadFailedEvent;
import org.amahi.anywhere.bus.ServerAppsLoadedEvent;
Expand All @@ -49,7 +51,7 @@
/**
* Apps fragment. Shows apps list.
*/
public class ServerAppsFragment extends ListFragment
public class ServerAppsFragment extends Fragment
{
private static final class State
{
Expand All @@ -59,12 +61,31 @@ private State() {
public static final String APPS = "apps";
}

private ServerAppsAdapter mServerAppsAdapter;

private RecyclerView mRecyclerView;

private LinearLayout mEmptyLinearLayout;

@Inject
ServerClient serverClient;

@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {
return layoutInflater.inflate(R.layout.fragment_server_apps, container, false);
View rootView = layoutInflater.inflate(R.layout.fragment_server_apps, container, false);

mRecyclerView = (RecyclerView)rootView.findViewById(R.id.list_server_apps);

mServerAppsAdapter = new ServerAppsAdapter(getActivity());

mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false));

mEmptyLinearLayout = (LinearLayout)rootView.findViewById(R.id.empty_server_apps);

mRecyclerView.addItemDecoration(new
DividerItemDecoration(getActivity(),
DividerItemDecoration.VERTICAL));
return rootView;
}

@Override
Expand All @@ -86,7 +107,7 @@ private void setUpApps(Bundle state) {
}

private void setUpAppsAdapter() {
setListAdapter(new ServerAppsAdapter(getActivity()));
mRecyclerView.setAdapter(mServerAppsAdapter);
}

private void setUpAppsContent(Bundle state) {
Expand All @@ -103,18 +124,23 @@ private boolean isAppsStateValid(Bundle state) {

private void setUpAppsState(Bundle state) {
List<ServerApp> apps = state.getParcelableArrayList(State.APPS);
if(apps!=null) {
mEmptyLinearLayout.setVisibility(View.GONE);
setUpAppsContent(apps);

setUpAppsContent(apps);

showAppsContent();
showAppsContent();
}
else{
mEmptyLinearLayout.setVisibility(View.VISIBLE);
}
}

private void setUpAppsContent(List<ServerApp> apps) {
getAppsAdapter().replaceWith(apps);
}

private ServerAppsAdapter getAppsAdapter() {
return (ServerAppsAdapter) getListAdapter();
return mServerAppsAdapter;
}

private void showAppsContent() {
Expand Down Expand Up @@ -148,17 +174,6 @@ private void showAppsError() {
ViewDirector.of(this, R.id.animator).show(R.id.error);
}

@Override
public void onListItemClick(ListView appsListView, View appView, int appPosition, long appId) {
super.onListItemClick(appsListView, appView, appPosition, appId);

startAppOpening(getAppsAdapter().getItem(appPosition));
}

private void startAppOpening(ServerApp app) {
BusProvider.getBus().post(new AppSelectedEvent(app));
}

@Override
public void onResume() {
super.onResume();
Expand Down

0 comments on commit af02dd2

Please sign in to comment.