<repo_name>samwu4166/LibraAssist<file_sep>/app/src/main/java/com/writerwriter/libraassist/AccountListAdapter.java
package com.writerwriter.libraassist;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.auth.FirebaseAuth;
import com.ramotion.foldingcell.FoldingCell;

import java.util.List;

/**
 * Created by Larry on 2017/12/10.
 */

public class AccountListAdapter extends RecyclerView.Adapter<AccountListAdapter.ViewHolder> {
    private List<AccountUnit> accountList;
    private Context mContext;

    public static class ViewHolder extends RecyclerView.ViewHolder{
        public TextView account;
        public TextView libraryName;
        public EditText enter_account;
        public EditText enter_password;
        public Button log_in;
        public Button log_out;
        public ImageView image;

        public ViewHolder(View itemView){
            super(itemView);

            account = (TextView)itemView.findViewById(R.id.account);
            libraryName = (TextView)itemView.findViewById(R.id.library_name);
            enter_account = (EditText)itemView.findViewById(R.id.enter_account);
            enter_password = (EditText)itemView.findViewById(R.id.enter_password);
            log_in = (Button)itemView.findViewById(R.id.log_in_btn);
            log_out = (Button)itemView.findViewById(R.id.log_out_btn);
            image = (ImageView)itemView.findViewById(R.id.library_login_icon);
        }
    }
    public AccountListAdapter(List<AccountUnit> accountList, Context context){
        this.accountList = accountList;
        this.mContext = context;
    }

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

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Context context = parent.getContext();
        View account_list_view = LayoutInflater.from(context).inflate(R.layout.account_list_card,parent,false);
        ViewHolder viewHolder = new ViewHolder(account_list_view);
        /*account_list_view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final FoldingCell fc = (FoldingCell) view.findViewById(R.id.account_cardview);
                fc.toggle(false);
            }
        });*/
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        final AccountUnit accountUnit = accountList.get(position);
        switch ((accountUnit.getLibraryName())){
            case "國立台北大學圖書館":
                holder.image.setImageResource(R.drawable.ntpu_lib);
                holder.image.setMaxHeight(holder.image.getWidth()*960/1920);
                break;
            case "新北市立圖書館":
                holder.image.setImageResource(R.drawable.ntc_lib);
                holder.image.setMaxHeight(holder.image.getWidth()*472/1280);
                break;
            case "台北市立圖書館":
                holder.image.setImageResource(R.drawable.tc_lib);
                holder.image.setMaxHeight(holder.image.getWidth()*960/1920);
                break;
        }
        holder.libraryName.setText(accountUnit.getLibraryName());
        holder.account.setText(accountUnit.getAccount());
        holder.log_in.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!holder.enter_account.getText().toString().isEmpty() && !holder.enter_account.getText().toString().isEmpty()) {
                    switch (accountUnit.getLibraryName()) {
                        case "國立台北大學圖書館":
                            AccountManager.Instance.SendUpdateAccount(AccountManager.NTPU_LIB_KEY,
                                    holder.enter_account.getText().toString(),
                                    holder.enter_password.getText().toString());
                            break;
                        case "新北市立圖書館":
                            AccountManager.Instance.SendUpdateAccount(AccountManager.NEWTAIPEI_LIB_KEY,
                                    holder.enter_account.getText().toString(),
                                    holder.enter_password.getText().toString());
                            break;
                        case "台北市立圖書館":
                            AccountManager.Instance.SendUpdateAccount(AccountManager.TAIPEI_LIB_KEY,
                                    holder.enter_account.getText().toString(),
                                    holder.enter_password.getText().toString());
                            break;
                    }
                }
                else if(holder.enter_account.getText().toString().isEmpty() || holder.enter_account.getText().toString().isEmpty()){
                    Toast.makeText(mContext,"請輸入完整的帳號和密碼。",Toast.LENGTH_SHORT).show();
                }
            }
        });
        holder.log_out.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch(accountUnit.getLibraryName()){
                    case "國立台北大學圖書館":
                        AccountManager.Instance.SendDeleteAccount(AccountManager.NTPU_LIB_KEY);
                        break;
                    case "新北市立圖書館":
                        AccountManager.Instance.SendDeleteAccount(AccountManager.NEWTAIPEI_LIB_KEY);
                        break;
                    case "台北市立圖書館":
                        AccountManager.Instance.SendDeleteAccount(AccountManager.TAIPEI_LIB_KEY);
                        break;
                }
            }
        });
        if (accountUnit.getState() == AccountUnit.PENDING){
            holder.account.setText("驗證帳號密碼中...");
        }
        else if(accountUnit.getState() == AccountUnit.ERROR){
            holder.account.setText("帳號密碼驗證失敗");
        }

        if(FirebaseAuth.getInstance().getCurrentUser() != null){
            holder.log_in.setEnabled(true);
        }
        else{
            holder.log_in.setEnabled(false);
        }
        holder.itemView.setTag(position);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(accountList.get(position).getState() != AccountUnit.PENDING) {
                    final FoldingCell fc = (FoldingCell) view.findViewById(R.id.account_cardview);
                    fc.toggle(false);
                }
            }
        });

    }

}
<file_sep>/app/src/main/java/com/writerwriter/libraassist/Sub2BorrowFragment.java
package com.writerwriter.libraassist;

