// FragmentInstallable
 @Override
 public void onUninstallFragment(Fragment fragment) {
   if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) {
     Log.d(Logging.LOG_TAG, this + " onUninstallFragment fragment=" + fragment);
   }
   mUIController.onUninstallFragment(fragment);
 }
 @Override
 @SuppressWarnings("deprecation")
 public boolean onOptionsItemSelected(MenuItem item) {
   if (mUIController.onOptionsItemSelected(item)) {
     return true;
   }
   return super.onOptionsItemSelected(item);
 }
 /**
  * Called when the search key is pressd.
  *
  * <p>Use the below command to emulate the key press on devices without the search key. adb shell
  * input keyevent 84
  */
 @Override
 public boolean onSearchRequested() {
   if (Email.DEBUG) {
     Log.d(Logging.LOG_TAG, this + " onSearchRequested");
   }
   mUIController.onSearchRequested();
   return true; // Event handled.
 }
 @Override
 protected void onDestroy() {
   if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) Log.d(Logging.LOG_TAG, this + " onDestroy");
   mController.removeResultCallback(mControllerResult);
   mTaskTracker.cancellAllInterrupt();
   mUIController.onActivityDestroy();
   super.onDestroy();
 }
  @Override
  protected void installMessageViewFragment(MessageViewFragment fragment) {
    super.installMessageViewFragment(fragment);

    if (isMessageListInstalled()) {
      getMessageListFragment().setSelectedMessage(fragment.getMessageId());
    }
  }
 @Override
 protected void onSaveInstanceState(Bundle outState) {
   if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) {
     Log.d(Logging.LOG_TAG, this + " onSaveInstanceState");
   }
   super.onSaveInstanceState(outState);
   mUIController.onSaveInstanceState(outState);
 }
  @Override
  protected void installMessageListFragment(MessageListFragment fragment) {
    super.installMessageListFragment(fragment);

    if (isMailboxListInstalled()) {
      getMailboxListFragment().setHighlightedMailbox(fragment.getMailboxId());
    }
    getMessageListFragment().setLayout(mThreePane);
  }
 @Override
 public void onBackPressed() {
   if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) {
     Log.d(Logging.LOG_TAG, this + " onBackPressed");
   }
   if (!mUIController.onBackPressed(true)) {
     // Not handled by UIController -- perform the default. i.e. close the app.
     super.onBackPressed();
   }
 }
  /** Must be called just after the activity sets up the content view. */
  @Override
  public void onActivityViewReady() {
    super.onActivityViewReady();

    // Set up content
    mThreePane = (ThreePaneLayout) mActivity.findViewById(R.id.three_pane);
    mThreePane.setCallback(this);

    mMessageCommandButtons = mThreePane.getMessageCommandButtons();
    mMessageCommandButtons.setCallback(new CommandButtonCallback());
  }
 @Override
 protected void onResume() {
   if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) Log.d(Logging.LOG_TAG, this + " onResume");
   super.onResume();
   mUIController.onActivityResume();
   /**
    * In {@link MessageList#onResume()}, we go back to {@link Welcome} if an account has been
    * added/removed. We don't need to do that here, because we fetch the most up-to-date account
    * list. Additionally, we detect and do the right thing if all of the accounts have been
    * removed.
    */
 }
 @Override
 public boolean onPrepareOptionsMenu(Menu menu) {
   return mUIController.onPrepareOptionsMenu(getMenuInflater(), menu);
 }
 @Override
 protected void onStop() {
   if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) Log.d(Logging.LOG_TAG, this + " onStop");
   super.onStop();
   mUIController.onActivityStop();
 }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) Log.d(Logging.LOG_TAG, this + " onCreate");

    float fontScale = getResources().getConfiguration().fontScale;
    if (sLastFontScale != -1 && sLastFontScale != fontScale) {
      // If the font scale has been initialized, and has been detected to be different than
      // the last time the Activity ran, it means the user changed the font while no
      // Email Activity was running - we still need to purge static information though.
      onFontScaleChangeDetected();
    }
    sLastFontScale = fontScale;

    // UIController is used in onPrepareOptionsMenu(), which can be called from within
    // super.onCreate(), so we need to initialize it here.
    initUIController();

    super.onCreate(savedInstanceState);
    ActivityHelper.debugSetWindowFlags(this);

    final Intent intent = getIntent();
    boolean fromKeyguard = intent.getBooleanExtra(EXTRA_FROM_KEYGUARD, false);
    if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) {
      Log.d(Logging.LOG_TAG, "FLAG_DISMISS_KEYGUARD " + fromKeyguard);
    }
    if (fromKeyguard) {
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    }

    setContentView(mUIController.getLayoutId());

    mUIController.onActivityViewReady();

    mController = Controller.getInstance(this);
    mControllerResult =
        new ControllerResultUiThreadWrapper<ControllerResult>(
            new Handler(), new ControllerResult());
    mController.addResultCallback(mControllerResult);

    // Set up views
    // TODO Probably better to extract mErrorMessageView related code into a separate class,
    // so that it'll be easy to reuse for the phone activities.
    TextView errorMessage = (TextView) findViewById(R.id.error_message);
    errorMessage.setOnClickListener(this);
    int errorBannerHeight = getResources().getDimensionPixelSize(R.dimen.error_message_height);
    mErrorBanner = new BannerController(this, errorMessage, errorBannerHeight);

    if (savedInstanceState != null) {
      mUIController.onRestoreInstanceState(savedInstanceState);
    } else {
      final MessageListContext viewContext = MessageListContext.forIntent(this, intent);
      if (viewContext == null) {
        // This might happen if accounts were deleted on another thread, and there aren't
        // any remaining
        Welcome.actionStart(this);
        finish();
        return;
      } else {
        final long messageId = intent.getLongExtra(EXTRA_MESSAGE_ID, Message.NO_MESSAGE);
        mUIController.open(viewContext, messageId);
      }
    }
    mUIController.onActivityCreated();
  }
 /** {@inheritDoc} */
 @Override
 public void onRestoreInstanceState(Bundle savedInstanceState) {
   super.onRestoreInstanceState(savedInstanceState);
 }
 /** {@inheritDoc} */
 @Override
 public void onSaveInstanceState(Bundle outState) {
   super.onSaveInstanceState(outState);
 }