package com.foodie.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; import com.foodie.app.Entity.JsonResult; import com.foodie.app.Entity.Result; import com.foodie.app.R; import com.foodie.app.fragment.DishCoverFragment; import com.foodie.app.fragment.DishInfoCommentFragment; import com.foodie.app.fragment.DishInfoItemFragment; import com.foodie.app.fragment.RecommentFragment; import com.foodie.app.model.Collection; import com.foodie.app.model.DishInfo; import com.foodie.app.util.HttpUtils; import com.foodie.app.util.PrefUtils; import com.foodie.app.view.ViewPagerIndicator; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.loopj.android.http.AsyncHttpResponseHandler; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import cn.pedant.SweetAlert.SweetAlertDialog; import cz.msebera.android.httpclient.Header; /** * Created by HaPBoy on 5/18/16. */ public class DishInfoActivity extends AppCompatActivity { private static String TAG = "DishInfoActivity"; // Context private Context context; // ViewPager private ViewPager viewPager; private FragmentPagerAdapter pagerAdapter; //是否已经收藏 private boolean isDishFavorite = false; //用户是否登录 private boolean isUserLogin; // ViewPagerIndicator private ViewPagerIndicator viewPagerIndicator; private List<String> titles = Arrays.asList("美食详情", "相关评论", "猜你喜欢"); // Fragment private List<Fragment> fragments = new ArrayList<>(); private DishInfo dishInfo; //收藏按钮图片 private int iconFavorite[] = {R.drawable.ic_favorite_border_white, R.drawable.ic_favorite_white}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dish_info); // Context context = this; //获取美食信息 dishInfo = (DishInfo) getIntent().getSerializableExtra("dishInfo"); //初始化用户状态 isUserLogin = getUserState(); if (isUserLogin) { Log.i(TAG, "用户已经登录" + isUserLogin); updateDishFavorite();//更新收藏状态 } //初始化toolbar Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final ActionBar ab = getSupportActionBar(); //ab.setHomeAsUpIndicator(R.drawable.ic_menu); ab.setDisplayHomeAsUpEnabled(true); //初始化界面信息 setTitle(dishInfo.getDishName()); // ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager); // ViewPagerIndicator viewPagerIndicator = (ViewPagerIndicator) findViewById(R.id.indicator); viewPagerIndicator.setTabItemTitles(titles); viewPagerIndicator.setVisibleTabCount(3); // 基本信息 Fragment fragments.add(DishInfoItemFragment.newInstance(context,dishInfo)); // 评论 Fragment fragments.add(new DishInfoCommentFragment()); // 推荐 Fragment fragments.add(new RecommentFragment()); // PagerAdapter pagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public int getCount() { return fragments.size(); } @Override public Fragment getItem(int position) { return fragments.get(position); } }; // 设置数据适配器 viewPager.setAdapter(pagerAdapter); viewPagerIndicator.setViewPager(viewPager, 0); // 封面图 Fragment dishFragment = DishCoverFragment.newInstance(context,dishInfo); getSupportFragmentManager().beginTransaction().add(R.id.fragment_dish_cover, dishFragment).commit(); } private boolean getUserState() { if (PrefUtils.get("user", "userId", getBaseContext()) == null) { //Toast.makeText(DishInfoActivity.this, "请先登录", Toast.LENGTH_LONG).show(); return false; } return true; } private boolean updateDishFavorite() { if (HttpUtils.isNetworkConnected(this)) { HttpUtils.getWithAuth(getBaseContext(), "dish/" + dishInfo.getId() + "/iscollect/", new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { Gson gson=new Gson(); //Type type = new TypeToken<JsonResult<User>>(){}.getType(); Type type = new TypeToken<JsonResult<Collection>>(){}.getType(); JsonResult<Collection> jsonResult=gson.fromJson(new String(responseBody),type); String status=jsonResult.getStatus(); String tipCode = jsonResult.getTipCode(); //Log.v(TAG,data); Log.i(TAG, "获取收藏状态成功" + new String(responseBody)); if (TextUtils.equals(status, Result.SUCCESS) && TextUtils.equals(tipCode, "collect")) { Log.i(TAG, "用户收藏了该美食"); isDishFavorite=true; invalidateOptionsMenu(); return; } else if (TextUtils.equals(status, Result.SUCCESS) && TextUtils.equals(tipCode, "notCollect")) { Log.i(TAG, "用户未收藏该美食"); isDishFavorite=false; invalidateOptionsMenu(); return; } else if (TextUtils.equals(status, Result.FAILED) && TextUtils.equals(tipCode, "notLogin")) { Log.i(TAG, "客户端登录,服务端session失效"); Toast.makeText(DishInfoActivity.this, "登录状态失效,请重新登录", Toast.LENGTH_LONG).show(); startActivity(new Intent(DishInfoActivity.this, LoginActivity.class)); DishInfoActivity.this.finish(); } else if (TextUtils.equals(status, Result.FAILED) && TextUtils.equals(tipCode, "notExist")) { Log.i(TAG, "菜品不存在"); Toast.makeText(DishInfoActivity.this, "该菜品已下架", Toast.LENGTH_LONG).show(); } invalidateOptionsMenu(); } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { Toast.makeText(DishInfoActivity.this,"获取收藏数据失败",Toast.LENGTH_LONG).show(); Log.i(TAG, "获取收藏状态失败" + new String(responseBody)); } }); } else { Toast.makeText(this, "请检查网络连接!", Toast.LENGTH_LONG).show(); } return false; } private void toggleFavorite() { if (HttpUtils.isNetworkConnected(this)) { HttpUtils.postWithAuth(getBaseContext(), "dish/" + dishInfo.getId() + "/toggleCollect/", new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { Gson gson=new Gson(); //Type type = new TypeToken<JsonResult<User>>(){}.getType(); Type type = new TypeToken<JsonResult<Collection>>(){}.getType(); JsonResult<Collection> jsonResult=gson.fromJson(new String(responseBody),type); String status=jsonResult.getStatus(); String tipCaode=jsonResult.getTipCode(); //Log.v(TAG,data); if (TextUtils.equals(status,Result.FAILED)&&TextUtils.equals(tipCaode,"notLogin")){ Toast.makeText(DishInfoActivity.this,"请先登录",Toast.LENGTH_LONG).show(); Log.i(TAG, "客户端已登录,服务端session失效"); return; }else if(TextUtils.equals(status,Result.FAILED)&&TextUtils.equals(tipCaode,"notExist")){ Toast.makeText(DishInfoActivity.this,"菜品不存在",Toast.LENGTH_LONG).show(); Log.i(TAG, "传入的菜品id不存在"); return; }else if(TextUtils.equals(status,Result.FAILED)&&TextUtils.equals(tipCaode,"CollectFail")){ Toast.makeText(DishInfoActivity.this,"收藏失败",Toast.LENGTH_LONG).show(); Log.i(TAG, "收藏失败"); return; }else if(TextUtils.equals(status,Result.FAILED)&&TextUtils.equals(tipCaode,"unCollectFail")){ Toast.makeText(DishInfoActivity.this,"取消收藏失败",Toast.LENGTH_LONG).show(); Log.i(TAG, "取消失败"); return; }else if(TextUtils.equals(status,Result.SUCCESS)&&TextUtils.equals(tipCaode,"Collect")){ //Toast.makeText(DishInfoActivity.this,"收藏成功",Toast.LENGTH_LONG).show(); Log.i(TAG, "收藏成功"); isDishFavorite=true; invalidateOptionsMenu(); return; }else if(TextUtils.equals(status,Result.SUCCESS)&&TextUtils.equals(tipCaode,"unCollect")){ //Toast.makeText(DishInfoActivity.this,"取消成功",Toast.LENGTH_LONG).show(); Log.i(TAG, "取消成功"); isDishFavorite=false; invalidateOptionsMenu(); return; } } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { Toast.makeText(DishInfoActivity.this,"获取收藏数据失败",Toast.LENGTH_LONG).show(); Log.i("DishInfoActivity",new String(responseBody)); } }); } else { Toast.makeText(this, "请检查网络连接!", Toast.LENGTH_LONG).show(); } return; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; case R.id.action_favorite: toggleFavorite(); if (isUserLogin) { new SweetAlertDialog(context, SweetAlertDialog.SUCCESS_TYPE) .setTitleText(isDishFavorite ? "取消收藏" : "收藏成功") .setContentText(isDishFavorite ? "美食已取消收藏" : "美食已收藏") .setConfirmText("确定") .show(); } return true; case R.id.action_browser: Intent intent = new Intent(Intent.ACTION_VIEW); startActivity(intent); return true; default: return super.onOptionsItemSelected(item); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.dish_info, menu); return true; } // @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem menuItem = menu.findItem(R.id.action_favorite); Log.i(TAG, "Pre" + isDishFavorite); menuItem.setIcon(isDishFavorite?iconFavorite[1]:iconFavorite[0]); return super.onPrepareOptionsMenu(menu); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { onBackPressed(); return true; } else { return super.onKeyDown(keyCode, event); } } }