/*
* Copyright (c) 2015 PocketHub
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.pockethub.android.ui.gist;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import com.github.pockethub.android.R;
import com.github.pockethub.android.core.gist.GistStore;
import com.github.pockethub.android.ui.BaseActivity;
import com.github.pockethub.android.ui.TabPagerFragment;
import com.github.pockethub.android.util.ToastUtils;
import com.meisolsson.githubsdk.core.ServiceGenerator;
import com.meisolsson.githubsdk.model.Gist;
import com.meisolsson.githubsdk.model.Page;
import com.meisolsson.githubsdk.service.gists.GistService;
import com.google.inject.Inject;
import java.util.Collection;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import static com.github.pockethub.android.RequestCodes.GIST_VIEW;
import static com.github.pockethub.android.ui.view.OcticonTextView.ICON_PERSON;
import static com.github.pockethub.android.ui.view.OcticonTextView.ICON_STAR;
import static com.github.pockethub.android.ui.view.OcticonTextView.ICON_TEAM;
public class GistsPagerFragment extends TabPagerFragment<GistQueriesPagerAdapter> {
private static final String TAG = "GistsPagerFragment";
@Inject
private GistStore store;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
configureTabPager();
}
private void randomGist() {
Single<Gist> single = Single.create(emitter -> {
GistService service = ServiceGenerator.createService(getActivity(), GistService.class);
Page<Gist> p = service.getPublicGists(1).blockingGet().body();
int randomPage = 1 + (int) (Math.random() * ((p.last() - 1) + 1));
Collection<Gist> gists = service.getPublicGists(randomPage)
.blockingGet()
.body()
.items();
// Make at least two tries since page numbers are volatile
if (gists.isEmpty()) {
randomPage = 1 + (int) (Math.random() * ((p.last() - 1) + 1));
gists = service.getPublicGists(randomPage).blockingGet().body().items();
}
if (gists.isEmpty()) {
throw new IllegalArgumentException(getContext().getString(
R.string.no_gists_found));
}
emitter.onSuccess(store.addGist(gists.iterator().next()));
});
showProgressIndeterminate(R.string.random_gist);
single.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(((BaseActivity)getActivity()).bindToLifecycle())
.subscribe(gist -> {
getActivity().startActivityForResult(
GistsViewActivity.createIntent(gist), GIST_VIEW);
dismissProgress();
}, e -> {
Log.d(TAG, "Exception opening random Gist", e);
ToastUtils.show((Activity) getContext(), e.getMessage());
dismissProgress();
});
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_gists, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.m_random:
randomGist();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected GistQueriesPagerAdapter createAdapter() {
return new GistQueriesPagerAdapter(this);
}
@Override
protected String getIcon(int position) {
switch (position) {
case 0:
return ICON_PERSON;
case 1:
return ICON_STAR;
case 2:
return ICON_TEAM;
default:
return super.getIcon(position);
}
}
}