private void saveSettings(KindlePreference pref, SettingsViewHelper viewHelper) {
   pref.set(KeyStr.EMAIL_FROM, viewHelper.getEmailFrom())
       .set(KeyStr.EMAIL_SEND_TO, viewHelper.getEmailTo())
       .set(KeyInt.EMAIL_SEND_DOMAIN_INDEX, viewHelper.getEmailDomainIndex())
       .set(KeyBool.SEND_IMMEDIATE, viewHelper.isImmediateSend())
       .set(KeyBool.IMAGE_ENABLED_IN_WEB_PAGE, viewHelper.isNoImage());
 }
  private void initAds(boolean isStandardOrHigher, boolean isBrowserShare) {
    if (!isStandardOrHigher) {
      KindleService.initAdBanner(mActivity, (AdView) mViewHelper.view(R.id.ads_settings));
    }

    if (!isStandardOrHigher && isBrowserShare) {
      mAdInterstitial.loadAd();
    }
  }
  private void init(Intent intent, View rootView) {
    // setup member variable
    mBrowserShare = new BrowserShareIntent(intent);
    mPref = new KindlePreference(mActivity);
    mAdInterstitial = new AdInterstitial(mActivity);
    mViewHelper = new SettingsViewHelper(this, rootView);

    // setup view
    mViewHelper.setup();
  }
        @Override
        public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
          Log.d(TAG, "Query inventory finished.");

          // Have we been disposed of in the meantime? If so, quit.
          if (mHelper == null) return;

          // Is it a failure?
          if (result.isFailure()) {
            Util.alert(getActivity(), getString(R.string.billing_msg_inventory_failed));
            Log.e(TAG, "**** TrivialDrive Error: " + result.toString());
            return;
          }

          // Do we have the premium upgrade?
          Purchase purchaseStandard = inventory.getPurchase(InAppItem.SKU_STANDARD);
          mHasStandard =
              (purchaseStandard != null && InAppItem.verifyDeveloperPayload(purchaseStandard));
          Log.d(TAG, "User is " + (mHasStandard ? "Standard" : "NOT Standard"));

          // Do we have the infinite gas plan?
          Purchase premiumSubscribePurchase =
              inventory.getPurchase(InAppItem.SKU_PREMIUM_SUBSCRIPTION);
          mSubscribedPremium =
              (premiumSubscribePurchase != null
                  && InAppItem.verifyDeveloperPayload(premiumSubscribePurchase));
          Log.d(TAG, "User is " + (mSubscribedPremium ? "Premium" : "NOT Premium"));

          // 会員で場合だけアップグレードする
          if (!mPref.isStandardOrHigher()) {
            mPref.set(KeyAuthorize.PLAN_STANDARD, mHasStandard);
          }
          if (!mPref.isPremium()) {
            mPref.set(KeyAuthorize.PLAN_PREMIUN, mSubscribedPremium);
          }

          mViewHelper.updateUi();
          mViewHelper.setWaitScreen(false);
          Log.d(TAG, "Initial inventory query finished; enabling main UI.");
        }
  @Override
  public View onCreateView(
      LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_settings, container, false);

    mActivity = getActivity();
    init(mActivity.getIntent(), rootView);

    // setup ads
    initAds(mPref.isStandardOrHigher(), mBrowserShare.isValid());

    // setup listener

    mViewHelper
        .view(R.id.btn_settings_file_upload)
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View v) {

                ApiSendFile apiRequest = new ApiSendFile();
                try {
                  IOUtil util = new IOUtil(IOUtil.ResType.ASSETS);
                  String html = util.getText(mActivity, "/html/jp/test_send.html");
                  Log.v(TAG, html);
                  apiRequest
                      .setParam(ApiSendFile.ParamBool.IMAGE_ENABLED, true)
                      .setParam(
                          ApiSendFile.ParamFile.File,
                          util.getStream(mActivity, "/html/jp/test_send.html"));
                } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
                }
                DownloadWebpageTask.execute(
                    mActivity,
                    apiRequest,
                    new OnCompleteListener() {
                      @Override
                      public void onComplete(HttpRequestInterface httpRequest) {
                        String message = "";
                        if (httpRequest.getResponseCode() != 200) {
                          Log.v(
                              TAG,
                              "httpRequest.getResponseCode : " + httpRequest.getResponseCode());
                          message = mActivity.getString(R.string.tmpl_msg_sent_failed);
                          Util.showToast(
                              mActivity,
                              mActivity.getString(R.string.app_name) + " : " + message + "(100)");
                          return;
                        }

                        ApiSendFile apiRequest = (ApiSendFile) httpRequest;
                        if (!apiRequest.isApiSuccess()) {
                          Log.v(TAG, "送信失敗:" + apiRequest.getResponse());
                          message = mActivity.getString(R.string.tmpl_msg_sent_failed);
                          Util.showToast(
                              mActivity,
                              mActivity.getString(R.string.app_name) + " : " + message + "(101)");
                          return;
                        }

                        // 成功
                        message = mActivity.getString(R.string.tmpl_msg_sent);
                        Util.showToast(
                            mActivity, mActivity.getString(R.string.app_name) + " : " + message);
                        return;
                      }
                    });
              }
            });
    mViewHelper
        .view(R.id.btn_settings_alerm_on)
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View v) {
                Alerm alerm = new Alerm(mActivity);
                alerm.addAlarm(9, 5);
              }
            });
    mViewHelper
        .view(R.id.btn_settings_alerm_off)
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View v) {
                Alerm alerm = new Alerm(mActivity);
                alerm.stopAlarm();
              }
            });
    mViewHelper
        .view(R.id.btn_settings_feedly_stream)
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View v) {
                StreamContentsApi apiRequest = new StreamContentsApi(mActivity);
                apiRequest
                    .setParam(ParamStr.STREAM_ID, apiRequest.createStreamId())
                    .setParam(ParamStr.COUNT, "2");
                DownloadWebpageTask.execute(
                    mActivity,
                    apiRequest,
                    new OnCompleteListener() {
                      @Override
                      public void onComplete(HttpRequestInterface httpRequest) {
                        StreamContentsApi api = ((StreamContentsApi) httpRequest);
                        api.paserResult();
                        api.getPostUrlList();
                        return;
                      }
                    });
              }
            });

    mViewHelper
        .view(R.id.btn_settings_feedly_oauth)
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View v) {
                Intent intent = new Intent(mActivity, FragmentHostActivity.class);
                intent.putExtra("className", AuthenticationFragment.class.getName());
                mActivity.startActivity(intent);
                ;
              }
            });
    mViewHelper
        .view(R.id.tv_settings_title_step1)
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View v) {
                // 隠しコマンド
                if (mClickCountReset > 20) {
                  KindlePreference pref = new KindlePreference(mActivity);
                  pref.set(KeyAuthorize.PLAN_STANDARD, false);
                  pref.set(KeyAuthorize.PLAN_PREMIUN, false);
                  mClickCountReset = 0;
                }
                mClickCountPremium = 1;
                mClickCountStandard = 1;
                mClickCountReset += 1;
              }
            });
    mViewHelper
        .view(R.id.tv_settings_title_step2)
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View v) {
                // 隠しコマンド
                if (mClickCountStandard > 20) {
                  KindlePreference pref = new KindlePreference(mActivity);
                  pref.set(KeyAuthorize.PLAN_STANDARD, true);
                  mClickCountStandard = 0;
                }
                mClickCountPremium = 1;
                mClickCountStandard += 1;
                mClickCountReset = 1;
              }
            });
    mViewHelper
        .view(R.id.tv_settings_title_step3)
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View v) {
                // 隠しコマンド
                if (mClickCountPremium > 20) {
                  KindlePreference pref = new KindlePreference(mActivity);
                  pref.set(KeyAuthorize.PLAN_PREMIUN, true);
                  mClickCountPremium = 0;
                }
                mClickCountPremium += 1;
                mClickCountStandard = 1;
                mClickCountReset = 1;
              }
            });
    mViewHelper.view(R.id.btn_settings_send).setOnClickListener(sendClickListener());
    mViewHelper.view(R.id.btn_settings_send_test).setOnClickListener(sendTestClickListener());
    mViewHelper
        .view(R.id.tv_settings_detail_approved)
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View v) {
                AssetBrowserActivity.startBrowser(
                    mActivity, AssetBrowserActivity.PATH_CONFIRM_APPROVED_EMAIL);
              }
            });
    mViewHelper
        .view(R.id.tv_settings_detail_email)
        .setOnClickListener(
            new OnClickListener() {
              @Override
              public void onClick(View v) {
                AssetBrowserActivity.startBrowser(
                    mActivity, AssetBrowserActivity.PATH_CONFIRM_KINDLE_EMAIL);
              }
            });
    mViewHelper
        .checkBox(R.id.cb_settings_send_immediate)
        .setOnCheckedChangeListener(authorityCheckedChangeListener());
    mViewHelper
        .checkBox(R.id.cb_settings_no_image)
        .setOnCheckedChangeListener(authorityCheckedChangeListener());
    mViewHelper
        .checkBox(R.id.cb_settings_no_ads)
        .setOnCheckedChangeListener(authorityCheckedChangeListener());

    // setup in-app purchase
    mHelper = new IabHelper(mActivity, getString(R.string.app_public_key));
    mHelper.enableDebugLogging(Env.IS_DEV);

    // Start setup. This is asynchronous and the specified listener
    // will be called once setup completes.
    Log.d(TAG, "Starting setup.");
    mHelper.startSetup(
        new IabHelper.OnIabSetupFinishedListener() {
          @Override
          public void onIabSetupFinished(IabResult result) {
            Log.d(TAG, "Setup finished.");

            if (!result.isSuccess()) {
              // Oh noes, there was a problem.
              Util.alert(getActivity(), getString(R.string.billing_msg_setup_failed));
              Log.e(TAG, "**** TrivialDrive Error: " + result.toString());
              return;
            }

            // Have we been disposed of in the meantime? If so, quit.
            if (mHelper == null) return;

            // IAB is fully set up. Now, let's get an inventory of stuff we
            // own.
            Log.d(TAG, "Setup successful. Querying inventory.");
            mHelper.queryInventoryAsync(mGotInventoryListener);
          }
        });

    return rootView;
  }
 @Override
 public void onResume() {
   super.onResume();
   mViewHelper.updateUi();
 }