import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.writerwriter.libraassist.BorrowBookAdapter;
import com.writerwriter.libraassist.BorrowBookUnit;
import com.writerwriter.libraassist.R;
import com.writerwriter.libraassist.*;

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

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
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 java.util.ArrayList;
import java.util.List;


public class Sub2BorrowFragment extends Fragment {
    private RecyclerView borrowListView;
    private LinearLayoutManager linearLayoutManager;
    public Sub2BorrowFragment() {}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_sub2_borrow, container, false);

        BorrowBookAdapter adapter = new BorrowBookAdapter(AccountManager.Instance.borrowedBookList,
                getContext());
        borrowListView = v.findViewById(R.id.borrow_book_recyclerView2);
        borrowListView.setHasFixedSize(true);
        linearLayoutManager = new LinearLayoutManager(getActivity());
        borrowListView.setLayoutManager(linearLayoutManager);
        borrowListView.setAdapter(adapter);

        return v;
    }
}
<file_sep>/app/src/main/java/com/writerwriter/libraassist/TagAdapter.java
package com.writerwriter.libraassist;

import android.content.Context;
import android.support.annotation.NonNull;
import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.adapters.BaseSwipeAdapter;

import org.w3c.dom.Text;

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

/**
 * Created by Larry on 2017/12/24.
 */

public class TagAdapter extends BaseSwipeAdapter{
    private List<TagUnit> list;
    private Context mContext;

    public TagAdapter(Context mContext, List<TagUnit> list) {
        this.mContext = mContext;
        this.list = list;
    }

    @Override
    public int getSwipeLayoutResourceId(int position) {
        return R.id.tag_item;
    }

    //ATTENTION: Never bind listener or fill values in generateView.
    //           You have to do that in fillValues method.
    @Override
    public View generateView(int position, ViewGroup parent) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.tag_item, null);
        return view;
    }

    @Override
    public void fillValues(final int position, View convertView) {
        TextView t = (TextView)convertView.findViewById(R.id.tag_text);
        t.setText(list.get(position).getTag_text());
        TextView t2 = (TextView)convertView.findViewById(R.id.tag_pages);
        t2.setText(list.get(position).getTag_pages());
        final SwipeLayout swipeLayout = (SwipeLayout)convertView.findViewById(getSwipeLayoutResourceId(position));
        swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown);
        swipeLayout.addDrag(SwipeLayout.DragEdge.Left, convertView.findViewById(R.id.bottom_wrapper));
        Button remove_btn = (Button)convertView.findViewById(R.id.remove_btn);
        Button edit_btn = (Button)convertView.findViewById(R.id.edit_btn);
        remove_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //list.remove(position);
                //notifyDataSetChanged();
                Sub3BorrowFragment.Instance.UpdateBookmark(list.get(position).getTag_text(), "");
                swipeLayout.close();
            }
        });
        edit_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new MaterialDialog.Builder(mContext)
                        .title("修改書籤")
                        .positiveText("確認")
                        .negativeText("取消")
                        .inputType(InputType.TYPE_CLASS_NUMBER)
                        .input("輸入頁數:", "", new MaterialDialog.InputCallback() {
                            @Override
                            public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {
                                //list.get(position).setTag_pages(input.toString());
                                //notifyDataSetChanged();
                                Sub3BorrowFragment.Instance.UpdateBookmark(list.get(position).getTag_text(), input.toString());
                            }
                        })
                        .show();
            }
        });
    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
}
<file_sep>/app/src/main/java/com/writerwriter/libraassist/CollectionSearchResultUnit.java
package com.writerwriter.libraassist;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;

