package com.zhan_dui.animetaste; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.preference.PreferenceManager; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.view.KeyEvent; import android.widget.Toast; import com.activeandroid.ActiveAndroid; import com.activeandroid.query.Delete; import com.loopj.android.http.JsonHttpResponseHandler; import com.umeng.analytics.MobclickAgent; import com.zhan_dui.data.AnimeTasteDB; import com.zhan_dui.data.ApiConnector; import com.zhan_dui.model.Advertise; import com.zhan_dui.model.Animation; import com.zhan_dui.model.Category; import com.zhan_dui.model.WatchRecord; import com.zhan_dui.utils.NetworkUtils; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import cn.sharesdk.framework.ShareSDK; public class LoadActivity extends ActionBarActivity { private Context mContext; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; google_bug(); ActiveAndroid.setLoggingEnabled(false); ShareSDK.initSDK(mContext); updateFromOldVersion(); setContentView(R.layout.activity_load); MobclickAgent.onError(this); if (PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean( "only_wifi", true) && !NetworkUtils.isWifiConnected(mContext)) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext) .setTitle(R.string.only_wifi_title).setMessage( R.string.only_wifi_body); builder.setCancelable(false); builder.setPositiveButton(R.string.only_wifi_ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); init(); } }); builder.setNegativeButton(R.string.only_wifi_cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); builder.create().show(); } else { init(); } } ; private void google_bug() {//for support android 2.3 new PrepareTask(null); try { ActionBar ab = getSupportActionBar();//support library bug if (ab != null) { ab.hide(); } } catch (Exception e) { } } private void init() { if (getIntent().getAction().equals(Intent.ACTION_VIEW)) { Uri uri = getIntent().getData(); if (uri == null) { error(); } String vid = uri.getQueryParameter("vid"); int animationId = Integer.valueOf(vid); ApiConnector.instance().getDetail(animationId, new JsonHttpResponseHandler() { @Override public void onSuccess(int statusCode, final JSONObject response) { super.onSuccess(statusCode, response); try { if (statusCode == 200 && response.has("data") && response.getJSONObject("data").has("result") && response.getJSONObject("data").getBoolean("result")) { final JSONObject anime = response.getJSONObject("data").getJSONObject("anime"); new Thread() { @Override public void run() { super.run(); MobclickAgent.onEvent(mContext, "yell"); final Intent intent = new Intent(mContext, PlayActivity.class); Animation animation = Animation.build(anime); intent.putExtra("Animation", animation); runOnUiThread(new Runnable() { @Override public void run() { startActivity(intent); finish(); } }); } }.start(); } else { error(); } } catch (Exception e) { e.printStackTrace(); error(); } } @Override public void onFailure(Throwable throwable, JSONArray jsonArray) { super.onFailure(throwable, jsonArray); error(); } @Override public void onFinish() { super.onFinish(); } }); } else { ApiConnector.instance().getInitData(20, 5, 2, new JsonHttpResponseHandler() { @Override public void onSuccess(int statusCode, final JSONObject response) { super.onSuccess(response); if (statusCode == 200 && response.has("data")) { Message msg = Message.obtain(); msg.obj = response; executeHandler.sendMessage(msg); } else { error(); } } @Override public void onFailure(Throwable error) { super.onFailure(error); error(); } }); } } private Handler executeHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); JSONObject o = (JSONObject) msg.obj; PrepareTask t = new PrepareTask(o); t.execute(); } }; private class PrepareTask extends AsyncTask<Void, Void, Boolean> { private JSONObject mSetupResponse; private Intent mIntent; private boolean mResult = false; public PrepareTask(JSONObject setupObject) { mSetupResponse = setupObject; } @Override protected Boolean doInBackground(Void... voids) { try { JSONObject list = mSetupResponse.getJSONObject("data").getJSONObject("list"); JSONArray animations = list.getJSONArray("anime"); JSONArray category = list.getJSONArray("category"); JSONArray advert = null; if (list.has("advert")) advert = list.getJSONArray("advert"); JSONArray feature = list.getJSONArray("recommend"); ArrayList<Animation> Animations = Animation.build(animations); ArrayList<Category> Categories = new ArrayList<Category>(); ArrayList<Advertise> Advertises = new ArrayList<Advertise>(); ArrayList<Animation> Recommends = new ArrayList<Animation>(); new Delete().from(Animation.class).where("IsFavorite='0'").execute(); new Delete().from(Category.class).execute(); new Delete().from(Advertise.class).execute(); ActiveAndroid.beginTransaction(); for (int i = 0; i < Animations.size(); i++) { Animations.get(i).save(); } for (int i = 0; i < category.length(); i++) { Category cat = Category.build(category.getJSONObject(i)); Categories.add(cat); cat.save(); } if (advert != null) { for (int i = 0; i < advert.length(); i++) { Advertise ad = Advertise.build(advert.getJSONObject(i)); Advertises.add(ad); ad.save(); } } for (int i = 0; i < feature.length(); i++) { Recommends.add(Animation.build(feature.getJSONObject(i))); } mIntent = new Intent(LoadActivity.this, StartActivity.class); mIntent.putParcelableArrayListExtra("Animations", Animations); mIntent.putParcelableArrayListExtra("Categories", Categories); mIntent.putParcelableArrayListExtra("Advertises", Advertises); mIntent.putParcelableArrayListExtra("Recommends", Recommends); mIntent.putExtra("Success", true); mResult = true; } catch (Exception e) { e.printStackTrace(); mResult = false; } finally { ActiveAndroid.setTransactionSuccessful(); ActiveAndroid.endTransaction(); return mResult; } } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); if (mResult) { startActivity(mIntent); finish(); } else { error(); } } } private Handler errorHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Toast.makeText(mContext, R.string.get_data_error, Toast.LENGTH_SHORT) .show(); Intent intent = new Intent(LoadActivity.this, DownloadActivity.class); startActivity(intent); finish(); } }; private void error() { errorHandler.sendEmptyMessage(0); } @Override protected void onResume() { super.onResume(); MobclickAgent.onResume(mContext); } @Override protected void onPause() { super.onPause(); MobclickAgent.onPause(mContext); } /** * 从历史版本的数据库中迁移数据 */ private void updateFromOldVersion() { if (PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean("updated", false)) { return; } if (mContext.getDatabasePath(AnimeTasteDB.NAME).exists()) { AnimeTasteDB db = new AnimeTasteDB(mContext, AnimeTasteDB.NAME, null, AnimeTasteDB.VERSION); Cursor cursor = db.getReadableDatabase().query(true, "Video", null, "isFav=?", new String[]{String.valueOf(true)}, null, null, null, null); while (cursor.moveToNext()) { Animation animation = Animation.build(cursor); animation.save(); } cursor.close(); db.close(); Cursor watchCursor = db.getReadableDatabase().query(true, "Watched", null, null, null, null, null, null, null); while (watchCursor.moveToNext()) { WatchRecord record = new WatchRecord(watchCursor.getInt(watchCursor.getColumnIndex("vid")), true); record.save(); } cursor.close(); db.close(); } PreferenceManager.getDefaultSharedPreferences(mContext).edit().putBoolean("updated", true).commit(); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { System.exit(0); } return super.onKeyUp(keyCode, event); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { return true; } return super.onKeyDown(keyCode, event); } }