mirror of https://github.com/TeamNewPipe/NewPipe
233 lines
6.7 KiB
Java
233 lines
6.7 KiB
Java
package us.shandian.giga.ui.fragment;
|
|
|
|
import android.app.Activity;
|
|
import android.app.Fragment;
|
|
import android.content.ComponentName;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.ServiceConnection;
|
|
import android.content.SharedPreferences;
|
|
import android.os.Bundle;
|
|
import android.os.IBinder;
|
|
import android.preference.PreferenceManager;
|
|
import android.support.v7.widget.GridLayoutManager;
|
|
import android.support.v7.widget.LinearLayoutManager;
|
|
import android.support.v7.widget.RecyclerView;
|
|
import android.view.LayoutInflater;
|
|
import android.view.Menu;
|
|
import android.view.MenuItem;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
|
|
import org.schabi.newpipe.R;
|
|
|
|
import us.shandian.giga.service.DownloadManager;
|
|
import us.shandian.giga.service.DownloadManagerService;
|
|
import us.shandian.giga.service.DownloadManagerService.DMBinder;
|
|
import us.shandian.giga.ui.adapter.MissionAdapter;
|
|
|
|
public class MissionsFragment extends Fragment {
|
|
|
|
private static final int SPAN_SIZE = 2;
|
|
|
|
private SharedPreferences mPrefs;
|
|
private boolean mLinear;
|
|
private MenuItem mSwitch;
|
|
private MenuItem mClear = null;
|
|
|
|
private RecyclerView mList;
|
|
private View mEmpty;
|
|
private MissionAdapter mAdapter;
|
|
private GridLayoutManager mGridManager;
|
|
private LinearLayoutManager mLinearManager;
|
|
private Context mActivity;
|
|
|
|
private DMBinder mBinder;
|
|
private Bundle mBundle;
|
|
private boolean mForceUpdate;
|
|
|
|
private ServiceConnection mConnection = new ServiceConnection() {
|
|
|
|
@Override
|
|
public void onServiceConnected(ComponentName name, IBinder binder) {
|
|
mBinder = (DownloadManagerService.DMBinder) binder;
|
|
mBinder.clearDownloadNotifications();
|
|
|
|
mAdapter = new MissionAdapter(mActivity, mBinder.getDownloadManager(), mClear, mEmpty);
|
|
mAdapter.deleterLoad(mBundle, getView());
|
|
|
|
mBundle = null;
|
|
|
|
mBinder.addMissionEventListener(mAdapter.getMessenger());
|
|
mBinder.enableNotifications(false);
|
|
|
|
updateList();
|
|
}
|
|
|
|
@Override
|
|
public void onServiceDisconnected(ComponentName name) {
|
|
// What to do?
|
|
}
|
|
|
|
|
|
};
|
|
|
|
@Override
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
|
View v = inflater.inflate(R.layout.missions, container, false);
|
|
|
|
mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
|
mLinear = mPrefs.getBoolean("linear", false);
|
|
|
|
mActivity = getActivity();
|
|
mBundle = savedInstanceState;
|
|
|
|
// Bind the service
|
|
mActivity.bindService(new Intent(mActivity, DownloadManagerService.class), mConnection, Context.BIND_AUTO_CREATE);
|
|
|
|
// Views
|
|
mEmpty = v.findViewById(R.id.list_empty_view);
|
|
mList = v.findViewById(R.id.mission_recycler);
|
|
|
|
// Init
|
|
mGridManager = new GridLayoutManager(getActivity(), SPAN_SIZE);
|
|
mGridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
|
|
@Override
|
|
public int getSpanSize(int position) {
|
|
switch (mAdapter.getItemViewType(position)) {
|
|
case DownloadManager.SPECIAL_PENDING:
|
|
case DownloadManager.SPECIAL_FINISHED:
|
|
return SPAN_SIZE;
|
|
default:
|
|
return 1;
|
|
}
|
|
}
|
|
});
|
|
|
|
mLinearManager = new LinearLayoutManager(getActivity());
|
|
|
|
setHasOptionsMenu(true);
|
|
|
|
return v;
|
|
}
|
|
|
|
/**
|
|
* Added in API level 23.
|
|
*/
|
|
@Override
|
|
public void onAttach(Context activity) {
|
|
super.onAttach(activity);
|
|
|
|
// Bug: in api< 23 this is never called
|
|
// so mActivity=null
|
|
// so app crashes with nullpointer exception
|
|
mActivity = activity;
|
|
}
|
|
|
|
/**
|
|
* deprecated in API level 23,
|
|
* but must remain to allow compatibility with api<23
|
|
*/
|
|
@Override
|
|
public void onAttach(Activity activity) {
|
|
super.onAttach(activity);
|
|
|
|
mActivity = activity;
|
|
}
|
|
|
|
|
|
@Override
|
|
public void onDestroy() {
|
|
super.onDestroy();
|
|
if (mBinder == null || mAdapter == null) return;
|
|
|
|
mBinder.removeMissionEventListener(mAdapter.getMessenger());
|
|
mBinder.enableNotifications(true);
|
|
mActivity.unbindService(mConnection);
|
|
mAdapter.deleterDispose(null);
|
|
|
|
mBinder = null;
|
|
mAdapter = null;
|
|
}
|
|
|
|
@Override
|
|
public void onPrepareOptionsMenu(Menu menu) {
|
|
mSwitch = menu.findItem(R.id.switch_mode);
|
|
mClear = menu.findItem(R.id.clear_list);
|
|
if (mAdapter != null) mAdapter.setClearButton(mClear);
|
|
super.onPrepareOptionsMenu(menu);
|
|
}
|
|
|
|
@Override
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
switch (item.getItemId()) {
|
|
case R.id.switch_mode:
|
|
mLinear = !mLinear;
|
|
updateList();
|
|
return true;
|
|
case R.id.clear_list:
|
|
mAdapter.clearFinishedDownloads();
|
|
return true;
|
|
default:
|
|
return super.onOptionsItemSelected(item);
|
|
}
|
|
}
|
|
|
|
private void updateList() {
|
|
if (mLinear) {
|
|
mList.setLayoutManager(mLinearManager);
|
|
} else {
|
|
mList.setLayoutManager(mGridManager);
|
|
}
|
|
|
|
// destroy all created views in the recycler
|
|
mList.setAdapter(null);
|
|
mAdapter.notifyDataSetChanged();
|
|
|
|
// re-attach the adapter in grid/lineal mode
|
|
mAdapter.setLinear(mLinear);
|
|
mList.setAdapter(mAdapter);
|
|
|
|
if (mSwitch != null) {
|
|
mSwitch.setIcon(mLinear ? R.drawable.grid : R.drawable.list);
|
|
mSwitch.setTitle(mLinear ? R.string.grid : R.string.list);
|
|
mPrefs.edit().putBoolean("linear", mLinear).apply();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onSaveInstanceState(Bundle outState) {
|
|
super.onSaveInstanceState(outState);
|
|
|
|
if (mAdapter != null) {
|
|
mAdapter.deleterDispose(outState);
|
|
mForceUpdate = true;
|
|
mBinder.removeMissionEventListener(mAdapter.getMessenger());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
|
|
if (mAdapter != null) {
|
|
mAdapter.deleterResume();
|
|
|
|
if (mForceUpdate) {
|
|
mForceUpdate = false;
|
|
mAdapter.forceUpdate();
|
|
}
|
|
|
|
mBinder.addMissionEventListener(mAdapter.getMessenger());
|
|
}
|
|
if (mBinder != null) mBinder.enableNotifications(false);
|
|
}
|
|
|
|
@Override
|
|
public void onPause() {
|
|
super.onPause();
|
|
if (mAdapter != null) mAdapter.onPaused();
|
|
if (mBinder != null) mBinder.enableNotifications(true);
|
|
}
|
|
}
|