import java.io.InputStream;
import java.util.HashMap;

/**
 * Created by Larry on 2017/12/12.
 */

public class CollectionSearchResultUnit {
    private static final String NULL_TITLE = "取得資料中...";
    private static final String NULL_IMG = "https://www.cmswing.com/u/avatar/131";
    private static final String ERROR_IMG = "http://www.51allout.co.uk/wp-content/uploads/2012/02/Image-not-found.gif";

    private String isbn;
    private String title = NULL_TITLE;
    private String author = NULL_IMG;
    private String img;
    private String publish_year;
    private String publisher;
    private String location;
    private String storage;
    private String link;
    private String searchState = "null";

    public CollectionSearchResultUnit() {
    }

    public CollectionSearchResultUnit(HashMap<String, String> data) {
        SetInfo(data);
    }

    public void SetInfo(HashMap<String, String> data) {
        if(data.containsKey("isbn")) isbn = data.get("isbn");
        if(data.containsKey("title")) title = data.get("title");
        if(data.containsKey("author")) author = data.get("author");
        if(data.containsKey("img")) img = data.get("img");
        if(data.containsKey("publish_year")) publish_year = data.get("publish_year");
        if(data.containsKey("publisher")) publisher = data.get("publisher");
        if(data.containsKey("link")) link = data.get("link");
        if(data.containsKey("location")) location = data.get("location");
        if(data.containsKey("storage")) storage = data.get("storage");
        if(data.containsKey("searchState")) searchState = data.get("searchState");

        if (img.equals("")) img = ERROR_IMG;
    }

    public String getImg() { return img; }

    public String getTitle() { return title; }

    public String getAuthor() { return author; }

    public String getLibrary() { return location; }

    public String getLink() { return link; }

    public String getIsbn() {
        return isbn;
    }

    public String getPublish_year() {
        return publish_year;
    }

    public String getPublisher() {
        return publisher;
    }

    public String getLocation() {
        return location;
    }

    public String getStorage() {
        return storage;
    }

    public String getDetail() {
        if (searchState.equals("true"))
            return   "書名         : "+title+"\n"
                    +"作者         : "+author+"\n"
                    +"ISBN         : "+isbn+"\n"
                    +"出版社     : "+publisher+"\n"
                    +"出版年     : "+publish_year+"\n"
                    +"館藏位置 : "+location+"\n"
                    +"可借數量 : "+storage;
        else if (searchState.equals("false") || searchState.equals("Pending!"))
            return "搜尋詳細資訊中...";
        else if (searchState.equals("null"))
            return NULL_TITLE;
        else
            return "Error!!! State : "+searchState;
    }

    public boolean isNull() {
        return searchState == "null";
    }

    public String getSearchState() {
        return searchState;
    }
}
<file_sep>/app/src/main/java/com/writerwriter/libraassist/NotificationUnit.java
package com.writerwriter.libraassist;

/**
 * Created by Larry on 2017/12/31.
 */

public class NotificationUnit {
    private String title;
    private String left_days;
    private String location;

