package cn.koolcloud.ipos.appstore.ui;
import android.content.Intent;
import android.database.MatrixCursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.view.ViewStub;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import cn.koolcloud.ipos.appstore.AppStoreApplication;
import cn.koolcloud.ipos.appstore.R;
import cn.koolcloud.ipos.appstore.adapter.ActionBarSuggestionsAdapter;
import cn.koolcloud.ipos.appstore.constant.Constants;
import cn.koolcloud.ipos.appstore.fragment.SoftwareDetailCommentFragment;
import cn.koolcloud.ipos.appstore.fragment.SoftwareDetailCommentFragment.OnFragmentActionListener;
import cn.koolcloud.ipos.appstore.fragment.SoftwareDetailLeftFragment;
import cn.koolcloud.ipos.appstore.fragment.SoftwareDetailLeftFragment.OnSoftwareDetailLeftAttachedListener;
import cn.koolcloud.ipos.appstore.fragment.SoftwareDetailMainFragment;
import cn.koolcloud.ipos.appstore.fragment.SoftwareDetailMainFragment.OnSoftwareDetailAttachedListener;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.widget.SearchView;
public class SoftwareDetailActivity extends BaseActivity implements SearchView.OnQueryTextListener,
SearchView.OnSuggestionListener, ActionBar.TabListener,
OnSoftwareDetailLeftAttachedListener, OnSoftwareDetailAttachedListener, OnFragmentActionListener {
private static final String TAG = "SoftwareDetailActivity";
private SearchView searchView; //search view in action bar
private ActionBar actionBar; //action bar
private boolean useLogo = false; //action bar logo
private boolean showHomeUp = true; //show home up in action bar
private ActionBarSuggestionsAdapter mSuggestionsAdapter; //adapter for search view
private boolean isAddedTabs = false; //if the tab is added to the action bar.
private LinearLayout softDetailsContainerLayout; //contain all the details of app
private LinearLayout waitingViewContainerLayout; //contain all the details of waiting view
private RelativeLayout noNetWorkContainerLayout; //contain all the details of no network
private ViewStub viewStub;
private static FragmentManager fragmentManager = null;
// private List<App> appListDataSource = null; //apps data source
// private int currentPosition = 0;
// private App app = null;
private Bundle mBundle;
private static SoftwareDetailActivity instance;
public static SoftwareDetailActivity getInstance() {
return instance;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
setContentView(R.layout.software_detail);
fragmentManager = getSupportFragmentManager();
mBundle = getIntent().getExtras();
/*appListDataSource = (List<App>) getIntent().getExtras().getSerializable(Constants.SER_KEY);
currentPosition = getIntent().getExtras().getInt(Constants.APP_LIST_POSITION);
app = appListDataSource.get(currentPosition);*/
activityList.add(this);
initActionBar();
initFragments();
}
private void initFragments() {
// softDetailsContainerLayout = (LinearLayout) findViewById(R.id.software_content);
// softDetailsContainerLayout.setVisibility(View.VISIBLE);
viewStub = (ViewStub) findViewById(R.id.viewstub);
viewStub.setVisibility(View.VISIBLE);
waitingViewContainerLayout = (LinearLayout) findViewById(R.id.software_loading);
waitingViewContainerLayout.setVisibility(View.GONE);
noNetWorkContainerLayout = (RelativeLayout) findViewById(R.id.nonetwork);
noNetWorkContainerLayout.setVisibility(View.GONE);
/*SoftwareDetailLeftFragment detailLeftFragment = (SoftwareDetailLeftFragment) fragmentManager.findFragmentById(R.id.software_detail_left);
detailLeftFragment.setArguments(mBundle);
SoftwareDetailMainFragment detailMainFragment = (SoftwareDetailMainFragment) fragmentManager.findFragmentById(R.id.software_detail_main);
detailMainFragment.setArguments(mBundle);*/
}
/**
* @Title: initActionBar
* @Description: Initialize Action Bar
* @param
* @return void
* @throws
*/
private void initActionBar() {
actionBar = getSupportActionBar();
// set defaults for logo & home up
actionBar.setDisplayHomeAsUpEnabled(showHomeUp);
actionBar.setDisplayUseLogoEnabled(useLogo);
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.title_bg));
actionBar.setIcon(R.drawable.logo);
showTabsNav();
// set up list nav
actionBar.setListNavigationCallbacks(ArrayAdapter.createFromResource(this, R.array.sections,
R.layout.sherlock_spinner_dropdown_item),
new OnNavigationListener() {
public boolean onNavigationItemSelected(int itemPosition,
long itemId) {
// FIXME add proper implementation
return false;
}
});
}
public Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
private void showTabsNav() {
if (actionBar.getNavigationMode() != ActionBar.NAVIGATION_MODE_TABS) {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
}
}
/*@Override
protected void onDestroy() {
activityList.remove(this);
super.onDestroy();
}*/
private void initSearchView() {
//Create the search view
searchView = new SearchView(getSupportActionBar().getThemedContext());
searchView.setQueryHint("Search for apps��");
searchView.setOnQueryTextListener(this);
searchView.setOnSuggestionListener(this);
if (mSuggestionsAdapter == null) {
MatrixCursor cursor = new MatrixCursor(Constants.COLUMNS);
cursor.addRow(new String[]{"1", "'Murica"});
cursor.addRow(new String[]{"2", "Canada"});
cursor.addRow(new String[]{"3", "Denmark"});
mSuggestionsAdapter = new ActionBarSuggestionsAdapter(getSupportActionBar().getThemedContext(), cursor);
}
searchView.setSuggestionsAdapter(mSuggestionsAdapter);
}
public void refreshLocalSoftData() {
((AppStoreApplication) application).initApps();
try {
//delay execute invoke refresh data set
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/*SoftwareDetailLeftFragment detailLeftFragment = (SoftwareDetailLeftFragment) fragmentManager.findFragmentById(R.id.software_detail_left);
if (detailLeftFragment != null) {
detailLeftFragment.refreshDataStatus();
}*/
SoftwareDetailLeftFragment.refreshDataStatus();
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
//implement these two interfaces to pass argument after the fragments created on the host activity
//otherwise fragmentManager will find a null fragment.
@Override
public void onDetailLeftActivityCreated() {
SoftwareDetailLeftFragment detailLeftFragment = (SoftwareDetailLeftFragment) fragmentManager.findFragmentById(R.id.software_detail_left);
detailLeftFragment.setArguments(mBundle);
}
@Override
public void onDetailActivityCreated() {
SoftwareDetailMainFragment detailLeftFragment = (SoftwareDetailMainFragment) fragmentManager.findFragmentById(R.id.software_detail_main);
detailLeftFragment.setArguments(mBundle);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SoftwareDetailLeftFragment.SOFTWARE_DETAIL_LEFT_REQUEST) {
SoftwareDetailLeftFragment detailLeftFragment = (SoftwareDetailLeftFragment) fragmentManager.findFragmentById(R.id.software_detail_left);
if (detailLeftFragment != null) {
detailLeftFragment.onActivityResult(requestCode, resultCode, data);
}
}
if (requestCode == SoftwareDetailMainFragment.SOFTWARE_DETAIL_MAIN_COMMENT_REQUEST) {
SoftwareDetailMainFragment detailFragment = (SoftwareDetailMainFragment) fragmentManager.findFragmentById(R.id.software_detail_main);
if (detailFragment != null) {
detailFragment.onActivityResult(requestCode, resultCode, data);
}
}
}
@Override
public void closeCommentFragment() {
SoftwareDetailCommentFragment commentFragment = (SoftwareDetailCommentFragment) fragmentManager.findFragmentById(R.id.software_detail_main);
if (commentFragment != null) {
fragmentManager.beginTransaction().remove(commentFragment).commit();
}
}
}