/* SettingStepsActivity.java Copyright (c) 2014 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.sw.setting; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageButton; import android.widget.TextView; import org.deviceconnect.android.deviceplugin.sw.R; import org.deviceconnect.android.deviceplugin.sw.SWConstants; import org.deviceconnect.android.ui.activity.DConnectSettingPageFragmentActivity; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; /** * SWデバイスプラグインの設定手順説明画面. * * @author NTT DOCOMO, INC. */ public class SWSettingStepsActivity extends DConnectSettingPageFragmentActivity { /** * 接続するターゲットデバイスモデル. */ private int mTargetModel = SWConstants.SW_MODEL_SW2; /** * ホストアプリケーションタイトルテキスト. */ private static TextView sHostApplicationTitleText; /** フラグメント一覧. */ private List<Fragment> mFragments = new ArrayList<Fragment>(); @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null && savedInstanceState.getInt(SWConstants.EXTRA_SW_MODEL, -1) == -1) { mTargetModel = savedInstanceState.getInt(SWConstants.EXTRA_SW_MODEL); } else { Intent intent = getIntent(); mTargetModel = intent.getIntExtra(SWConstants.EXTRA_SW_MODEL, SWConstants.SW_MODEL_UNKNOWN); } } @Override protected void onSaveInstanceState(final Bundle outState) { outState.putInt(SWConstants.EXTRA_SW_MODEL, mTargetModel); } @Override public int getPageCount() { return SWConstants.TUTORIAL_PAGE_NNMBER; } @Override public Fragment createPage(final int position) { if (mFragments.size() == 0) { BaseFragment f1 = new AppInstrallationFragment(); f1.setTargetModel(mTargetModel); f1.setActivity(this); BaseFragment f2 = new BluetoothActivationFragment(); f2.setTargetModel(mTargetModel); f2.setActivity(this); BaseFragment f3 = new BluetoothSettingPromptFragment(); f3.setTargetModel(mTargetModel); f3.setActivity(this); BaseFragment f4 = new BluetoothSettingFinishFragment(); f4.setTargetModel(mTargetModel); f4.setActivity(this); mFragments.add(f1); mFragments.add(f2); mFragments.add(f3); mFragments.add(f4); } return mFragments.get(position); } /** * Base Fragment. * */ public static class BaseFragment extends Fragment { /** ロガー. */ protected Logger mLogger = Logger.getLogger(SWConstants.LOGGER_NAME); /** * 接続デバイスターゲットモデル. */ int mTargetModel; /** * チュートリアルページアクティビティ. */ SWSettingStepsActivity mActivity; /** * 接続するデバイスを設定する. * @param targetModel targetModel */ public void setTargetModel(final int targetModel) { mTargetModel = targetModel; } /** * アクティビティを設定する. * @param activity activity */ public void setActivity(final SWSettingStepsActivity activity) { mActivity = activity; } } /** * 手順1 必須アプリのインストール. */ public static class AppInstrallationFragment extends BaseFragment { @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { final int layoutId; switch (mTargetModel) { case SWConstants.SW_MODEL_SW1: layoutId = R.layout.dconnect_settings_step_1_sw1; break; case SWConstants.SW_MODEL_SW2: layoutId = R.layout.dconnect_settings_step_1_sw2; break; default: // エラー出力 mLogger.warning("Failed to detect the model of SW: " + this.getClass().getName()); return null; } View root = inflater.inflate(layoutId, container, false); sHostApplicationTitleText = (TextView) root.findViewById(R.id.dconnect_settings_step_1_HostApplication_title); ImageButton installSmartconnectButton = (ImageButton) root.findViewById(R.id.dconnect_settings_step_1_button_install_smartconnect); installSmartconnectButton.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { Uri uri = Uri.parse("market://details?id=" + SWConstants.PACKAGE_SMART_CONNECT); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } }); ImageButton installWatchButton = (ImageButton) root.findViewById(R.id.dconnect_settings_step_1_button_install_plugin); installWatchButton.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { String packageName = null; switch (mTargetModel) { case SWConstants.SW_MODEL_SW1: packageName = SWConstants.PACKAGE_SMART_WATCH; break; case SWConstants.SW_MODEL_SW2: packageName = SWConstants.PACKAGE_SMART_WATCH_2; break; default: // エラー出力 mLogger.warning("Failed to detect the model of SW: " + this.getClass().getName()); break; } Uri uri = Uri.parse("market://details?id=" + packageName); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } }); switch (mTargetModel) { case SWConstants.SW_MODEL_SW1: sHostApplicationTitleText.setText(SWConstants.APP_NAME_SMART_WATCH + ":"); break; case SWConstants.SW_MODEL_SW2: sHostApplicationTitleText.setText(SWConstants.APP_NAME_SMART_WATCH_2 + ":"); break; default: // エラー出力 mLogger.warning("Failed to detect the model of SW: " + this.getClass().getName()); break; } return root; } @Override public void onResume() { super.onResume(); mLogger.entering("SWSettingStepsActivity", "onResume"); checkPackage(); mLogger.exiting(this.getClass().getName(), "onResume"); } /** * 必須アプリケーションパッケージのインストール状態で文言を変更する. */ public void checkPackage() { String smartConnectId = SWConstants.PACKAGE_SMART_CONNECT; String smartWatchId = ""; String smartConnectText = ""; String smartWatchText = ""; switch (mTargetModel) { case SWConstants.SW_MODEL_SW1: smartWatchId = SWConstants.PACKAGE_SMART_WATCH; break; case SWConstants.SW_MODEL_SW2: smartWatchId = SWConstants.PACKAGE_SMART_WATCH_2; break; default: // エラー出力 mLogger.warning("Failed to detect the model of SW: " + this.getClass().getName()); break; } try { PackageManager pm = getActivity().getPackageManager(); ApplicationInfo appInfo = pm.getApplicationInfo( smartConnectId, PackageManager.GET_META_DATA); mLogger.fine(appInfo + ""); smartConnectText = "インストール済みです"; } catch (NameNotFoundException e) { // インストールされていない場合は例外が発生 mLogger.fine(smartConnectId + " is none"); smartConnectText = "インストールされていません"; } try { PackageManager pm2 = getActivity().getPackageManager(); ApplicationInfo appInfo2 = pm2.getApplicationInfo( smartWatchId, PackageManager.GET_META_DATA); mLogger.fine(appInfo2 + ""); smartWatchText = "インストール済みです"; } catch (NameNotFoundException e) { // インストールされていない場合は例外が発生 mLogger.fine(smartWatchId + " is none"); smartWatchText = "インストールされていません"; } ((TextView) getView().findViewById( R.id.dconnect_settings_step_1_SmartConnect_description)).setText(smartConnectText); ((TextView) getView().findViewById( R.id.dconnect_settings_step_1_HostApplication_description)).setText(smartWatchText); } } /** * 手順2 SonyWatchをBluetooth検出可能にする. */ public static class BluetoothActivationFragment extends BaseFragment { @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { final int layoutId; switch (mTargetModel) { case SWConstants.SW_MODEL_SW1: layoutId = R.layout.dconnect_settings_step_2_sw1; break; case SWConstants.SW_MODEL_SW2: layoutId = R.layout.dconnect_settings_step_2_sw2; break; default: // エラー出力 mLogger.warning("Failed to detect the model of SW: " + this.getClass().getName()); return null; } View root = inflater.inflate(layoutId, container, false); return root; } } /** * 手順3 端末標準の設定画面でSonyWatchとのペアリングを実行する. */ public static class BluetoothSettingPromptFragment extends BaseFragment { @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { final int layoutId; switch (mTargetModel) { case SWConstants.SW_MODEL_SW1: layoutId = R.layout.dconnect_settings_step_3_sw1; break; case SWConstants.SW_MODEL_SW2: layoutId = R.layout.dconnect_settings_step_3_sw2; break; default: // エラー出力 mLogger.warning("Failed to detect the model of SW: " + this.getClass().getName()); return null; } View root = inflater.inflate(layoutId, container, false); Button button = (Button) root.findViewById(R.id.dconnect_settings_step_3_button_launch_bluetooth_setting); button.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)); } }); return root; } } /** * 手順4 設定完了画面. */ public static class BluetoothSettingFinishFragment extends BaseFragment { @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { final int layoutId; switch (mTargetModel) { case SWConstants.SW_MODEL_SW1: layoutId = R.layout.dconnect_settings_step_4_sw1; break; case SWConstants.SW_MODEL_SW2: layoutId = R.layout.dconnect_settings_step_4_sw2; break; default: // エラー出力 mLogger.warning("Failed to detect the model of SW: " + this.getClass().getName()); return null; } View root = inflater.inflate(layoutId, container, false); return root; } } }