package com.noshufou.android.su;
import com.noshufou.android.su.preferences.Preferences;
import com.noshufou.android.su.provider.PermissionsProvider.Logs;
import com.noshufou.android.su.util.Util;
import com.noshufou.android.su.widget.ChangeLog;
import com.noshufou.android.su.widget.PagerHeader;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.drawable.TransitionDrawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.MenuCompat;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ImageView;
import java.util.ArrayList;
public class HomeActivity extends FragmentActivity {
// private static final String TAG = "Su.HomeActivity";
private static final int MENU_ELITE = 0;
private static final int MENU_GET_ELITE = 1;
private static final int MENU_CLEAR_LOG = 2;
private static final int MENU_PREFERENCES = 3;
private static final String STATE_SHOW_DETAILS = "show_details";
public boolean mDualPane = false;
private boolean mLoggingEnabled = true;
private ViewPager mPager;
private TransitionDrawable mTitleLogo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
mLoggingEnabled = prefs.getBoolean(Preferences.LOGGING, true);
if (findViewById(R.id.fragment_container) != null) {
mDualPane = true;
((AppListFragment)getSupportFragmentManager().findFragmentById(R.id.app_list))
.getListView().setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
if (savedInstanceState == null) {
if (mLoggingEnabled) {
showLog();
} else {
Fragment detailsFragment =
Fragment.instantiate(this, AppDetailsFragment.class.getName());
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.replace(R.id.fragment_container, detailsFragment);
transaction.commit();
}
}
} else {
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin));
// mPager.setPageMarginDrawable(new ColorDrawable(0xff5e5e5e));
PagerHeader pagerHeader = (PagerHeader) findViewById(R.id.pager_header);
PagerAdapter pagerAdapter = new PagerAdapter(this, mPager, pagerHeader);
pagerAdapter.addPage(AppListFragment.class, R.string.page_label_apps);
if (mLoggingEnabled) {
pagerAdapter.addPage(LogFragment.class, R.string.page_label_log);
} else {
pagerHeader.setVisibility(View.GONE);
}
// DEBUG
// pagerAdapter.addPage(AppListFragment.class, null, "APPS");
// pagerAdapter.addPage(LogFragment.class, null, "LOGS");
// pagerAdapter.addPage(AppListFragment.class, null, "more apps");
// pagerAdapter.addPage(LogFragment.class, null, "more logs");
// END DEBUG
}
mTitleLogo =
(TransitionDrawable) ((ImageView)findViewById(android.R.id.home)).getDrawable();
new EliteCheck().execute();
ChangeLog cl = new ChangeLog(this);
if (cl.firstRun()) {
cl.getLogDialog().show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem item;
if (Util.elitePresent(this, false, 0)) {
item = menu.add(Menu.NONE, MENU_ELITE,
MENU_ELITE, R.string.menu_extras);
item.setIcon(R.drawable.ic_menu_star);
MenuCompat.setShowAsAction(item, MenuItem.SHOW_AS_ACTION_IF_ROOM);
} else {
item = menu.add(Menu.NONE, MENU_GET_ELITE,
MENU_GET_ELITE, R.string.pref_get_elite_title);
item.setIcon(R.drawable.ic_menu_star);
MenuCompat.setShowAsAction(item, MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
if (mLoggingEnabled) {
item = menu.add(Menu.NONE, MENU_CLEAR_LOG,
MENU_CLEAR_LOG, R.string.menu_clear_log);
item.setIcon(R.drawable.ic_menu_clear_log);
MenuCompat.setShowAsAction(item, MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
item = menu.add(Menu.NONE, MENU_PREFERENCES,
MENU_PREFERENCES, R.string.menu_preferences);
item.setIcon(R.drawable.ic_menu_preferences);
MenuCompat.setShowAsAction(item, MenuItem.SHOW_AS_ACTION_IF_ROOM);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ELITE:
Intent eliteIntent = new Intent();
eliteIntent.setComponent(new ComponentName("com.noshufou.android.su.elite",
"com.noshufou.android.su.elite.FeaturedAppsActivity"));
startActivity(eliteIntent);
break;
case MENU_GET_ELITE:
Intent mktIntent = new Intent(Intent.ACTION_VIEW);
mktIntent.setData(Uri.parse("market://details?id=com.noshufou.android.su.elite"));
startActivity(mktIntent);
break;
case MENU_CLEAR_LOG:
getContentResolver().delete(Logs.CONTENT_URI, null, null);
break;
case MENU_PREFERENCES:
Util.launchPreferences(this);
break;
}
return super.onOptionsItemSelected(item);
}
public void showDetails(long id) {
if (mDualPane) {
Fragment fragment = getSupportFragmentManager()
.findFragmentById(R.id.fragment_container);
if (fragment instanceof AppDetailsFragment) {
((AppDetailsFragment)fragment).setShownIndex(id);
} else {
Bundle bundle = new Bundle();
bundle.putLong("index", id);
Fragment detailsFragment =
Fragment.instantiate(this, AppDetailsFragment.class.getName(), bundle);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.replace(R.id.fragment_container, detailsFragment);
transaction.addToBackStack(STATE_SHOW_DETAILS);
transaction.commit();
}
} else {
Intent intent = new Intent(this, AppDetailsActivity.class);
intent.putExtra("index", id);
startActivity(intent);
}
}
public void closeDetails() {
if (mDualPane) {
getSupportFragmentManager()
.popBackStack(STATE_SHOW_DETAILS, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
public void showLog() {
if (mDualPane) {
Fragment logFragment = Fragment.instantiate(this, LogFragment.class.getName());
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.replace(R.id.fragment_container, logFragment);
transaction.commit();
}
}
public static class PagerAdapter extends FragmentPagerAdapter
implements ViewPager.OnPageChangeListener, PagerHeader.OnHeaderClickListener {
private final Context mContext;
private final ViewPager mPager;
private final PagerHeader mHeader;
private final ArrayList<PageInfo> mPages = new ArrayList<PageInfo>();
static final class PageInfo {
private final Class<?> clss;
private final Bundle args;
PageInfo(Class<?> _clss, Bundle _args) {
clss = _clss;
args = _args;
}
}
public PagerAdapter(FragmentActivity activity, ViewPager pager,
PagerHeader header) {
super(activity.getSupportFragmentManager());
mContext = activity;
mPager = pager;
mHeader = header;
mHeader.setOnHeaderClickListener(this);
mPager.setAdapter(this);
mPager.setOnPageChangeListener(this);
}
public void addPage(Class<?> clss, int res) {
addPage(clss, null, res);
}
public void addPage(Class<?> clss, String title) {
addPage(clss, null, title);
}
public void addPage(Class<?> clss, Bundle args, int res) {
addPage(clss, null, mContext.getResources().getString(res));
}
public void addPage(Class<?> clss, Bundle args, String title) {
PageInfo info = new PageInfo(clss, args);
mPages.add(info);
mHeader.add(0, title);
notifyDataSetChanged();
}
@Override
public int getCount() {
return mPages.size();
}
@Override
public Fragment getItem(int position) {
PageInfo info = mPages.get(position);
return Fragment.instantiate(mContext, info.clss.getName(), info.args);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
mHeader.setPosition(position, positionOffset, positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {
mHeader.setDisplayedPage(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onHeaderClicked(int position) {
}
@Override
public void onHeaderSelected(int position) {
mPager.setCurrentItem(position);
}
}
private class EliteCheck extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
return Util.elitePresent(HomeActivity.this, false, 0);
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
mTitleLogo.startTransition(1000);
}
}
}
}