    public NotificationUnit(String title, String left_days, String location) {
        this.title = title;
        this.left_days = left_days;
        this.location = location;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getLeft_days() {
        return left_days;
    }

    public void setLeft_days(String left_days) {
        this.left_days = left_days;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }
}
<file_sep>/app/src/main/java/com/writerwriter/libraassist/InitAlarmReceiver.java
package com.writerwriter.libraassist;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

public class InitAlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        List<BorrowBookUnit> allbooklist;
        allbooklist = AccountManager.Instance.borrowBookList;
        for(int i=0;i<allbooklist.size();i++) {
            BorrowBookUnit borrowBookUnit = allbooklist.get(i);
            SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy/MM/dd");
            SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
            Date cur = new Date(System.currentTimeMillis());
            Date return_date = cur; //initial
            if(borrowBookUnit.getReturn_time().matches("[0-9]+/[0-9]+/[0-9]+")){
                try {
                    return_date = dateFormat1.parse(borrowBookUnit.getReturn_time());
                }catch (ParseException e){
                    e.printStackTrace();
                }
            }
            else if(borrowBookUnit.getReturn_time().matches("[0-9]+-[0-9]+-[0-9]+")){
                try{
                    return_date = dateFormat2.parse(borrowBookUnit.getReturn_time());
                }catch (ParseException e){
                    e.printStackTrace();
                }
            }
            long left_time_millis = return_date.getTime() - cur.getTime();
            int left_time_days =(int)(left_time_millis / 1000 / 60 / 60 / 24);
            if(left_time_days > 0 && left_time_days <= 7){
                Intent intent2 = new Intent();
                intent2.setClass(context,AlarmReceiver.class);
                intent2.putExtra("title",borrowBookUnit.getBook_name());
                intent2.putExtra("time",left_time_days);
                PendingIntent pending1 = PendingIntent.getBroadcast(context,i * 3,intent,PendingIntent.FLAG_CANCEL_CURRENT);
                PendingIntent pending2 = PendingIntent.getBroadcast(context,i * 3 + 1,intent,PendingIntent.FLAG_CANCEL_CURRENT);
                PendingIntent pending3 = PendingIntent.getBroadcast(context,i * 3 + 2,intent,PendingIntent.FLAG_CANCEL_CURRENT);
                AlarmManager alarm = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
                //書本要到期的前三天會通知
                alarm.set(AlarmManager.RTC_WAKEUP, return_date.getTime()-3*24*60*60*60,pending1);
                alarm.set(AlarmManager.RTC_WAKEUP, return_date.getTime()-2*24*60*60*60,pending2);
                alarm.set(AlarmManager.RTC_WAKEUP, return_date.getTime()-1*24*60*60*60,pending3);
            }
        }

    }
}
<file_sep>/app/src/main/java/com/writerwriter/libraassist/TagUnit.java
package com.writerwriter.libraassist;

/**
 * Created by Larry on 2017/12/24.
 */

public class TagUnit {

    private String tag_text;
    private String tag_pages;

    public TagUnit() {
    }

    public TagUnit(String tag_text, String tag_pages) {
        this.tag_text = tag_text;
        this.tag_pages = tag_pages;
    }

    public String getTag_text() {
        return tag_text;
    }

    public void setTag_text(String tag_text) {
        this.tag_text = tag_text;
    }

    public String getTag_pages() {
        return tag_pages;
    }

    public void setTag_pages(String tag_pages) {
        this.tag_pages = tag_pages;
    }
}
<file_sep>/app/src/main/java/com/writerwriter/libraassist/BorrowBookAdapter.java
package com.writerwriter.libraassist;

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.TextView;

import java.util.List;

/**
 * Created by Larry on 2017/12/28.
 */

public class BorrowBookAdapter extends RecyclerView.Adapter<BorrowBookAdapter.ViewHolder> {
    private List<BorrowBookUnit> borrowBookUnitList;
    private Context mContext;

