package com.xiaomi.xms.sales.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.database.Cursor; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.SimpleOnPageChangeListener; import android.text.TextUtils; import android.view.Menu; import android.view.View; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.UploadLogService; import com.xiaomi.xms.sales.adapter.FragmentPagerAdapter; import com.xiaomi.xms.sales.adapter.FragmentPagerAdapter.TabChangedListener; import com.xiaomi.xms.sales.db.DBContract.DataMimeType; import com.xiaomi.xms.sales.db.DBContract.DataStats; import com.xiaomi.xms.sales.db.RegionDBHelper; import com.xiaomi.xms.sales.db.RegionDBHelper.RegionInfo; import com.xiaomi.xms.sales.ui.AttentionTestFragment; import com.xiaomi.xms.sales.ui.BaseFragment; import com.xiaomi.xms.sales.ui.CategoryFragment; import com.xiaomi.xms.sales.ui.RASSTestFragment; import com.xiaomi.xms.sales.ui.ThinkingTestFragment; import com.xiaomi.xms.sales.util.Constants; import com.xiaomi.xms.sales.util.LogUtil; import com.xiaomi.xms.sales.util.ToastUtil; import com.xiaomi.xms.sales.util.Utils; import com.xiaomi.xms.sales.widget.BaseLayout.BackKeyListener; import com.xiaomi.xms.sales.widget.TabIndicator; public class MainActivity extends BaseActivity implements TabChangedListener, BackKeyListener { private static final String TAG = "MainActivity"; private ViewPager mViewPager; private FragmentPagerAdapter mPagerAdapter; private BaseFragment mHomeFragment; private BaseFragment mCategoryFragment; private BaseFragment mLotteryFragment; public static final String FRAGMENT_TAG_HOME = "fragment_tag_home"; public static final String FRAGMENT_TAG_CATEGORY = "fragment_tag_category"; public static final String FRAGMENT_TAG_LOTTERY = "fragment_tag_lottery"; private static final String STATE_TAB_LEFT_MARGIN = "tabLeftMargin"; private static final String STATE_TAB_RIGHT_MARGIN = "tabRightMargin"; private TabIndicator mTabHome; private TabIndicator mTabCategory; private TabIndicator mTabLottery; public View tabs; private View mTabContainerBg; private String mCurrentTag = FRAGMENT_TAG_HOME; private int mBackKeyPressedCount; private SensorManager sensorMag; private Sensor gravitySensor; private boolean mScreenStatus; private static final int EXIT_DURATION_BETWEEN_BACKKEY_PRESSED = 2 * 1000; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setCustomContentView(R.layout.main_activity); tabs = findViewById(R.id.tabs); mTabContainerBg = findViewById(R.id.tab_container_bg); mViewPager = (ViewPager) findViewById(R.id.tab_pager); mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()); mPagerAdapter.setTabChangedListener(this); mViewPager.setOffscreenPageLimit(2); mViewPager.setAdapter(mPagerAdapter); mViewPager.setOnPageChangeListener(new OnPageChangeListener()); // 立刻检查活动信息 // checkActivity(); // 初始化传感器 initGravitySensor(); setUpTabAndFragments(); configTabAndFragments(); setHomeButtonEnable(false); setShoppingBarEnable(false); // 新年祝福, 每年的新年都可能用到,不要删掉这段代码 // initFestivalAlarm(); // delayedCheckedWorks(); } /** * 初始化传感器 */ private void initGravitySensor() { sensorMag = (SensorManager) getSystemService(Context.SENSOR_SERVICE); gravitySensor = sensorMag.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); } private void updateRegionDB() { String version = null; Cursor c = this.getContentResolver().query(DataStats.CONTENT_URI, new String[] { DataStats.STATS }, DataStats.TYPE + "='" + DataMimeType.REGION + "'", null, null); try { if (c != null && c.getCount() > 0) { if (c.moveToFirst()) { version = c.getString(0); } } } finally { if (c != null) { c.close(); } } RegionInfo region = RegionDBHelper.getInstance(MainActivity.this) .readFromResource(); if (!TextUtils.equals(version, region.configs.get(RegionDBHelper.HEADER.VERSION))) { RegionDBHelper.getInstance(MainActivity.this) .updateRegionDB(region); } } private void delayedCheckedWorks() { // 可以在启动后延迟一段时间再做的工作,目的是为了使主要的工作得到优先执行 mHandler.postDelayed(new Runnable() { @Override public void run() { // 检查系统更新 checkUpdate(true); // 更新region updateRegionDB(); } }, 3 * 1000); } @Override public boolean onMenuOpened(int featureId, Menu menu) { super.onMenuOpened(featureId, menu); mMenuItemUpdate.setVisibility(View.VISIBLE); return false; } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); configTabAndFragments(); } private void configTabAndFragments() { int position = mPagerAdapter.getPositionByTag(mCurrentTag); mPagerAdapter.selectTab(position); mViewPager.setCurrentItem(position); } private void setUpTabAndFragments() { // Init the tabindicators mTabHome = (TabIndicator) findViewById(R.id.tab_indicator_home); mTabCategory = (TabIndicator) findViewById(R.id.tab_indicator_category); mTabLottery = (TabIndicator) findViewById(R.id.tab_indicator_lottery); // Setup fragments FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); mHomeFragment = (BaseFragment) manager .findFragmentByTag(FRAGMENT_TAG_HOME); if (mHomeFragment == null) { mHomeFragment = new RASSTestFragment(); transaction.add(R.id.tab_pager, mHomeFragment, FRAGMENT_TAG_HOME); } mCategoryFragment = (BaseFragment) manager .findFragmentByTag(FRAGMENT_TAG_CATEGORY); if (mCategoryFragment == null) { mCategoryFragment = new AttentionTestFragment(); transaction.add(R.id.tab_pager, mCategoryFragment, FRAGMENT_TAG_CATEGORY); } mLotteryFragment = (BaseFragment) manager .findFragmentByTag(FRAGMENT_TAG_LOTTERY); if (mLotteryFragment == null) { mLotteryFragment = new ThinkingTestFragment(); transaction.add(R.id.tab_pager, mLotteryFragment, FRAGMENT_TAG_LOTTERY); } mPagerAdapter.addFragment(mTabHome, mHomeFragment); mPagerAdapter.notifyDataSetChanged(); mPagerAdapter.addFragment(mTabCategory, mCategoryFragment); mPagerAdapter.notifyDataSetChanged(); mPagerAdapter.addFragment(mTabLottery, mLotteryFragment); mPagerAdapter.notifyDataSetChanged(); if (!transaction.isEmpty()) { transaction.commitAllowingStateLoss(); getSupportFragmentManager().executePendingTransactions(); } } @Override public void onTabChanged(int position) { mViewPager.setCurrentItem(position); } private class OnPageChangeListener extends SimpleOnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { final RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mTabContainerBg .getLayoutParams(); float leftMargin = getResources().getDimensionPixelSize( R.dimen.tab_container_bg_leftmargin); float rightMargin = 0f; TabIndicator tabIndicator = mPagerAdapter.getTab(position); if (tabIndicator != null) { float offset = positionOffset * tabIndicator.getWidth(); leftMargin += offset; rightMargin -= offset; for (int i = 1; i <= position; i++) { leftMargin += tabIndicator.getWidth(); rightMargin -= tabIndicator.getWidth(); } layoutParams.leftMargin = (int) leftMargin; layoutParams.rightMargin = (int) rightMargin; mTabContainerBg.setLayoutParams(layoutParams); } else { mViewPager.setCurrentItem(position); } } @Override public void onPageSelected(int position) { // 更新Tab的选中状态 mPagerAdapter.selectTab(position); mCurrentTag = mPagerAdapter.getTagByPosition(position); if (!mCurrentTag.equals(FRAGMENT_TAG_HOME)) { if (mHomeFragment != null) { // ((HomeFragment) mHomeFragment).switcherImage(); } } configScreenOrientation(); } } private void configScreenOrientation() { if (TextUtils.equals(mCurrentTag, FRAGMENT_TAG_HOME)) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); } else { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case Constants.RequestCode.CODE_REQUEST_HOME_FULL_SCREEN: if (resultCode == Activity.RESULT_CANCELED) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } break; default: super.onActivityResult(requestCode, resultCode, data); break; } } @Override public void onBackPressed() { super.onBackPressed(); } @Override protected void onDestroy() { // 删除所有的登录信息 Utils.Preference.removePref(this, Constants.Account.PREF_UID); Utils.Preference .removePref(this, Constants.Account.PREF_EXTENDED_TOKEN); Utils.Preference.removePref(this, Constants.Account.PREF_PASS_TOKEN); Utils.Preference.removePref(this, Constants.Account.PREF_SYSTEM_UID); Utils.Preference.removePref(this, Constants.Account.PREF_SYSTEM_EXTENDED_TOKEN); Utils.Preference.removePref(this, Constants.Account.PREF_LOGIN_SYSTEM); Utils.Preference.removePref(this, Constants.Account.PREF_USER_ORGID); Utils.Preference.removePref(this, Constants.Account.PREF_USER_NAME); Utils.Preference.removePref(this, Constants.Account.PREF_USER_ORGNAME); super.onDestroy(); } public static void launchMain(Context context, String fragmentTag) { Intent intent = new Intent(context, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra(Constants.Intent.EXTRA_GO_TO_FRAGMENT, fragmentTag); context.startActivity(intent); } @Override protected void onSaveInstanceState(Bundle outState) { RelativeLayout.LayoutParams layoutParams = (LayoutParams) mTabContainerBg .getLayoutParams(); outState.putInt(STATE_TAB_LEFT_MARGIN, layoutParams.leftMargin); outState.putInt(STATE_TAB_RIGHT_MARGIN, layoutParams.rightMargin); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); RelativeLayout.LayoutParams layoutParams = (LayoutParams) mTabContainerBg .getLayoutParams(); layoutParams.leftMargin = savedInstanceState .getInt(STATE_TAB_LEFT_MARGIN); layoutParams.rightMargin = savedInstanceState .getInt(STATE_TAB_RIGHT_MARGIN); LogUtil.d(TAG, "Restore tab container margin left:" + layoutParams.leftMargin + " right:" + layoutParams.rightMargin); mTabContainerBg.setLayoutParams(layoutParams); } @Override protected void onResume() { super.onResume(); sensorMag.registerListener(sensorLis, gravitySensor, SensorManager.SENSOR_DELAY_UI); setShoppingBarEnable(true); } @Override protected BackKeyListener getBackKeyListener() { return this; } @Override public boolean shouldHackBackKey() { return FRAGMENT_TAG_CATEGORY.equals(mCurrentTag); } @Override public void onBackKeyFired() { onBackPressed(); } @Override protected void onPause() { sensorMag.unregisterListener(sensorLis); super.onPause(); } private SensorEventListener sensorLis = new SensorEventListener() { @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) { return; } float x = event.values[SensorManager.DATA_X]; float y = event.values[SensorManager.DATA_Y]; float absy = Math.abs(y); float absx = Math.abs(x); if (absx > 5 && absy < 5 && mScreenStatus && FRAGMENT_TAG_HOME.equals(mCurrentTag)) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); mScreenStatus = false; } if (absy > 5 && absx < 5 && !mScreenStatus) { mScreenStatus = true; } } }; }