12b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka/* 22b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * Copyright (C) 2013 The Android Open Source Project 32b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * 42b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 52b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * you may not use this file except in compliance with the License. 62b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * You may obtain a copy of the License at 72b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * 82b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 92b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * 102b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 112b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 122b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * See the License for the specific language governing permissions and 142b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka * limitations under the License. 152b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka */ 162b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 172b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokapackage com.android.inputmethod.latin.setup; 182b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 192b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.app.Activity; 202b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.content.ContentResolver; 212b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.content.Intent; 222b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.content.res.Resources; 232b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.media.MediaPlayer; 242b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.net.Uri; 252b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.os.Bundle; 262b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.os.Message; 272b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.provider.Settings; 282b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.util.Log; 292b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.view.View; 302b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.view.inputmethod.InputMethodInfo; 3177f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaokaimport android.view.inputmethod.InputMethodManager; 322b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.widget.ImageView; 332b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.widget.TextView; 342b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport android.widget.VideoView; 352b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 362b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport com.android.inputmethod.compat.TextViewCompatUtils; 37790934158d356bfce0db97ef5aebb12128bc86eaTadashi G. Takaokaimport com.android.inputmethod.compat.ViewCompatUtils; 382b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport com.android.inputmethod.latin.R; 39a7d2fc6befa1b16883200a653fc01deb4d94944dKen Wakasaimport com.android.inputmethod.latin.settings.SettingsActivity; 402fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasaimport com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper; 41052ec62abd577182af8d5b50564d8075b18be3c9Yohei Yukawaimport com.android.inputmethod.latin.utils.UncachedInputMethodManagerUtils; 422b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 432b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokaimport java.util.ArrayList; 442b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 45c4ffa235e5490c3cba211b469c7f125d162f9f86Tadashi G. Takaokaimport javax.annotation.Nonnull; 46c4ffa235e5490c3cba211b469c7f125d162f9f86Tadashi G. Takaoka 472b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka// TODO: Use Fragment to implement welcome screen and setup steps. 482b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaokapublic final class SetupWizardActivity extends Activity implements View.OnClickListener { 492b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka static final String TAG = SetupWizardActivity.class.getSimpleName(); 502b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 5148b707e1bd2f725478a0af10796f67280971acc4Tadashi G. Takaoka // For debugging purpose. 5248b707e1bd2f725478a0af10796f67280971acc4Tadashi G. Takaoka private static final boolean FORCE_TO_SHOW_WELCOME_SCREEN = false; 53769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka private static final boolean ENABLE_WELCOME_VIDEO = true; 54769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka 5577f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka private InputMethodManager mImm; 5677f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka 574705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka private View mSetupWizard; 582b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private View mWelcomeScreen; 592b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private View mSetupScreen; 602b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private Uri mWelcomeVideoUri; 612b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private VideoView mWelcomeVideoView; 62769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka private ImageView mWelcomeImageView; 632b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private View mActionStart; 642b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private View mActionNext; 652b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private TextView mStep1Bullet; 662b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private TextView mActionFinish; 672b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private SetupStepGroup mSetupStepGroup; 682b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private static final String STATE_STEP = "step"; 692b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private int mStepNumber; 709b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka private boolean mNeedsToAdjustStepNumberToSystemState; 712b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private static final int STEP_WELCOME = 0; 722b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private static final int STEP_1 = 1; 732b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private static final int STEP_2 = 2; 742b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private static final int STEP_3 = 3; 752b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private static final int STEP_LAUNCHING_IME_SETTINGS = 4; 762b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private static final int STEP_BACK_FROM_IME_SETTINGS = 5; 772b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 7877f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka private SettingsPoolingHandler mHandler; 792b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 8077f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka private static final class SettingsPoolingHandler 812fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa extends LeakGuardHandlerWrapper<SetupWizardActivity> { 822b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private static final int MSG_POLLING_IME_SETTINGS = 0; 832b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private static final long IME_SETTINGS_POLLING_INTERVAL = 200; 842b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 8577f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka private final InputMethodManager mImmInHandler; 8677f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka 87c4ffa235e5490c3cba211b469c7f125d162f9f86Tadashi G. Takaoka public SettingsPoolingHandler(@Nonnull final SetupWizardActivity ownerInstance, 8877f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka final InputMethodManager imm) { 892fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa super(ownerInstance); 9077f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka mImmInHandler = imm; 912b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 922b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 932b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 942b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void handleMessage(final Message msg) { 952fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final SetupWizardActivity setupWizardActivity = getOwnerInstance(); 962b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (setupWizardActivity == null) { 972b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return; 982b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 992b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka switch (msg.what) { 1002b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka case MSG_POLLING_IME_SETTINGS: 101052ec62abd577182af8d5b50564d8075b18be3c9Yohei Yukawa if (UncachedInputMethodManagerUtils.isThisImeEnabled(setupWizardActivity, 102052ec62abd577182af8d5b50564d8075b18be3c9Yohei Yukawa mImmInHandler)) { 1032b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka setupWizardActivity.invokeSetupWizardOfThisIme(); 1042b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return; 1052b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 1062b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka startPollingImeSettings(); 1072b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka break; 1082b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 1092b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 1102b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1112b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void startPollingImeSettings() { 1122b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka sendMessageDelayed(obtainMessage(MSG_POLLING_IME_SETTINGS), 1132b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka IME_SETTINGS_POLLING_INTERVAL); 1142b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 1152b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1162b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void cancelPollingImeSettings() { 1172b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka removeMessages(MSG_POLLING_IME_SETTINGS); 1182b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 1192b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 1202b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1212b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 1222b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka protected void onCreate(final Bundle savedInstanceState) { 1234705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka setTheme(android.R.style.Theme_Translucent_NoTitleBar); 1242b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka super.onCreate(savedInstanceState); 1252b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 12677f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka mImm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 12777f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka mHandler = new SettingsPoolingHandler(this, mImm); 12877f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka 1292b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka setContentView(R.layout.setup_wizard); 1304705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka mSetupWizard = findViewById(R.id.setup_wizard); 1312b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1322b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (savedInstanceState == null) { 1332b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepNumber = determineSetupStepNumberFromLauncher(); 1342b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } else { 1352b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepNumber = savedInstanceState.getInt(STATE_STEP); 1362b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 1372b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1382b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final String applicationName = getResources().getString(getApplicationInfo().labelRes); 1392b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mWelcomeScreen = findViewById(R.id.setup_welcome_screen); 1402b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final TextView welcomeTitle = (TextView)findViewById(R.id.setup_welcome_title); 1412b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka welcomeTitle.setText(getString(R.string.setup_welcome_title, applicationName)); 1422b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1432b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mSetupScreen = findViewById(R.id.setup_steps_screen); 1442b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final TextView stepsTitle = (TextView)findViewById(R.id.setup_title); 1452b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka stepsTitle.setText(getString(R.string.setup_steps_title, applicationName)); 1462b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1472b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final SetupStepIndicatorView indicatorView = 1482b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka (SetupStepIndicatorView)findViewById(R.id.setup_step_indicator); 1492b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mSetupStepGroup = new SetupStepGroup(indicatorView); 1502b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1512b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStep1Bullet = (TextView)findViewById(R.id.setup_step1_bullet); 1522b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStep1Bullet.setOnClickListener(this); 1532b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final SetupStep step1 = new SetupStep(STEP_1, applicationName, 1542b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStep1Bullet, findViewById(R.id.setup_step1), 1552b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka R.string.setup_step1_title, R.string.setup_step1_instruction, 1562b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka R.string.setup_step1_finished_instruction, R.drawable.ic_setup_step1, 1572b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka R.string.setup_step1_action); 15877f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka final SettingsPoolingHandler handler = mHandler; 1592b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka step1.setAction(new Runnable() { 1602b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 1612b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void run() { 1622b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka invokeLanguageAndInputSettings(); 16377f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka handler.startPollingImeSettings(); 1642b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 1652b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka }); 1662b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mSetupStepGroup.addStep(step1); 1672b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1682b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final SetupStep step2 = new SetupStep(STEP_2, applicationName, 1692b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka (TextView)findViewById(R.id.setup_step2_bullet), findViewById(R.id.setup_step2), 1702b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka R.string.setup_step2_title, R.string.setup_step2_instruction, 1712b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 0 /* finishedInstruction */, R.drawable.ic_setup_step2, 1722b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka R.string.setup_step2_action); 1732b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka step2.setAction(new Runnable() { 1742b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 1752b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void run() { 1769b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka invokeInputMethodPicker(); 1772b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 1782b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka }); 1792b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mSetupStepGroup.addStep(step2); 1802b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1812b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final SetupStep step3 = new SetupStep(STEP_3, applicationName, 1822b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka (TextView)findViewById(R.id.setup_step3_bullet), findViewById(R.id.setup_step3), 1832b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka R.string.setup_step3_title, R.string.setup_step3_instruction, 1842b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 0 /* finishedInstruction */, R.drawable.ic_setup_step3, 1852b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka R.string.setup_step3_action); 1862b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka step3.setAction(new Runnable() { 1872b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 1882b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void run() { 1892b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka invokeSubtypeEnablerOfThisIme(); 1902b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 1912b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka }); 1922b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mSetupStepGroup.addStep(step3); 1932b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 1942b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mWelcomeVideoUri = new Uri.Builder() 1952b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) 1962b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka .authority(getPackageName()) 1972b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka .path(Integer.toString(R.raw.setup_welcome_video)) 1982b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka .build(); 1994705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka final VideoView welcomeVideoView = (VideoView)findViewById(R.id.setup_welcome_video); 2004705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka welcomeVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 2012b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 2022b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void onPrepared(final MediaPlayer mp) { 2032b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka // Now VideoView has been laid-out and ready to play, remove background of it to 2042b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka // reveal the video. 2054705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka welcomeVideoView.setBackgroundResource(0); 2062b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mp.setLooping(true); 2072b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2082b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka }); 2094705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka welcomeVideoView.setOnErrorListener(new MediaPlayer.OnErrorListener() { 2102b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 2112b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public boolean onError(final MediaPlayer mp, final int what, final int extra) { 2122b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka Log.e(TAG, "Playing welcome video causes error: what=" + what + " extra=" + extra); 213769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka hideWelcomeVideoAndShowWelcomeImage(); 2142b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return true; 2152b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2162b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka }); 2174705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka mWelcomeVideoView = welcomeVideoView; 218769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka mWelcomeImageView = (ImageView)findViewById(R.id.setup_welcome_image); 2192b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 2202b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionStart = findViewById(R.id.setup_start_label); 2212b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionStart.setOnClickListener(this); 2222b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionNext = findViewById(R.id.setup_next); 2232b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionNext.setOnClickListener(this); 2242b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionFinish = (TextView)findViewById(R.id.setup_finish); 2252b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka TextViewCompatUtils.setCompoundDrawablesRelativeWithIntrinsicBounds(mActionFinish, 2262b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka getResources().getDrawable(R.drawable.ic_setup_finish), null, null, null); 2272b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionFinish.setOnClickListener(this); 2282b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2292b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 2302b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 2312b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void onClick(final View v) { 2322b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (v == mActionFinish) { 2332b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka finish(); 2342b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return; 2352b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2362b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final int currentStep = determineSetupStepNumber(); 2372b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final int nextStep; 2382b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (v == mActionStart) { 2392b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka nextStep = STEP_1; 2402b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } else if (v == mActionNext) { 2412b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka nextStep = mStepNumber + 1; 2422b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } else if (v == mStep1Bullet && currentStep == STEP_2) { 2432b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka nextStep = STEP_1; 2442b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } else { 2452b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka nextStep = mStepNumber; 2462b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2472b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (mStepNumber != nextStep) { 2482b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepNumber = nextStep; 2492b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka updateSetupStepView(); 2502b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2512b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2522b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 2534705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka void invokeSetupWizardOfThisIme() { 2542b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final Intent intent = new Intent(); 2552b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka intent.setClass(this, SetupWizardActivity.class); 2562b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 2572b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka | Intent.FLAG_ACTIVITY_SINGLE_TOP 2582b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka | Intent.FLAG_ACTIVITY_CLEAR_TOP); 2592b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka startActivity(intent); 2609b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka mNeedsToAdjustStepNumberToSystemState = true; 2612b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2622b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 2632b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private void invokeSettingsOfThisIme() { 2642b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final Intent intent = new Intent(); 2652b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka intent.setClass(this, SettingsActivity.class); 2662b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 2672b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka | Intent.FLAG_ACTIVITY_CLEAR_TOP); 26893d2ab38577fb3d7c919bc4fd19a769f5c93e654Mohammadinamul Sheik intent.putExtra(SettingsActivity.EXTRA_ENTRY_KEY, 26993d2ab38577fb3d7c919bc4fd19a769f5c93e654Mohammadinamul Sheik SettingsActivity.EXTRA_ENTRY_VALUE_APP_ICON); 2702b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka startActivity(intent); 2712b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2722b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 2734705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka void invokeLanguageAndInputSettings() { 2742b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final Intent intent = new Intent(); 2752b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka intent.setAction(Settings.ACTION_INPUT_METHOD_SETTINGS); 2762b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka intent.addCategory(Intent.CATEGORY_DEFAULT); 2772b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka startActivity(intent); 2789b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka mNeedsToAdjustStepNumberToSystemState = true; 2799b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka } 2809b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka 2819b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka void invokeInputMethodPicker() { 2829b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka // Invoke input method picker. 28377f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka mImm.showInputMethodPicker(); 2849b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka mNeedsToAdjustStepNumberToSystemState = true; 2852b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2862b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 2874705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka void invokeSubtypeEnablerOfThisIme() { 288052ec62abd577182af8d5b50564d8075b18be3c9Yohei Yukawa final InputMethodInfo imi = 289052ec62abd577182af8d5b50564d8075b18be3c9Yohei Yukawa UncachedInputMethodManagerUtils.getInputMethodInfoOf(getPackageName(), mImm); 29077f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka if (imi == null) { 29177f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka return; 29277f63c8ac64c46de36002fd62c71f1eeebcaf2acTadashi G. Takaoka } 2932b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final Intent intent = new Intent(); 2942b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka intent.setAction(Settings.ACTION_INPUT_METHOD_SUBTYPE_SETTINGS); 2952b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka intent.addCategory(Intent.CATEGORY_DEFAULT); 2962b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka intent.putExtra(Settings.EXTRA_INPUT_METHOD_ID, imi.getId()); 2972b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka startActivity(intent); 2982b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 2992b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 3002b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private int determineSetupStepNumberFromLauncher() { 3012b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final int stepNumber = determineSetupStepNumber(); 3022b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (stepNumber == STEP_1) { 3032b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return STEP_WELCOME; 3042b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3052b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (stepNumber == STEP_3) { 3062b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return STEP_LAUNCHING_IME_SETTINGS; 3072b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3082b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return stepNumber; 3092b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3102b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 3112b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private int determineSetupStepNumber() { 3122b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mHandler.cancelPollingImeSettings(); 31348b707e1bd2f725478a0af10796f67280971acc4Tadashi G. Takaoka if (FORCE_TO_SHOW_WELCOME_SCREEN) { 31448b707e1bd2f725478a0af10796f67280971acc4Tadashi G. Takaoka return STEP_1; 31548b707e1bd2f725478a0af10796f67280971acc4Tadashi G. Takaoka } 316052ec62abd577182af8d5b50564d8075b18be3c9Yohei Yukawa if (!UncachedInputMethodManagerUtils.isThisImeEnabled(this, mImm)) { 3172b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return STEP_1; 3182b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 319052ec62abd577182af8d5b50564d8075b18be3c9Yohei Yukawa if (!UncachedInputMethodManagerUtils.isThisImeCurrent(this, mImm)) { 3202b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return STEP_2; 3212b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3222b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return STEP_3; 3232b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3242b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 3252b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 3262b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka protected void onSaveInstanceState(final Bundle outState) { 3272b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka super.onSaveInstanceState(outState); 3282b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka outState.putInt(STATE_STEP, mStepNumber); 3292b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3302b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 3312b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 3322b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka protected void onRestoreInstanceState(final Bundle savedInstanceState) { 3332b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka super.onRestoreInstanceState(savedInstanceState); 3342b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepNumber = savedInstanceState.getInt(STATE_STEP); 3352b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3362b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 3372b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private static boolean isInSetupSteps(final int stepNumber) { 3382b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return stepNumber >= STEP_1 && stepNumber <= STEP_3; 3392b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3402b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 3412b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 3422b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka protected void onRestart() { 3432b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka super.onRestart(); 3449b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka // Probably the setup wizard has been invoked from "Recent" menu. The setup step number 3459b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka // needs to be adjusted to system state, because the state (IME is enabled and/or current) 3469b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka // may have been changed. 3472b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (isInSetupSteps(mStepNumber)) { 3482b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepNumber = determineSetupStepNumber(); 3492b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3502b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3512b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 3522b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 3532b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka protected void onResume() { 3542b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka super.onResume(); 3552b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (mStepNumber == STEP_LAUNCHING_IME_SETTINGS) { 3564705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka // Prevent white screen flashing while launching settings activity. 3574705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka mSetupWizard.setVisibility(View.INVISIBLE); 3582b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka invokeSettingsOfThisIme(); 3592b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepNumber = STEP_BACK_FROM_IME_SETTINGS; 3602b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return; 3612b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3622b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (mStepNumber == STEP_BACK_FROM_IME_SETTINGS) { 3632b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka finish(); 3642b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return; 3652b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3662b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka updateSetupStepView(); 3672b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3682b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 3692b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 3702b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void onBackPressed() { 3712b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (mStepNumber == STEP_1) { 3722b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepNumber = STEP_WELCOME; 3732b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka updateSetupStepView(); 3742b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return; 3752b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3762b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka super.onBackPressed(); 3772b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3782b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 379769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka void hideWelcomeVideoAndShowWelcomeImage() { 380769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka mWelcomeVideoView.setVisibility(View.GONE); 381769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka mWelcomeImageView.setImageResource(R.raw.setup_welcome_image); 382769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka mWelcomeImageView.setVisibility(View.VISIBLE); 383769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka } 384769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka 385769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka private void showAndStartWelcomeVideo() { 386769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka mWelcomeVideoView.setVisibility(View.VISIBLE); 387769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka mWelcomeVideoView.setVideoURI(mWelcomeVideoUri); 388769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka mWelcomeVideoView.start(); 389769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka } 390769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka 391769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka private void hideAndStopWelcomeVideo() { 392769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka mWelcomeVideoView.stopPlayback(); 393769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka mWelcomeVideoView.setVisibility(View.GONE); 3942b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 3952b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 3962b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 3972b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka protected void onPause() { 398769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka hideAndStopWelcomeVideo(); 3992b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka super.onPause(); 4002b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4012b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4022b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 4032b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void onWindowFocusChanged(final boolean hasFocus) { 4042b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka super.onWindowFocusChanged(hasFocus); 4059b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka if (hasFocus && mNeedsToAdjustStepNumberToSystemState) { 4069b4a883e0961652e60f7934d3b92074f47f7bc23Tadashi G. Takaoka mNeedsToAdjustStepNumberToSystemState = false; 4072b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepNumber = determineSetupStepNumber(); 4082b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka updateSetupStepView(); 4092b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4102b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4112b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4122b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private void updateSetupStepView() { 4134705c0fa7ca9527f6a3d7cb47542de734a56337dTadashi G. Takaoka mSetupWizard.setVisibility(View.VISIBLE); 4142b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final boolean welcomeScreen = (mStepNumber == STEP_WELCOME); 4152b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mWelcomeScreen.setVisibility(welcomeScreen ? View.VISIBLE : View.GONE); 4162b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mSetupScreen.setVisibility(welcomeScreen ? View.GONE : View.VISIBLE); 4172b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (welcomeScreen) { 418769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka if (ENABLE_WELCOME_VIDEO) { 419769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka showAndStartWelcomeVideo(); 420769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka } else { 421769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka hideWelcomeVideoAndShowWelcomeImage(); 422769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka } 4232b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return; 4242b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 425769427cff24944958f5f1f6179090a86444f3eabTadashi G. Takaoka hideAndStopWelcomeVideo(); 4262b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final boolean isStepActionAlreadyDone = mStepNumber < determineSetupStepNumber(); 4272b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mSetupStepGroup.enableStep(mStepNumber, isStepActionAlreadyDone); 4282b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionNext.setVisibility(isStepActionAlreadyDone ? View.VISIBLE : View.GONE); 4292b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionFinish.setVisibility((mStepNumber == STEP_3) ? View.VISIBLE : View.GONE); 4302b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4312b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4322b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka static final class SetupStep implements View.OnClickListener { 4332b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public final int mStepNo; 4342b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private final View mStepView; 4352b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private final TextView mBulletView; 4362b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private final int mActivatedColor; 4372b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private final int mDeactivatedColor; 4382b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private final String mInstruction; 4392b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private final String mFinishedInstruction; 4402b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private final TextView mActionLabel; 4412b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private Runnable mAction; 4422b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4432b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public SetupStep(final int stepNo, final String applicationName, final TextView bulletView, 4442b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final View stepView, final int title, final int instruction, 4452b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final int finishedInstruction, final int actionIcon, final int actionLabel) { 4462b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepNo = stepNo; 4472b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepView = stepView; 4482b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mBulletView = bulletView; 4492b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final Resources res = stepView.getResources(); 4502b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActivatedColor = res.getColor(R.color.setup_text_action); 4512b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mDeactivatedColor = res.getColor(R.color.setup_text_dark); 4522b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4532b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final TextView titleView = (TextView)mStepView.findViewById(R.id.setup_step_title); 4542b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka titleView.setText(res.getString(title, applicationName)); 4552b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mInstruction = (instruction == 0) ? null 4562b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka : res.getString(instruction, applicationName); 4572b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mFinishedInstruction = (finishedInstruction == 0) ? null 4582b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka : res.getString(finishedInstruction, applicationName); 4592b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4602b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionLabel = (TextView)mStepView.findViewById(R.id.setup_step_action_label); 4612b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionLabel.setText(res.getString(actionLabel)); 4622b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (actionIcon == 0) { 463790934158d356bfce0db97ef5aebb12128bc86eaTadashi G. Takaoka final int paddingEnd = ViewCompatUtils.getPaddingEnd(mActionLabel); 464790934158d356bfce0db97ef5aebb12128bc86eaTadashi G. Takaoka ViewCompatUtils.setPaddingRelative(mActionLabel, paddingEnd, 0, paddingEnd, 0); 4652b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } else { 4662b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka TextViewCompatUtils.setCompoundDrawablesRelativeWithIntrinsicBounds( 4672b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionLabel, res.getDrawable(actionIcon), null, null, null); 4682b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4692b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4702b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4712b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void setEnabled(final boolean enabled, final boolean isStepActionAlreadyDone) { 4722b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mStepView.setVisibility(enabled ? View.VISIBLE : View.GONE); 4732b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mBulletView.setTextColor(enabled ? mActivatedColor : mDeactivatedColor); 4742b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka final TextView instructionView = (TextView)mStepView.findViewById( 4752b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka R.id.setup_step_instruction); 4762b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka instructionView.setText(isStepActionAlreadyDone ? mFinishedInstruction : mInstruction); 4772b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionLabel.setVisibility(isStepActionAlreadyDone ? View.GONE : View.VISIBLE); 4782b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4792b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4802b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void setAction(final Runnable action) { 4812b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mActionLabel.setOnClickListener(this); 4822b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mAction = action; 4832b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4842b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4852b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka @Override 4862b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void onClick(final View v) { 4872b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka if (v == mActionLabel && mAction != null) { 4882b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mAction.run(); 4892b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka return; 4902b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4912b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4922b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 4932b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4942b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka static final class SetupStepGroup { 4952b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka private final SetupStepIndicatorView mIndicatorView; 496a91561aa58db1c43092c1caecc051a11fa5391c7Tadashi G. Takaoka private final ArrayList<SetupStep> mGroup = new ArrayList<>(); 4972b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 4982b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public SetupStepGroup(final SetupStepIndicatorView indicatorView) { 4992b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mIndicatorView = indicatorView; 5002b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 5012b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 5022b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void addStep(final SetupStep step) { 5032b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mGroup.add(step); 5042b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 5052b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka 5062b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka public void enableStep(final int enableStepNo, final boolean isStepActionAlreadyDone) { 5072b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka for (final SetupStep step : mGroup) { 5082b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka step.setEnabled(step.mStepNo == enableStepNo, isStepActionAlreadyDone); 5092b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 5102b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka mIndicatorView.setIndicatorPosition(enableStepNo - STEP_1, mGroup.size()); 5112b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 5122b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka } 5132b5c9726f4a7d24497fc1df17c6ce57188c99cabTadashi G. Takaoka} 514