admin
2021-02-06 9314a996b14c2e0cece61afce900c164a4377274
观看记录
4个文件已修改
244 ■■■■ 已修改文件
BuWanVideo/res/layout/watch_history_fragment.xml 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/BeibeiVideoAPI.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recent/WatchHistoryAdapter.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/recent/WatchHistoryFragment.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/layout/watch_history_fragment.xml
@@ -3,10 +3,21 @@
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:id="@+id/list"
    <com.lcjian.library.util.RefreshLayout
        android:id="@+id/srl_watch_history"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
        android:layout_height="match_parent">
        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/register_gray"
            android:divider="@null"
            android:dividerHeight="1px" />
    </com.lcjian.library.util.RefreshLayout>
    <FrameLayout
        android:id="@+id/fl_empty"
@@ -27,8 +38,8 @@
            <ImageView
                android:layout_width="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:src="@drawable/empty_history_bg" />
        </LinearLayout>
    </FrameLayout>
BuWanVideo/src/com/weikou/beibeivideo/BeibeiVideoAPI.java
@@ -6,6 +6,7 @@
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import android.content.Context;
@@ -16,6 +17,7 @@
import android.widget.Toast;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.lcjian.library.DeviceUuidFactory;
import com.lcjian.library.okhttp.OkHttpUtils;
import com.lcjian.library.util.ManifestDataUtil;
@@ -29,6 +31,8 @@
import com.loopj.android.http.ResponseHandlerInterface;
import com.loopj.android.http.SyncHttpClient;
import com.weikou.beibeivideo.util.BeibeiConstant;
import org.json.JSONArray;
import okhttp3.Call;
import okhttp3.Callback;
@@ -200,6 +204,42 @@
        params.put("Page", page);
        commonPost(context, BASE_URL + "class", params, handler);
    }
    /**
     * 获取观看记录
     *
     * @param context
     * @param uid
     * @param page
     * @param handler
     */
    public static void getWatchHistory(Context context, String uid, int page,
                                       ResponseHandlerInterface handler) {
        LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
        params.put("Method", "getWatchHistory");
        params.put("Uid", uid);
        params.put("Page", page + "");
        commonPost(context, BASE_URL + "userVideo", params, handler);
    }
    /**
     * 删除历史记录
     *
     * @param context
     * @param uid
     * @param ids
     * @param handler
     */
    public static void deleteWatchHistory(Context context, String uid, Set<String> ids,
                                          ResponseHandlerInterface handler) {
        LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
        params.put("Method", "deleteWatchHistory");
        params.put("Uid", uid);
        params.put("Ids", new JSONArray(ids).toString());
        commonPost(context, BASE_URL + "userVideo", params, handler);
    }
    public static void search(Context context, String uid, String key,
                              String contentType, String page, ResponseHandlerInterface handler) {
@@ -1066,7 +1106,7 @@
        params.put("LoginUid", loginid);
        params.put("VideoId", videoId);
        if (position != null) {
            params.put("Position", position+"");
            params.put("Position", position + "");
        }
        params.put("ResourceId", ResourceId);
        params.put("Type", type);
BuWanVideo/src/com/weikou/beibeivideo/ui/recent/WatchHistoryAdapter.java
@@ -85,17 +85,17 @@
    @Override
    public int getCount() {
        return 0;
        return voList == null ? 0 : voList.size();
    }
    @Override
    public Object getItem(int position) {
        return null;
        return voList.get(position);
    }
    @Override
    public long getItemId(int position) {
        return 0;
        return position;
    }
    @Override
BuWanVideo/src/com/weikou/beibeivideo/ui/recent/WatchHistoryFragment.java
@@ -1,25 +1,39 @@
package com.weikou.beibeivideo.ui.recent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.lcjian.library.util.RefreshLayout;
import com.umeng.analytics.MobclickAgent;
import com.weikou.beibeivideo.BasicTextHttpResponseHandler;
import com.weikou.beibeivideo.BeibeiVideoAPI;
import com.weikou.beibeivideo.BeibeiVideoApplication;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.db.WatchHistoryTable;
import com.weikou.beibeivideo.entity.vo.WatchHistoryVO;
import com.weikou.beibeivideo.util.UserUtil;
import org.apache.http.Header;
import org.json.JSONObject;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class WatchHistoryFragment extends Fragment implements
        LoaderManager.LoaderCallbacks<Cursor> {
public class WatchHistoryFragment extends Fragment {
    private RefreshLayout srl;
    private WatchHistoryAdapter mAdapter;
@@ -29,6 +43,12 @@
    private View empty;
    private List<WatchHistoryVO> voList = new ArrayList<>();
    private int currentPage = 1;
    private long count = 0;
    public void setDeleteCallback(
            DownloadAdapter2.IGetDeleteCallback getdeleteNumber) {
        this.getdeleteNumber = getdeleteNumber;
@@ -36,46 +56,53 @@
            mAdapter.setDeleteCallback(getdeleteNumber);
    }
    private void initView(View view){
        list = view.findViewById(R.id.list);
        list.setDividerHeight(1);
        mAdapter = new WatchHistoryAdapter(list.getContext(), voList);
        if (getdeleteNumber != null)
            mAdapter.setDeleteCallback(getdeleteNumber);
        list.setAdapter(mAdapter);
        srl =  view.findViewById(R.id.srl_watch_history);
        ProgressBar pb = new ProgressBar(getContext());
        srl.setFooter(pb);
        srl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                    currentPage = 1;
                    getWatchHistory(currentPage);
            }
        });
        srl.setOnLoadListener(new RefreshLayout.OnLoadListener() {
            @Override
            public void onLoad() {
                getWatchHistory(currentPage+1);
            }
        });
        srl.setRefreshing(true);
        getWatchHistory(currentPage);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.watch_history_fragment, container,
        View view = inflater.inflate(R.layout.watch_history_fragment, container,
                false);
        return view;
    }
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        empty = view.findViewById(R.id.fl_empty);
//        empty.setOnClickListener(new OnClickListener() {
//
//            @Override
//            public void onClick(View v) {
//                Intent intent = new Intent(v.getContext(),
//                        MVideosActivity.class);
//                intent.putExtra("home_type", "4");
//                intent.putExtra("title", "内部福利");
//                v.getContext().startActivity(intent);
//            }
//        });
        list = (ListView) view.findViewById(R.id.list);
        list.setDividerHeight(1);
        // list.setOnItemClickListener(this);
        mAdapter = new WatchHistoryAdapter(list.getContext(), getActivity().getApplicationContext(), null, true);
        if (getdeleteNumber != null)
            mAdapter.setDeleteCallback(getdeleteNumber);
        list.setAdapter(mAdapter);
        // Prepare the loader. Either re-connect with an existing one,
        // or start a new one.
        getLoaderManager().initLoader(0, null, this);
    }
    @Override
    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
        return new CursorLoader(list.getContext(), WatchHistoryTable.CONTENT_URI,
                null, null, null, WatchHistoryTable.UPDATE_TIME + " DESC");
    }
    @Override
