package moe.feng.nhentai.ui;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.gson.Gson;
import java.util.Random;
import moe.feng.nhentai.R;
import moe.feng.nhentai.api.BookApi;
import moe.feng.nhentai.api.PageApi;
import moe.feng.nhentai.dao.FavoritesManager;
import moe.feng.nhentai.dao.LatestBooksKeeper;
import moe.feng.nhentai.model.BaseMessage;
import moe.feng.nhentai.model.Book;
import moe.feng.nhentai.ui.common.AbsActivity;
import moe.feng.nhentai.util.AsyncTask;
import moe.feng.nhentai.view.WheelProgressView;
public class RandomActivity extends AbsActivity {
private FavoritesManager mFM;
private LatestBooksKeeper mLatestKeeper;
private FloatingActionButton mFAB;
private ImageView mCoverView, mLangFieldView;
private TextView mTitleView;
private WheelProgressView mWheel;
private ImageButton mLikeButton;
private Book book;
private RandomThread mThread;
private static final String ELEMENT_FAB = "fab";
private static final int MSG_CHANGE_TEXT = 0, MSG_CHANGE_COVER = 1, MSG_FAILED = 2, MSG_BOOK_SET = 3;
public static final String TAG = RandomActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
mLatestKeeper = LatestBooksKeeper.getInstance(getApplicationContext());
mFM = FavoritesManager.getInstance(getApplicationContext());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_random);
mActionBar.setDisplayHomeAsUpEnabled(true);
ViewCompat.setTransitionName(mFAB, ELEMENT_FAB);
mFAB.callOnClick();
}
@Override
public void onBackPressed(){
super.onBackPressed();
mCoverView.setImageBitmap(null);
mCoverView.invalidate();
mLangFieldView.setImageBitmap(null);
mLangFieldView.invalidate();
}
@Override
protected void setUpViews() {
mFAB = $(R.id.fab);
mCoverView = $(R.id.iv_cover);
mTitleView = $(R.id.book_title);
mLangFieldView = $(R.id.book_lang_field);
mWheel = $(R.id.wheel_progress);
mLikeButton = $(R.id.btn_like);
$(R.id.btn_open).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (book != null) {
BookDetailsActivity.launch(RandomActivity.this, mCoverView, book, 0);
} else {
Snackbar.make(
getWindow().getDecorView().getRootView(),
R.string.random_no_data,
Snackbar.LENGTH_SHORT
).show();
}
}
});
mCoverView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
$(R.id.btn_open).callOnClick();
}
});
mLikeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (book != null) {
if (mFM.contains(book.bookId)) {
mLikeButton.setImageResource(R.drawable.ic_favorite_outline_white_24dp);
mFM.remove(mFM.find(book.bookId));
} else {
mLikeButton.setImageResource(R.drawable.ic_favorite_white_24dp);
mFM.add(book);
}
} else {
Snackbar.make(
getWindow().getDecorView().getRootView(),
R.string.random_no_data,
Snackbar.LENGTH_SHORT
).show();
}
}
});
mFAB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mThread != null && mThread.isAlive()) {
mThread.stopRandom();
}
mWheel.setVisibility(View.VISIBLE);
mWheel.spin();
mThread = new RandomThread();
mThread.start();
}
});
}
public static void launch(Activity activity, FloatingActionButton fab) {
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, fab, ELEMENT_FAB);
Intent intent = new Intent(activity, RandomActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ActivityCompat.startActivity(activity, intent, options.toBundle());
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_CHANGE_TEXT:
break;
case MSG_CHANGE_COVER:
break;
case MSG_FAILED:
mCoverView.setVisibility(View.GONE);
mLangFieldView.setVisibility(View.GONE);
mTitleView.setText(R.string.random_failed_set);
mWheel.stopSpinning();
mWheel.setVisibility(View.GONE);
break;
case MSG_BOOK_SET:
mWheel.stopSpinning();
mWheel.setVisibility(View.GONE);
book = Book.toBookFromJson(msg.getData().getString("book"));
mCoverView.setVisibility(View.VISIBLE);
mLangFieldView.setVisibility(View.VISIBLE);
String text =" " + book.getAvailableTitle();
mTitleView.setText(text);
switch (book.langField) {
case Book.LANG_GB:
mLangFieldView.setImageResource(R.drawable.ic_lang_gb);
break;
case Book.LANG_CN:
mLangFieldView.setImageResource(R.drawable.ic_lang_cn);
break;
case Book.LANG_JP:
default:
mLangFieldView.setImageResource(R.drawable.ic_lang_jp);
break;
}
mLikeButton.setImageResource(
mFM.contains(book.bookId) ?
R.drawable.ic_favorite_white_24dp :
R.drawable.ic_favorite_outline_white_24dp
);
break;
}
}
};
private class CoverTask extends AsyncTask<Book, Void, Bitmap> {
@Override
protected Bitmap doInBackground(Book... params) {
return PageApi.getPageOriginImage(getApplicationContext(), params[0],1);
}
@Override
protected void onPostExecute(Bitmap result) {
mCoverView.setImageBitmap(null);
mCoverView.setImageBitmap(result);
mCoverView.invalidate();
}
}
private class RandomThread extends Thread {
private boolean shouldStop = false;
private int bookId;
@Override
public void run() {
int maxId = 166430;
if (mLatestKeeper.getUpdatedMiles() != -1 && mLatestKeeper.getData() != null) {
maxId = Integer.valueOf(mLatestKeeper.getData().get(0).bookId);
}
Random r = new Random();
bookId = r.nextInt(maxId);
if (shouldStop) return;
int repeatCount = 0;
BaseMessage data = null;
Book book2= new Book();
book2.bookId = String.valueOf(bookId);
while (repeatCount < 9) {
data = BookApi.getBook(getApplicationContext(), book2);
if (data.getCode() == 0) break;
repeatCount++;
}
if (shouldStop) return;
if (data.getCode() == 0) {
new CoverTask().execute((Book) data.getData());
Message msg = new Message();
msg.what = MSG_BOOK_SET;
Bundle bundle = new Bundle();
bundle.putString("book", new Gson().toJson(data.getData()));
msg.setData(bundle);
mHandler.sendMessage(msg);
} else {
mHandler.sendEmptyMessage(MSG_FAILED);
}
}
public void stopRandom() {
shouldStop = true;
try {
this.interrupt();
} catch (Exception e) {
Log.d(TAG, "stopRandom: Interruption Error");
}
}
}
@Override
public void onDestroy(){
super.onDestroy();
mCoverView.setImageBitmap(null);
mLangFieldView.setImageBitmap(null);
}
}