    public static class ViewHolder extends RecyclerView.ViewHolder{
        public TextView borrow_book_title;
        public TextView borrow_book_author;
        public TextView borrow_book_location;
        public TextView borrow_book_search_number;
        public TextView borrow_book_borrow_time;
        public TextView borrow_book_return_time;
        public TextView borrow_book_waiting_people_number;
        public TextView borrow_book_renew_count;

        public ViewHolder(View itemView){
            super(itemView);

            borrow_book_title = (TextView) itemView.findViewById(R.id.borrow_book_title);
            borrow_book_author = (TextView) itemView.findViewById(R.id.borrow_book_author);
            borrow_book_location = (TextView) itemView.findViewById(R.id.borrow_book_location);
            borrow_book_search_number = (TextView) itemView.findViewById(R.id.borrow_book_search_number);
            borrow_book_borrow_time = (TextView) itemView.findViewById(R.id.borrow_book_borrow_time);
            borrow_book_return_time = (TextView) itemView.findViewById(R.id.borrow_book_return_time);
            borrow_book_waiting_people_number = (TextView) itemView.findViewById(R.id.borrow_book_waiting_people_number);
            borrow_book_renew_count = (TextView) itemView.findViewById(R.id.borrow_book_renew_count);
        }
    }

    public BorrowBookAdapter(List<BorrowBookUnit> borrowBookUnitList, Context mContext) {
        this.borrowBookUnitList = borrowBookUnitList;
        this.mContext = mContext;
    }

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

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View borrow_book_list_view = LayoutInflater.from(mContext).inflate(R.layout.borrow_book_item,parent,false);
        BorrowBookAdapter.ViewHolder viewHolder = new BorrowBookAdapter.ViewHolder(borrow_book_list_view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        final BorrowBookUnit borrowBookUnit = borrowBookUnitList.get(position);
        holder.borrow_book_title.setText(borrowBookUnit.getBook_name());
        holder.borrow_book_author.setText((""+borrowBookUnit.getAuthor()).equals("null")?"作者 : -":"作者 : "+borrowBookUnit.getAuthor());
        holder.borrow_book_location.setText((""+borrowBookUnit.getLocation()).equals("null")?"館藏地 : -":"館藏地 : "+borrowBookUnit.getLocation());
        holder.borrow_book_search_number.setText((""+borrowBookUnit.getSearch_book_number()).equals("null")?"索書號 : -":"索書號 : " + borrowBookUnit.getSearch_book_number());
        holder.borrow_book_borrow_time.setText((""+borrowBookUnit.getBorrow_time()).equals("null")?"借閱日期 : -":"借閱日期 : "+borrowBookUnit.getBorrow_time());
        holder.borrow_book_return_time.setText((""+borrowBookUnit.getReturn_time()).equals("null")?"應還日期 : -":"應還日期 : "+borrowBookUnit.getReturn_time());
        holder.borrow_book_waiting_people_number.setText((""+borrowBookUnit.getWaiting_people_number()).equals("null")?"預約人數 : -":"預約人數 : "+borrowBookUnit.getWaiting_people_number());
        holder.borrow_book_renew_count.setText((""+borrowBookUnit.getRenew_count()).equals("null")?"續借次數 : -":"續借次數 : "+borrowBookUnit.getRenew_count());
        holder.itemView.setTag(position);
    }
}
<file_sep>/app/src/main/java/com/writerwriter/libraassist/LibraryInfoDetailFragment.java
package com.writerwriter.libraassist;

import android.app.PendingIntent;
import android.content.Context;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.method.ScrollingMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import org.w3c.dom.Text;

