19d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project/* 29d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * 49d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * you may not use this file except in compliance with the License. 69d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * You may obtain a copy of the License at 79d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * 89d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * 109d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * See the License for the specific language governing permissions and 149d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * limitations under the License. 159d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project */ 169d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 179d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectpackage com.android.stk; 189d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 199d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.app.ListActivity; 20e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Savilleimport android.app.Activity; 219d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.content.Context; 229d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.content.Intent; 239d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.os.Bundle; 249d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.os.Handler; 259d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.os.Message; 2682d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucasimport android.view.ContextMenu; 2782d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucasimport android.view.ContextMenu.ContextMenuInfo; 289d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.view.KeyEvent; 299d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.view.MenuItem; 309d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.view.View; 319d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.view.Window; 3282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucasimport android.widget.AdapterView; 339d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.widget.ImageView; 349d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.widget.ListView; 359d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.widget.ProgressBar; 369d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Projectimport android.widget.TextView; 379d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 38d41f1d98d7bf42e9e867819593ad79f685604796Alex Yakavenkaimport com.android.internal.telephony.cat.Item; 39d41f1d98d7bf42e9e867819593ad79f685604796Alex Yakavenkaimport com.android.internal.telephony.cat.Menu; 40d41f1d98d7bf42e9e867819593ad79f685604796Alex Yakavenkaimport com.android.internal.telephony.cat.CatLog; 41e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Savilleimport android.telephony.TelephonyManager; 429d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 439d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project/** 4479085fcc5b4e54cc374e8720644ce4c1dc0004beWink Saville * ListActivity used for displaying STK menus. These can be SET UP MENU and 4579085fcc5b4e54cc374e8720644ce4c1dc0004beWink Saville * SELECT ITEM menus. This activity is started multiple times with different 469d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * menu content. 479d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project * 489d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project */ 4982d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucaspublic class StkMenuActivity extends ListActivity implements View.OnCreateContextMenuListener { 509d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private Context mContext; 519d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private Menu mStkMenu = null; 529d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private int mState = STATE_MAIN; 539d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private boolean mAcceptUsersInput = true; 54e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville private int mSlotId = -1; 55e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville private boolean mIsResponseSent = false; 56e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville Activity mInstance = null; 579d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 589d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private TextView mTitleTextView = null; 599d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private ImageView mTitleIconView = null; 609d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private ProgressBar mProgressView = null; 61e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville private static final String className = new Object(){}.getClass().getEnclosingClass().getName(); 62e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville private static final String LOG_TAG = className.substring(className.lastIndexOf('.') + 1); 639d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 64e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville private StkAppService appService = StkAppService.getInstance(); 659d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 669d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Internal state values 67e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville static final int STATE_INIT = 0; 689d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project static final int STATE_MAIN = 1; 699d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project static final int STATE_SECONDARY = 2; 709d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 71e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville // Finish result 72e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville static final int FINISH_CAUSE_NORMAL = 1; 73e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville static final int FINISH_CAUSE_NULL_SERVICE = 2; 74e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville static final int FINISH_CAUSE_NULL_MENU = 3; 75e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville 7679085fcc5b4e54cc374e8720644ce4c1dc0004beWink Saville // message id for time out 779d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private static final int MSG_ID_TIMEOUT = 1; 7882d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas private static final int CONTEXT_MENU_HELP = 0; 799d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 809d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project Handler mTimeoutHandler = new Handler() { 819d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 829d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public void handleMessage(Message msg) { 839d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project switch(msg.what) { 849d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case MSG_ID_TIMEOUT: 85e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "MSG_ID_TIMEOUT mState: " + mState); 869d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = false; 87e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_SECONDARY) { 88e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setPendingActivityInstance(mInstance); 89e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 909d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(StkAppService.RES_ID_TIMEOUT); 91e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //finish();//We wait the following commands to trigger onStop of this activity. 929d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project break; 939d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 949d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 959d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project }; 969d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 979d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 989d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public void onCreate(Bundle icicle) { 999d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onCreate(icicle); 1009d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 101e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onCreate"); 102e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville // Remove the default title, customized one is used. 103e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville requestWindowFeature(Window.FEATURE_NO_TITLE); 1049d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Set the layout for this activity. 1059d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project setContentView(R.layout.stk_menu_list); 106e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mInstance = this; 1079d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTitleTextView = (TextView) findViewById(R.id.title_text); 1089d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTitleIconView = (ImageView) findViewById(R.id.title_icon); 1099d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mProgressView = (ProgressBar) findViewById(R.id.progress_bar); 1109d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mContext = getBaseContext(); 1119d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = true; 11282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas getListView().setOnCreateContextMenuListener(this); 113e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville initFromIntent(getIntent()); 1149d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1159d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 1169d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 1179d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project protected void onListItemClick(ListView l, View v, int position, long id) { 1189d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onListItemClick(l, v, position, id); 11979085fcc5b4e54cc374e8720644ce4c1dc0004beWink Saville 1209d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (!mAcceptUsersInput) { 121e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "mAcceptUsersInput:false"); 1229d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return; 1239d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1249d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 1259d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project Item item = getSelectedItem(position); 1269d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (item == null) { 127e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "Item is null"); 1289d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return; 1299d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 13003be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja 131e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onListItemClick Id: " + item.id + ", mState: " + mState); 132e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville // ONLY set SECONDARY menu. It will be finished when the following command is comming. 133e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_SECONDARY) { 134e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setPendingActivityInstance(this); 135e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 13603be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja cancelTimeOut(); 1379d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(StkAppService.RES_ID_MENU_SELECTION, item.id, false); 1389d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = false; 1399d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mProgressView.setVisibility(View.VISIBLE); 1409d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mProgressView.setIndeterminate(true); 1419d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1429d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 1439d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 1449d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public boolean onKeyDown(int keyCode, KeyEvent event) { 145e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "mAcceptUsersInput: " + mAcceptUsersInput); 1469d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (!mAcceptUsersInput) { 1479d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 1489d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1499d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 1509d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project switch (keyCode) { 1519d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case KeyEvent.KEYCODE_BACK: 152e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "KEYCODE_BACK - mState[" + mState + "]"); 1539d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project switch (mState) { 1549d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case STATE_SECONDARY: 155e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "STATE_SECONDARY"); 1569d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project cancelTimeOut(); 1579d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = false; 158e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setPendingActivityInstance(this); 1599d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(StkAppService.RES_ID_BACKWARD); 1609d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 1619d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case STATE_MAIN: 162e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "STATE_MAIN"); 163e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setMainActivityInstance(null); 164e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville cancelTimeOut(); 165e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville finish(); 166e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville return true; 1679d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1689d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project break; 1699d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1709d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return super.onKeyDown(keyCode, event); 1719d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1729d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 1739d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 174e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville public void onRestart() { 175e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville super.onRestart(); 176e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onRestart, slot id: " + mSlotId); 177e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 178e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville 179e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville @Override 1809d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public void onResume() { 1819d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onResume(); 1829d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 183e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onResume, slot id: " + mSlotId + "," + mState); 184e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.indicateMenuVisibility(true, mSlotId); 185e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_MAIN) { 186e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mStkMenu = appService.getMainMenu(mSlotId); 187e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 188e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mStkMenu = appService.getMenu(mSlotId); 189e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 1909d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mStkMenu == null) { 191e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "menu is null"); 192e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville cancelTimeOut(); 1939d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project finish(); 1949d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return; 1959d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 196e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //Set main menu instance here for clean up stack by other SIMs 197e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //when receiving OP_LAUNCH_APP. 198e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_MAIN) { 199e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "set main menu instance."); 200e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setMainActivityInstance(this); 201e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 2029d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project displayMenu(); 2039d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project startTimeOut(); 2049d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // whenever this activity is resumed after a sub activity was invoked 20579085fcc5b4e54cc374e8720644ce4c1dc0004beWink Saville // (Browser, In call screen) switch back to main state and enable 2069d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // user's input; 2079d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (!mAcceptUsersInput) { 208e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //Remove set mState to STATE_MAIN. This is for single instance flow. 2099d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = true; 2109d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 21164ec38ec889df7bf757861b02e918c05464cc545w invalidateOptionsMenu(); 212e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville 2139d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // make sure the progress bar is not shown. 2149d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mProgressView.setIndeterminate(false); 2159d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mProgressView.setVisibility(View.GONE); 2169d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 2179d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 2189d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 2199d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public void onPause() { 2209d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onPause(); 221e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onPause, slot id: " + mSlotId + "," + mState); 222e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //If activity is finished in onResume and it reaults from null appService. 223e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (appService != null) { 224e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.indicateMenuVisibility(false, mSlotId); 225e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 226e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onPause: null appService."); 227e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 22803be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja 22903be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja /* 23003be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja * do not cancel the timer here cancelTimeOut(). If any higher/lower 23103be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja * priority events such as incoming call, new sms, screen off intent, 23203be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja * notification alerts, user actions such as 'User moving to another activtiy' 23303be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja * etc.. occur during SELECT ITEM ongoing session, 23403be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja * this activity would receive 'onPause()' event resulting in 23503be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja * cancellation of the timer. As a result no terminal response is 23603be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja * sent to the card. 23703be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja */ 23803be6676b5797d70ad30374c16589300f63438c0Preeti Ahuja 2399d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 2409d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 2419d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 242e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville public void onStop() { 243e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville super.onStop(); 244e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onStop, slot id: " + mSlotId + "," + mIsResponseSent + "," + mState); 245e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //The menu should stay in background, if 246e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //1. the dialog is pop up in the screen, but the user does not response to the dialog. 247e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //2. the menu activity enters Stop state (e.g pressing HOME key) but mIsResponseSent is false. 248e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mIsResponseSent) { 249e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville // ONLY finish SECONDARY menu. MAIN menu should always stay in the root of stack. 250e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_SECONDARY) { 251e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (!appService.isStkDialogActivated(mContext)) { 252e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "STATE_SECONDARY finish."); 253e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville cancelTimeOut();//To avoid the timer time out and send TR again. 254e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville finish(); 255e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 256e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (appService != null) { 257e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setPendingActivityInstance(this); 258e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 259e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 260e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 261e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 262e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (appService != null) { 263e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setPendingActivityInstance(this); 264e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 265e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onStop: null appService."); 266e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 267e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 268e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 269e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville 270e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville @Override 2719d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public void onDestroy() { 27282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas getListView().setOnCreateContextMenuListener(null); 2739d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onDestroy(); 274e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onDestroy" + "," + mState); 275e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //isMenuPending: if input act is finish by stkappservice when OP_LAUNCH_APP again, 276e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //we can not send TR here, since the input cmd is waiting user to process. 277e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (!mIsResponseSent && !appService.isMenuPending(mSlotId)) { 278e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "handleDestroy - Send End Session"); 279e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville sendResponse(StkAppService.RES_ID_END_SESSION); 280e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 281e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_MAIN) { 282e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (appService != null) { 283e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setMainActivityInstance(null); 284e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 285e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onDestroy: null appService."); 286e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 287e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 2889d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 2899d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 2909d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 2919d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public boolean onCreateOptionsMenu(android.view.Menu menu) { 2929d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onCreateOptionsMenu(menu); 2939d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project menu.add(0, StkApp.MENU_ID_END_SESSION, 1, R.string.menu_end_session); 2949d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project menu.add(0, StkApp.MENU_ID_HELP, 2, R.string.help); 2959d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 2969d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 2979d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 2989d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 2999d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public boolean onPrepareOptionsMenu(android.view.Menu menu) { 3009d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onPrepareOptionsMenu(menu); 3019d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project boolean helpVisible = false; 3029d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project boolean mainVisible = false; 3039d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3049d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mState == STATE_SECONDARY) { 3059d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mainVisible = true; 3069d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3079d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mStkMenu != null) { 3089d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project helpVisible = mStkMenu.helpAvailable; 3099d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3109d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3119d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project menu.findItem(StkApp.MENU_ID_END_SESSION).setVisible(mainVisible); 3129d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project menu.findItem(StkApp.MENU_ID_HELP).setVisible(helpVisible); 3139d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3149d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 3159d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3169d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3179d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 3189d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 3199d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (!mAcceptUsersInput) { 3209d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 3219d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3229d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project switch (item.getItemId()) { 3239d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case StkApp.MENU_ID_END_SESSION: 3249d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project cancelTimeOut(); 3259d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = false; 3269d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // send session end response. 3279d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(StkAppService.RES_ID_END_SESSION); 328e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville cancelTimeOut(); 329e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville finish(); 3309d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 3319d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case StkApp.MENU_ID_HELP: 3329d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project cancelTimeOut(); 3339d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = false; 3349d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project int position = getSelectedItemPosition(); 3359d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project Item stkItem = getSelectedItem(position); 3369d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (stkItem == null) { 3379d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project break; 3389d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3399d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // send help needed response. 3409d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(StkAppService.RES_ID_MENU_SELECTION, stkItem.id, true); 3419d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 3429d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3439d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return super.onOptionsItemSelected(item); 3449d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3459d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3469d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 34782d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas public void onCreateContextMenu(ContextMenu menu, View v, 34882d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas ContextMenuInfo menuInfo) { 34982d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas CatLog.d(this, "onCreateContextMenu"); 35082d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas boolean helpVisible = false; 35182d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas if (mStkMenu != null) { 35282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas helpVisible = mStkMenu.helpAvailable; 35382d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 35482d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas if (helpVisible) { 35582d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas CatLog.d(this, "add menu"); 35682d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas menu.add(0, CONTEXT_MENU_HELP, 0, R.string.help); 35782d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 35882d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 35982d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas 36082d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas @Override 36182d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas public boolean onContextItemSelected(MenuItem item) { 36282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas AdapterView.AdapterContextMenuInfo info; 36382d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas try { 36482d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 36582d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } catch (ClassCastException e) { 36682d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas return false; 36782d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 36882d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas switch (item.getItemId()) { 36982d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas case CONTEXT_MENU_HELP: 37082d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas cancelTimeOut(); 37182d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas mAcceptUsersInput = false; 37282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas int position = info.position; 37382d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas CatLog.d(this, "Position:" + position); 37482d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas Item stkItem = getSelectedItem(position); 37582d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas if (stkItem != null) { 37682d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas CatLog.d(this, "item id:" + stkItem.id); 37782d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas sendResponse(StkAppService.RES_ID_MENU_SELECTION, stkItem.id, true); 37882d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 37982d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas return true; 38082d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas 38182d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas default: 38282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas return super.onContextItemSelected(item); 38382d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 38482d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 38582d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas 38682d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas @Override 3879d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project protected void onSaveInstanceState(Bundle outState) { 388e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onSaveInstanceState: " + mSlotId); 3899d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project outState.putInt("STATE", mState); 3909d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project outState.putParcelable("MENU", mStkMenu); 391e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville outState.putBoolean("ACCEPT_USERS_INPUT", mAcceptUsersInput); 3929d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3939d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3949d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 3959d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project protected void onRestoreInstanceState(Bundle savedInstanceState) { 396e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onRestoreInstanceState: " + mSlotId); 3979d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mState = savedInstanceState.getInt("STATE"); 3989d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mStkMenu = savedInstanceState.getParcelable("MENU"); 399e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mAcceptUsersInput = savedInstanceState.getBoolean("ACCEPT_USERS_INPUT"); 4009d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 40179085fcc5b4e54cc374e8720644ce4c1dc0004beWink Saville 4029d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void cancelTimeOut() { 403e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "cancelTimeOut: " + mSlotId); 4049d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTimeoutHandler.removeMessages(MSG_ID_TIMEOUT); 4059d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4069d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4079d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void startTimeOut() { 4089d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mState == STATE_SECONDARY) { 4099d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Reset timeout. 4109d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project cancelTimeOut(); 411e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "startTimeOut: " + mSlotId); 4129d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTimeoutHandler.sendMessageDelayed(mTimeoutHandler 4139d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project .obtainMessage(MSG_ID_TIMEOUT), StkApp.UI_TIMEOUT); 4149d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4159d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 41679085fcc5b4e54cc374e8720644ce4c1dc0004beWink Saville 4179d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Bind list adapter to the items list. 4189d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void displayMenu() { 4199d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4209d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mStkMenu != null) { 4213e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd String title = mStkMenu.title == null ? getString(R.string.app_name) : mStkMenu.title; 4229d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Display title & title icon 4239d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mStkMenu.titleIcon != null) { 4249d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTitleIconView.setImageBitmap(mStkMenu.titleIcon); 4259d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTitleIconView.setVisibility(View.VISIBLE); 4263e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd mTitleTextView.setVisibility(View.INVISIBLE); 4273e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd if (!mStkMenu.titleIconSelfExplanatory) { 4283e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd mTitleTextView.setText(title); 4293e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd mTitleTextView.setVisibility(View.VISIBLE); 4303e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd } 4319d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } else { 4329d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTitleIconView.setVisibility(View.GONE); 4339d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTitleTextView.setVisibility(View.VISIBLE); 4343e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd mTitleTextView.setText(title); 4359d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4369d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // create an array adapter for the menu list 4379d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project StkMenuAdapter adapter = new StkMenuAdapter(this, 4389d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mStkMenu.items, mStkMenu.itemsIconSelfExplanatory); 4399d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Bind menu list to the new adapter. 4409d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project setListAdapter(adapter); 4419d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Set default item 4429d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project setSelection(mStkMenu.defaultItem); 4439d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4449d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4459d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4469d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void initFromIntent(Intent intent) { 4479d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4489d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (intent != null) { 4499d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mState = intent.getIntExtra("STATE", STATE_MAIN); 450e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mSlotId = intent.getIntExtra(StkAppService.SLOT_ID, -1); 451e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "slot id: " + mSlotId + ", state: " + mState); 4529d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } else { 453e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "finish!"); 4549d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project finish(); 4559d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4569d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4579d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4589d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private Item getSelectedItem(int position) { 4599d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project Item item = null; 4609d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mStkMenu != null) { 4619d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project try { 4629d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project item = mStkMenu.items.get(position); 4639d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } catch (IndexOutOfBoundsException e) { 4649d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (StkApp.DBG) { 465e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "IOOBE Invalid menu"); 4669d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4679d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } catch (NullPointerException e) { 4689d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (StkApp.DBG) { 469e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "NPE Invalid menu"); 4709d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4719d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4729d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4739d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return item; 4749d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4759d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4769d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void sendResponse(int resId) { 4779d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(resId, 0, false); 4789d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4799d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4809d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void sendResponse(int resId, int itemId, boolean help) { 481e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "sendResponse resID[" + resId + "] itemId[" + itemId + 482e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville "] help[" + help + "]"); 483e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mIsResponseSent = true; 4849d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project Bundle args = new Bundle(); 4859d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project args.putInt(StkAppService.OPCODE, StkAppService.OP_RESPONSE); 486e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville args.putInt(StkAppService.SLOT_ID, mSlotId); 4879d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project args.putInt(StkAppService.RES_ID, resId); 4889d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project args.putInt(StkAppService.MENU_SELECTION, itemId); 4899d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project args.putBoolean(StkAppService.HELP, help); 4909d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mContext.startService(new Intent(mContext, StkAppService.class) 4919d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project .putExtras(args)); 4929d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4939d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project} 494