diff --git a/src/com/cyanogenmod/setupwizard/SetupWizardApp.java b/src/com/cyanogenmod/setupwizard/SetupWizardApp.java index 67e558b..6c1dcbc 100644 --- a/src/com/cyanogenmod/setupwizard/SetupWizardApp.java +++ b/src/com/cyanogenmod/setupwizard/SetupWizardApp.java @@ -59,6 +59,7 @@ public class SetupWizardApp extends Application { public static final int REQUEST_CODE_RESTORE_GMS= 2; public static final int REQUEST_CODE_SETUP_CYANOGEN= 3; public static final int REQUEST_CODE_SETUP_CAPTIVE_PORTAL= 4; + public static final int REQUEST_CODE_SETUP_BLUETOOTH= 5; public static final int RADIO_READY_TIMEOUT = 10 * 1000; diff --git a/src/com/cyanogenmod/setupwizard/cmstats/SetupStats.java b/src/com/cyanogenmod/setupwizard/cmstats/SetupStats.java index cab3660..ba73076 100644 --- a/src/com/cyanogenmod/setupwizard/cmstats/SetupStats.java +++ b/src/com/cyanogenmod/setupwizard/cmstats/SetupStats.java @@ -146,6 +146,7 @@ public class SetupStats { public static final String LOCALE = "local"; public static final String RESULT = "result"; public static final String WIFI_SETUP = "wifi_setup"; + public static final String BLUETOOTH_SETUP = "bluetooth_setup"; public static final String CYANOGEN_ACCOUNT = "cyanogen_account_setup"; public static final String CAPTIVE_PORTAL_LOGIN = "captive_portal_login"; public static final String EMERGENCY_CALL = "emergency_call"; diff --git a/src/com/cyanogenmod/setupwizard/setup/BluetoothSetupPage.java b/src/com/cyanogenmod/setupwizard/setup/BluetoothSetupPage.java new file mode 100644 index 0000000..915abec --- /dev/null +++ b/src/com/cyanogenmod/setupwizard/setup/BluetoothSetupPage.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2015 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.cyanogenmod.setupwizard.setup; + +import android.app.Activity; +import android.app.ActivityOptions; +import android.app.FragmentManager; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.provider.Settings; +import android.util.Log; + +import com.cyanogenmod.setupwizard.R; +import com.cyanogenmod.setupwizard.SetupWizardApp; +import com.cyanogenmod.setupwizard.cmstats.SetupStats; +import com.cyanogenmod.setupwizard.ui.LoadingFragment; +import com.cyanogenmod.setupwizard.ui.SetupPageFragment; +import com.cyanogenmod.setupwizard.util.SetupWizardUtils; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; + +public class BluetoothSetupPage extends SetupPage { + + public static final String TAG = "BluetoothSetupPage"; + + private static final String ACTION_CONNECT_INPUT = + "com.google.android.intent.action.CONNECT_INPUT"; + + private static final String INTENT_EXTRA_NO_INPUT_MODE = "no_input_mode"; + + private LoadingFragment mLoadingFragment; + + public BluetoothSetupPage(Context context, SetupDataCallbacks callbacks) { + super(context, callbacks); + } + + @Override + public SetupPageFragment getFragment(FragmentManager fragmentManager, int action) { + mLoadingFragment = (LoadingFragment)fragmentManager.findFragmentByTag(getKey()); + if (mLoadingFragment == null) { + Bundle args = new Bundle(); + args.putString(Page.KEY_PAGE_ARGUMENT, getKey()); + args.putInt(Page.KEY_PAGE_ACTION, action); + mLoadingFragment = new LoadingFragment(); + mLoadingFragment.setArguments(args); + } + return mLoadingFragment; + } + + @Override + public int getNextButtonTitleResId() { + return R.string.skip; + } + + @Override + public String getKey() { + return TAG; + } + + @Override + public int getTitleResId() { + return R.string.loading; + } + + + @Override + public void doLoadAction(FragmentManager fragmentManager, int action) { + super.doLoadAction(fragmentManager, action); + launchConnectInput(); + } + + @Override + public boolean onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == SetupWizardApp.REQUEST_CODE_SETUP_BLUETOOTH) { + SetupStats.addEvent(SetupStats.Categories.EXTERNAL_PAGE_LOAD, + SetupStats.Action.EXTERNAL_PAGE_RESULT, + SetupStats.Label.BLUETOOTH_SETUP, "success"); + getCallbacks().onNextPage(); + } else { + return false; + } + return true; + } + + private void launchConnectInput() { + Intent intent = new Intent(); + intent.setComponent(SetupWizardUtils.mTvAddAccessorySettingsActivity); + intent.setAction(ACTION_CONNECT_INPUT); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(INTENT_EXTRA_NO_INPUT_MODE, true); + ActivityOptions options = + ActivityOptions.makeCustomAnimation(mContext, + android.R.anim.fade_in, + android.R.anim.fade_out); + SetupStats.addEvent(SetupStats.Categories.EXTERNAL_PAGE_LOAD, + SetupStats.Action.EXTERNAL_PAGE_LAUNCH, + SetupStats.Label.PAGE, SetupStats.Label.BLUETOOTH_SETUP); + mLoadingFragment.startActivityForResult(intent, + SetupWizardApp.REQUEST_CODE_SETUP_BLUETOOTH, options.toBundle()); + } +} diff --git a/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java b/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java index 5070fec..a362051 100644 --- a/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java +++ b/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java @@ -41,6 +41,9 @@ public class CMSetupWizardData extends AbstractSetupData { @Override protected PageList onNewPageList() { ArrayList pages = new ArrayList(); + if (SetupWizardUtils.hasLeanback(mContext)) { + pages.add(new BluetoothSetupPage(mContext, this)); + } pages.add(new WelcomePage(mContext, this)); pages.add(new WifiSetupPage(mContext, this)); if (SetupWizardUtils.hasTelephony(mContext)) { @@ -183,4 +186,4 @@ public class CMSetupWizardData extends AbstractSetupData { return true; } -} \ No newline at end of file +} diff --git a/src/com/cyanogenmod/setupwizard/util/SetupWizardUtils.java b/src/com/cyanogenmod/setupwizard/util/SetupWizardUtils.java index 5c4c981..19ce2e8 100644 --- a/src/com/cyanogenmod/setupwizard/util/SetupWizardUtils.java +++ b/src/com/cyanogenmod/setupwizard/util/SetupWizardUtils.java @@ -234,4 +234,8 @@ public class SetupWizardUtils { public static final ComponentName mTvwifisettingsActivity = new ComponentName("com.android.tv.settings", "com.android.tv.settings.connectivity.setup.WifiSetupActivity"); + + public static final ComponentName mTvAddAccessorySettingsActivity = + new ComponentName("com.android.tv.settings", + "com.android.tv.settings.accessories.AddAccessoryActivity"); }