@@ -91,37 +118,11 @@
        MobclickAgent.onPageEnd("主页面——最近——观看记录");
    }
    @Override
    public void onLoadFinished(Loader<Cursor> arg0, Cursor data) {
        // Swap the new cursor in. (The framework will take care of closing the
        // old cursor once we return.)
        mAdapter.swapCursor(data);
        if (mAdapter.getCount() == 0) {
            empty.setVisibility(View.VISIBLE);
        } else {
            empty.setVisibility(View.INVISIBLE);
        }
    }
    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
        // This is called when the last Cursor provided to onLoadFinished()
        // above is about to be closed. We need to make sure we are no
        // longer using it.
        mAdapter.swapCursor(null);
    }
    public void deleteWatchHistory() {
        List<Long> selectedIds = mAdapter.getSelectedIds();
        Set<String> selectedIds = mAdapter.getSelectedIds();
        if (!selectedIds.isEmpty()) {
            for (int i = 0; i < selectedIds.size(); i++) {
                list.getContext().getContentResolver().delete(
                        WatchHistoryTable.CONTENT_URI,
                        WatchHistoryTable._ID + " = ? ",
                        new String[]{String.valueOf(selectedIds.get(i))});
            }
            mAdapter.getSelectedIds().clear();
            deleteWatchHistory(selectedIds);
        } else {
            Toast.makeText(list.getContext(), "请选择要删除的记录", Toast.LENGTH_LONG)
                    .show();
@@ -143,4 +144,54 @@
    public int getCount() {
        return mAdapter.getCount();
    }
    private void getWatchHistory(int page) {
        BeibeiVideoAPI.getWatchHistory(BeibeiVideoApplication.application, UserUtil.getUid(BeibeiVideoApplication.application), page, new BasicTextHttpResponseHandler() {
            @Override
            public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
                if (jsonObject.optBoolean("IsPost")) {
                    Gson gson = new GsonBuilder().setFieldNamingPolicy(
                            FieldNamingPolicy.UPPER_CAMEL_CASE)
                            .create();
                    JSONObject data = jsonObject.optJSONObject("Data");
                    count = data.optLong("count");
                    Type type = new TypeToken<List<WatchHistoryVO>>() {
                    }.getType();
                    List<WatchHistoryVO> list = gson.fromJson(data.optJSONArray("list").toString(), type);
                    currentPage = page;
                    if (page == 1)
                        voList.clear();
                    if (list != null && list.size() > 0) {
                        voList.addAll(list);
                    }
                    mAdapter.notifyDataSetChanged();
                }
            }
        });
    }
    private void deleteWatchHistory(Set<String> ids) {
        BeibeiVideoAPI.deleteWatchHistory(BeibeiVideoApplication.application, UserUtil.getUid(BeibeiVideoApplication.application), ids, new BasicTextHttpResponseHandler() {
            @Override
            public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
                if (jsonObject.optBoolean("IsPost")) {
                    for (int i = 0; i < voList.size(); i++) {
                        if (ids.contains(voList.get(i).getId())) {
                            voList.remove(i--);
                        }
                    }
                    mAdapter.getSelectedIds().clear();
                    mAdapter.notifyDataSetChanged();
                } else {
                    Toast.makeText(BeibeiVideoApplication.application, jsonObject.optString("Error"), Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}