public class LibraryInfoDetailFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_library_info_detail, container, false);

        TextView info = (TextView) v.findViewById(R.id.library_detail_info);
        info.setMovementMethod(new ScrollingMovementMethod());
        info.setTextColor(Color.BLACK);
        info.setTextSize(16);
        Bundle bundle = getArguments();
        if(bundle != null){
            int id = bundle.getInt("id",0);
            switch (id){
                case 0:
                    info.setText("關於本館\n" +
                            "臺北大學圖書館 National Taipei University Library，係臺北大學的圖書資源服務者，眾所期盼的圖書資訊大樓已於 102年 11月 25日正式啟用營運。\n" +
                            "\n" +
                            "    圖書館館藏目前約有42萬冊圖書館藏(含圖書、視聽資料、電子書)、現有紙本期刊290種(不含贈刊)、本校紙本碩博士論文、參考資料等提供館內閱覽。\n" +
                            "    電子資源檢索與使用：\n" +
                            "        「電子資源總覽」(查詢特定資料庫使用)：透過單一介面同時檢索153種資料庫、近6萬種電子期刊等數位館藏。(請參考「圖書館首頁」>「電子資源」項下)。\n" +
                            "        「資源探索服務」：提供類google檢索功能，一鍵搜羅所有校內外相關文獻(含紙本館藏/期刊、資料庫、電子書、校外免費文獻)，快速指引全文獲取途徑。\n" +
                            "        其他電子資源：如本校電子碩博士論文、書目管理軟體(Endnote)、語言學習專區等(請參考「圖書館首頁」>「電子資源」項下各服務)。\n" +
                            "    成員：除館長外，共有 19名館員工，提供圖書專業服務。\n" +
                            "    提供數位化、多元化服務：\n" +
                            "        圖書館網站、自助借書機、門禁系統、圖書資訊系統、空間座位管理系統等。\n" +
                            "        館際互借服務與交流。\n" +
                            "        客製化圖書館服務：導覽、教育訓練等。\n");
                    break;
                case 1:
                    info.setText("開館資訊\n" +
                            "\n" +
                            "發佈館別：新北市圖(總館)\n" +
                            "\n" +
                            "發佈時間： 2017/12/12  | 最後修改時間： 2017/12/12\n" +
                            "\n" +
                            "開放時間：\n" +
                            "\n" +
                            "各館詳細開放時間請點選連結 新北市立圖書館各分館暨圖書閱覽室介紹\n" +
                            "\n" +
                            "休館時間：\n" +
                            "\n" +
                            "經政府公告之國定假日為休館日、每月最後一個星期四為清館日，不對外開放；其他休館日詳見以下「休館日一覽表」。\n" +
                            "\n" +
                            "2017 年 休館日一覽表\n" +
                            "\n" +
                            "板橋車站智慧圖書館春節期間照常開放 7:00-22:00\n" +
                            "日期 \t星期 \t休館日說明\n" +
                            "2017年1月1日 \t日 \t開國紀念日\n" +
                            "2017年1月26日 \t四 \t調整定期休館日(調整開放時間為8:30am-5:00pm)\n" +
                            "2017年1月27日 \t五 \t春節(除夕)\n" +
                            "2017年1月28日 \t六 \t春節(初一)\n" +
                            "2017年1月29日 \t日 \t春節(初二)\n" +
                            "2017年1月30日 \t一 \t春節(初三)\n" +
                            "2017年1月31日 \t二 \t調整開放時間為8:30am-5:00pm\n" +
                            "2017年2月1日 \t三 \t調整開放時間為8:30am-5:00pm\n" +
                            "2017年2月23日 \t四 \t定期休館日\n" +
                            "2017年2月28日 \t二 \t和平紀念日\n" +
                            "2017年3月30日 \t四 \t定期休館日\n" +
                            "2017年4月4日 \t二 \t清明節\n" +
                            "2017年4月27日 \t四 \t定期休館日\n" +
                            "2017年5月25日 \t四 \t定期休館日\n" +
                            "2017年5月30日 \t二 \t端午節\n" +
                            "2017年6月29日 \t四 \t調整開放時間為8:30am-5:00pm\n" +
                            "2017年7月27日 \t四 \t定期休館日\n" +
                            "2017年8月31日 \t四 \t定期休館日\n" +
                            "2017年9月28日 \t四 \t定期休館日\n" +
                            "2017年10月4日 \t三 \t中秋節\n" +
                            "2017年10月10日 \t二 \t國慶日\n" +
                            "2017年10月26日 \t四 \t定期休館日\n" +
                            "2017年11月30日 \t四 \t定期休館日\n" +
                            "2017年12月28日 \t四 \t定期休館日\n" +
                            "\n" +
                            " \n" +
                            "\n" +
                            "(歡迎下載利用)新北市立圖書館2018休館日日曆檔(ics檔)\n" +
                            "\n" +
                            "2018休館日、調整放假日一覽表\n" +
                            "日期 \t星期 \t休館日說明\n" +
                            "2018年1月1日 \t一 \t開國紀念日\n" +
                            "2018年1月25日 \t四 \t定期休館日\n" +
                            "2018年2月15日 \t四 \t春節(除夕)\n" +
                            "2018年2月16日 \t五 \t春節(初一)\n" +
                            "2018年2月17日 \t六 \t春節(初二)\n" +
                            "2018年2月18日 \t日 \t春節(初三)\n" +
                            "2018年2月19日 \t一 \t調整開放時間至5:00pm\n" +
                            "2018年2月20日 \t二 \t調整開放時間至5:00pm\n" +
                            "2018年2月22日 \t四 \t定期休館日\n" +
                            "2018年2月28日 \t三 \t和平紀念日\n" +
                            "2018年3月29日 \t四 \t定期休館日\n" +
                            "2018年4月4日 \t三 \t兒童節\n" +
                            "2018年4月5日 \t四 \t清明節\n" +
                            "2018年4月26日 \t四 \t定期休館日\n" +
                            "2018年5月31日 \t四 \t定期休館日\n" +
                            "2018年6月18日 \t一 \t端午節\n" +
                            "2018年6月28日 \t四 \t調整開放時間至5:00pm\n" +
                            "2018年7月26日 \t四 \t定期休館日\n" +
                            "2018年8月30日 \t四 \t定期休館日\n" +
                            "2018年9月24日 \t一 \t中秋節\n" +
                            "2018年9月27日 \t四 \t定期休館日\n" +
                            "2018年10月10日 \t三 \t國慶日\n" +
                            "2018年10月25日 \t四 \t定期休館日\n" +
                            "2018年11月29日 \t四 \t定期休館日\n" +
                            "2018年12月27日 \t四 \t定期休館日\n" +
                            "\n" +
                            "依據「新北市立圖書館閱覽服務規則」，各館臨櫃申請借閱證及借、還書在閉館前30分鐘停止受理。");
                    break;
                case 2:
                    info.setText("開館資訊\n" +
                            "開館時間\n" +
                            "\n" +
                            "    週二至週六：8:30-21:00；\n" +
                            "    週日、週一：9:00-17:00。\n" +
                            "\n" +
                            "    申請借閱證、領取預約書、規費繳納及臨櫃借、還書在閉館前30分鐘停止受理。\n" +
                            "\n" +
                            "    總館兒童室開放時間：\n" +
                            "    週二至週六：9:00-18:00；\n" +
                            "    週日、週一：9:00-17:00。\n" +
                            "\n" +
                            "\n" +
                            "    智慧圖書館開放時間：\n" +
                            "    西門智慧圖書館：每日上午6時至晚間12時\n" +
                            "    松山機場智慧圖書館：每日上午6時至晚間12時\n" +
                            "    太陽圖書館：每日上午8時30分至晚間9時\n" +
                            "    百齡智慧圖書館：週一至週五：下午4時30分至9時\n" +
                            "    　　　　　　　　 週六、日及寒暑假：每日上午9時至晚間9時(國定假日不開放)\n" +
                            "    福德智慧圖書館：每日上午9時至晚間9時(國定假日不開放)\n" +
                            "    東區地下街智慧圖書館：每日上午6時至晚間12時\n" +
                            "    古亭智慧圖書館：每日上午9時至晚間9時(國定假日不開放)\n" +
                            "\n" +
                            "\n" +
                            "    啟明分館、柳鄉民眾閱覽室及親子美育數位圖書館開放時間：\n" +
                            "    週一至週日：9:00-17:00。\n" +
                            "\n" +
                            "    公訓圖書站開放時間：\n" +
                            "    一、週一至週五：8：30-17：00（申請借閱證及借、還書服務至16：30）。\n" +
                            "    二、週六、日及國定假日休館。\n" +
                            "\n" +
                            "    士林分館臨時替代館(天文館)開放時間：\n" +
                            "    週二至週日：早上9:00至下午5:00\n" +
                            "    每週一、每月第一個星期四及國定假日固定休館\n" +
                            "\n" +
                            "    在開放時間內可自由進入館內閱覽，6歲以下兒童請由家長陪同。\n" +
                            "\n" +
                            "    經政府公告之放假日為休館日；每月第一個星期四為圖書整理清潔日，不對外開放。\n" +
                            "\n" +
                            "    FastBook全自動借書站及借還書工作站開放時間依設置地點而定。\n" +
                            "\n" +
                            "\n" +
                            "\n" +
                            "休館日一覽表\n" +
                            "\n" +
                            "    2018-01-01（星期一，開國紀念日）\n" +
                            "    2018-01-04（星期四，休館日）\n" +
                            "    2018-02-01（星期四，休館日）\n" +
                            "    2018-02-15~18（星期四~日，春節）\n" +
                            "    2018-02-28（星期三，二二八紀念日）\n" +
                            "    2018-03-01（星期四，休館日）\n" +
                            "    2018-04-04（星期三，兒童節）\n" +
                            "    2018-04-05（星期四，清明節）\n" +
                            "    2018-05-03（星期四，休館日）\n" +
                            "    2018-06-07（星期四，休館日）\n" +
                            "    2018-06-18（星期一，端午節）\n" +
                            "    2018-07-05（星期四，休館日）\n" +
                            "    2018-08-02（星期四，休館日）\n" +
                            "    2018-09-06（星期四，休館日）\n" +
                            "    2018-09-24（星期一，中秋節）\n" +
                            "    2018-10-04（星期四，休館日）\n" +
                            "    2018-10-10（星期三，國慶日）\n" +
                            "    2018-11-01（星期四，休館日）\n" +
                            "    2018-12-06（星期四，休館日）");
                    break;
            }
        }

        return v;
    }

}
<file_sep>/app/src/main/java/com/writerwriter/libraassist/AlarmReceiver.java
package com.writerwriter.libraassist;

