package cn.koolcloud.ipos.appstore.ui; import java.util.List; import android.content.Intent; 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.KeyEvent; import android.widget.ArrayAdapter; import cn.koolcloud.ipos.appstore.AppStoreApplication; import cn.koolcloud.ipos.appstore.R; import cn.koolcloud.ipos.appstore.adapter.ActionBarSuggestionsAdapter; import cn.koolcloud.ipos.appstore.cache.database.CacheDB; import cn.koolcloud.ipos.appstore.entity.App; import cn.koolcloud.ipos.appstore.entity.AppInfo; import cn.koolcloud.ipos.appstore.fragment.LeftNavigationFragment; import cn.koolcloud.ipos.appstore.fragment.LeftNavigationFragment.OnTabChangedListener; import cn.koolcloud.ipos.appstore.fragment.tab.LocalSoftwareManagerFragment; import cn.koolcloud.ipos.appstore.fragment.tab.UpdateSoftwareFragment; import cn.koolcloud.ipos.appstore.utils.Env; import cn.koolcloud.ipos.appstore.utils.ToastUtil; import cn.koolcloud.ipos.appstore.utils.Utils; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.OnNavigationListener; import com.actionbarsherlock.app.ActionBar.Tab; import com.actionbarsherlock.widget.SearchView; public class MainFrameActivity extends BaseActivity implements SearchView.OnQueryTextListener, SearchView.OnSuggestionListener, OnTabChangedListener { private static final String TAG = "MainFrameActivity"; private static final int HANDLE_UPDATE_APP = 0; private long exitTime = 0; private static final int EXIT_LAST_TIME = 2000; private SearchView searchView; //search view in action bar private ActionBar actionBar; //action bar private boolean useLogo = false; //action bar logo private boolean showHomeUp = false; //show home up in action bar private ActionBarSuggestionsAdapter mSuggestionsAdapter; //adapter for search view private static FragmentManager fragmentManager = null; private final String installedTabStr = "installed_tab"; private final String canUpdateTabStr = "can_update_tab"; private static MainFrameActivity instance; public static MainFrameActivity getInstance() { return instance; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); instance = this; setContentView(R.layout.main_framework); fragmentManager = getSupportFragmentManager(); activityList.add(this); initActionBar(); initFragments(); getClientVersion(); } private void initFragments() { //navigation bar LeftNavigationFragment navFragment = LeftNavigationFragment.getInstance(); //replace FrameLayout DetailFragment FragmentTransaction fragTransaction = fragmentManager.beginTransaction(); fragTransaction.replace(R.id.left_content, navFragment); fragTransaction.commit(); } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case HANDLE_UPDATE_APP: List<App> appList = (List<App>) msg.obj; UpdateSoftwareFragment.refreshDataSet(appList); break; default: break; } } }; public void refreshLocalSoftData() { /*LocalSoftwareManagerFragment localSoft = LocalSoftwareManagerFragment.getInstance(); android.app.FragmentTransaction fragTransaction = fragmentManager.beginTransaction(); fragTransaction.replace(R.id.frame_content, localSoft); fragTransaction.commit();*/ ((AppStoreApplication) application).initApps(); LocalSoftwareManagerFragment.notifyDataSetChanged(Env.getInstalledAppsToList(application, false)); } /** * @Title: refreshUpdateSoftData * @Description: update the status of UpdateSoftwareFragement * @return: void */ public void refreshUpdateSoftData() { new CheckUpdateSoftwareThread().start(); } //check out the installed software and compare the version with the cache in the database class CheckUpdateSoftwareThread extends Thread { @Override public void run() { List<AppInfo> installedSoftList = Env.getInstalledAppsToList(application, false); CacheDB cacheDB = CacheDB.getInstance(application); List<App> appListDataSource = cacheDB.getUpdatedSoft(installedSoftList); Message msg = mHandler.obtainMessage(); msg.what = HANDLE_UPDATE_APP; msg.obj = appListDataSource; mHandler.sendMessage(msg); } } /** * @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; } }); } private void setupTabs() { Tab installedTab = actionBar.newTab(); installedTab.setText(Utils.getResourceString(getApplicationContext(), R.string.installed)); installedTab.setTag(installedTabStr); installedTab.setTabListener(new TabSelectListener()); actionBar.addTab(installedTab); Tab canUpdatedTab = actionBar.newTab(); canUpdatedTab.setText(Utils.getResourceString(getApplicationContext(), R.string.can_update)); canUpdatedTab.setTag(canUpdateTabStr); canUpdatedTab.setTabListener(new TabSelectListener()); actionBar.addTab(canUpdatedTab); } private void showTabsNav() { if (actionBar.getNavigationMode() != ActionBar.NAVIGATION_MODE_TABS) { actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); } } public class TabSelectListener implements ActionBar.TabListener { @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { String selectedTabTag = String.valueOf(tab.getTag()); //TODO: must get child transaction and can't use the argument ft, //otherwise the programe will throw "commit already called" exception when add the tabs FragmentTransaction tran = fragmentManager.beginTransaction(); if (selectedTabTag.equals(installedTabStr)) { LocalSoftwareManagerFragment localSoftFragment = LocalSoftwareManagerFragment.getInstance(); tran.replace(R.id.frame_content, localSoftFragment); tran.commit(); } else if (selectedTabTag.equals(canUpdateTabStr)) { UpdateSoftwareFragment updateSoftFragment = UpdateSoftwareFragment.getInstance(); tran.replace(R.id.frame_content, updateSoftFragment); tran.commit(); } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { UpdateSoftwareFragment updateSoftFragment = (UpdateSoftwareFragment) fragmentManager.findFragmentById(R.id.frame_content); if (updateSoftFragment != null) { updateSoftFragment.onActivityResult(requestCode, resultCode, data); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){ if ((System.currentTimeMillis() - exitTime) > EXIT_LAST_TIME) { ToastUtil.showToast(getApplicationContext(), R.string.msg_exist_toast); exitTime = System.currentTimeMillis(); } else { exit(); } return true; } return super.onKeyDown(keyCode, event); } @Override public void disableAllTabs() { actionBar.removeAllTabs(); } @Override public void enableAllTabs() { setupTabs(); } }