import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.widget.Toast;

/**
 * Created by Larry on 2017/12/31.
 */

public class AlarmReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        NotificationManager noMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
        builder.setSmallIcon(R.drawable.ic_settings)
                .setWhen(System.currentTimeMillis())
                .setContentTitle(context.getString(R.string.app_name))
                .setContentText("你借的書 : "+intent.getStringExtra("title")+" 即將在 "+intent.getIntExtra("time",1)+" 天後到期。");
        noMgr.notify(intent.getIntExtra("id",0),builder.build());
    }
}
<file_sep>/app/src/main/java/com/writerwriter/libraassist/NewBooksAdapter.java
package com.writerwriter.libraassist;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.List;

/**
 * Created by Larry on 2017/10/11.
 */

public class NewBooksAdapter extends BaseAdapter {
    private List<CollectionSearchResultUnit> newBooksList;
    private Context mContext;

    public NewBooksAdapter(List<CollectionSearchResultUnit> newBooksList, Context mContext) {
        this.newBooksList = newBooksList;
        this.mContext = mContext;
    }

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

    @Override
    public Object getItem(int i) {
        return newBooksList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View rowView = view;
        if(rowView == null){
            rowView = LayoutInflater.from(mContext).inflate(R.layout.layout_item,null);

            TextView name = rowView.findViewById(R.id.label);
            ImageView image = rowView.findViewById(R.id.image);

            //set data
            Picasso.with(mContext).load(newBooksList.get(i).getImg()).into(image);
            name.setText(newBooksList.get(i).getTitle());
        }
        return rowView;
    }
}
