StkMenuActivity.java revision e68857da85f6fb0964da9d58a7cbfcc0348065c6
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 } 130e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onListItemClick Id: " + item.id + ", mState: " + mState); 131e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville // ONLY set SECONDARY menu. It will be finished when the following command is comming. 132e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_SECONDARY) { 133e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setPendingActivityInstance(this); 134e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 1359d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(StkAppService.RES_ID_MENU_SELECTION, item.id, false); 1369d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = false; 1379d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mProgressView.setVisibility(View.VISIBLE); 1389d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mProgressView.setIndeterminate(true); 1399d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1409d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 1419d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 1429d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public boolean onKeyDown(int keyCode, KeyEvent event) { 143e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "mAcceptUsersInput: " + mAcceptUsersInput); 1449d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (!mAcceptUsersInput) { 1459d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 1469d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1479d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 1489d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project switch (keyCode) { 1499d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case KeyEvent.KEYCODE_BACK: 150e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "KEYCODE_BACK - mState[" + mState + "]"); 1519d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project switch (mState) { 1529d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case STATE_SECONDARY: 153e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "STATE_SECONDARY"); 1549d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project cancelTimeOut(); 1559d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = false; 156e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setPendingActivityInstance(this); 1579d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(StkAppService.RES_ID_BACKWARD); 1589d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 1599d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case STATE_MAIN: 160e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "STATE_MAIN"); 161e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setMainActivityInstance(null); 162e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville cancelTimeOut(); 163e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville finish(); 164e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville return true; 1659d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1669d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project break; 1679d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1689d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return super.onKeyDown(keyCode, event); 1699d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 1709d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 1719d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 172e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville public void onRestart() { 173e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville super.onRestart(); 174e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onRestart, slot id: " + mSlotId); 175e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 176e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville 177e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville @Override 1789d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public void onResume() { 1799d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onResume(); 1809d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 181e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onResume, slot id: " + mSlotId + "," + mState); 182e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.indicateMenuVisibility(true, mSlotId); 183e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_MAIN) { 184e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mStkMenu = appService.getMainMenu(mSlotId); 185e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 186e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mStkMenu = appService.getMenu(mSlotId); 187e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 1889d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mStkMenu == null) { 189e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "menu is null"); 190e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville cancelTimeOut(); 1919d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project finish(); 1929d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return; 1939d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 194e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //Set main menu instance here for clean up stack by other SIMs 195e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //when receiving OP_LAUNCH_APP. 196e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_MAIN) { 197e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "set main menu instance."); 198e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setMainActivityInstance(this); 199e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 2009d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project displayMenu(); 2019d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project startTimeOut(); 2029d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // whenever this activity is resumed after a sub activity was invoked 20379085fcc5b4e54cc374e8720644ce4c1dc0004beWink Saville // (Browser, In call screen) switch back to main state and enable 2049d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // user's input; 2059d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (!mAcceptUsersInput) { 206e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //Remove set mState to STATE_MAIN. This is for single instance flow. 2079d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = true; 2089d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 20964ec38ec889df7bf757861b02e918c05464cc545w invalidateOptionsMenu(); 210e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville 2119d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // make sure the progress bar is not shown. 2129d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mProgressView.setIndeterminate(false); 2139d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mProgressView.setVisibility(View.GONE); 2149d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 2159d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 2169d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 2179d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public void onPause() { 2189d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onPause(); 219e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onPause, slot id: " + mSlotId + "," + mState); 220e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //If activity is finished in onResume and it reaults from null appService. 221e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (appService != null) { 222e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.indicateMenuVisibility(false, mSlotId); 223e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 224e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onPause: null appService."); 225e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 2269d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project cancelTimeOut(); 2279d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 2289d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 2299d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 230e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville public void onStop() { 231e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville super.onStop(); 232e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onStop, slot id: " + mSlotId + "," + mIsResponseSent + "," + mState); 233e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //The menu should stay in background, if 234e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //1. the dialog is pop up in the screen, but the user does not response to the dialog. 235e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //2. the menu activity enters Stop state (e.g pressing HOME key) but mIsResponseSent is false. 236e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mIsResponseSent) { 237e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville // ONLY finish SECONDARY menu. MAIN menu should always stay in the root of stack. 238e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_SECONDARY) { 239e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (!appService.isStkDialogActivated(mContext)) { 240e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "STATE_SECONDARY finish."); 241e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville cancelTimeOut();//To avoid the timer time out and send TR again. 242e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville finish(); 243e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 244e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (appService != null) { 245e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setPendingActivityInstance(this); 246e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 247e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 248e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 249e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 250e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (appService != null) { 251e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setPendingActivityInstance(this); 252e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 253e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onStop: null appService."); 254e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 255e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 256e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 257e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville 258e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville @Override 2599d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public void onDestroy() { 26082d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas getListView().setOnCreateContextMenuListener(null); 2619d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onDestroy(); 262e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onDestroy" + "," + mState); 263e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //isMenuPending: if input act is finish by stkappservice when OP_LAUNCH_APP again, 264e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville //we can not send TR here, since the input cmd is waiting user to process. 265e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (!mIsResponseSent && !appService.isMenuPending(mSlotId)) { 266e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "handleDestroy - Send End Session"); 267e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville sendResponse(StkAppService.RES_ID_END_SESSION); 268e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 269e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (mState == STATE_MAIN) { 270e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville if (appService != null) { 271e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville appService.getStkContext(mSlotId).setMainActivityInstance(null); 272e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } else { 273e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onDestroy: null appService."); 274e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 275e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville } 2769d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 2779d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 2789d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 2799d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public boolean onCreateOptionsMenu(android.view.Menu menu) { 2809d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onCreateOptionsMenu(menu); 2819d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project menu.add(0, StkApp.MENU_ID_END_SESSION, 1, R.string.menu_end_session); 2829d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project menu.add(0, StkApp.MENU_ID_HELP, 2, R.string.help); 2839d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 2849d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 2859d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 2869d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 2879d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public boolean onPrepareOptionsMenu(android.view.Menu menu) { 2889d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project super.onPrepareOptionsMenu(menu); 2899d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project boolean helpVisible = false; 2909d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project boolean mainVisible = false; 2919d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 2929d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mState == STATE_SECONDARY) { 2939d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mainVisible = true; 2949d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 2959d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mStkMenu != null) { 2969d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project helpVisible = mStkMenu.helpAvailable; 2979d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 2989d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 2999d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project menu.findItem(StkApp.MENU_ID_END_SESSION).setVisible(mainVisible); 3009d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project menu.findItem(StkApp.MENU_ID_HELP).setVisible(helpVisible); 3019d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3029d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 3039d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3049d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3059d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 3069d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 3079d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (!mAcceptUsersInput) { 3089d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 3099d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3109d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project switch (item.getItemId()) { 3119d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case StkApp.MENU_ID_END_SESSION: 3129d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project cancelTimeOut(); 3139d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = false; 3149d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // send session end response. 3159d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(StkAppService.RES_ID_END_SESSION); 316e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville cancelTimeOut(); 317e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville finish(); 3189d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 3199d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project case StkApp.MENU_ID_HELP: 3209d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project cancelTimeOut(); 3219d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mAcceptUsersInput = false; 3229d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project int position = getSelectedItemPosition(); 3239d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project Item stkItem = getSelectedItem(position); 3249d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (stkItem == null) { 3259d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project break; 3269d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3279d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // send help needed response. 3289d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(StkAppService.RES_ID_MENU_SELECTION, stkItem.id, true); 3299d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return true; 3309d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3319d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return super.onOptionsItemSelected(item); 3329d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3339d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3349d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 33582d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas public void onCreateContextMenu(ContextMenu menu, View v, 33682d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas ContextMenuInfo menuInfo) { 33782d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas CatLog.d(this, "onCreateContextMenu"); 33882d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas boolean helpVisible = false; 33982d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas if (mStkMenu != null) { 34082d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas helpVisible = mStkMenu.helpAvailable; 34182d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 34282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas if (helpVisible) { 34382d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas CatLog.d(this, "add menu"); 34482d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas menu.add(0, CONTEXT_MENU_HELP, 0, R.string.help); 34582d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 34682d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 34782d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas 34882d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas @Override 34982d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas public boolean onContextItemSelected(MenuItem item) { 35082d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas AdapterView.AdapterContextMenuInfo info; 35182d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas try { 35282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 35382d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } catch (ClassCastException e) { 35482d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas return false; 35582d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 35682d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas switch (item.getItemId()) { 35782d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas case CONTEXT_MENU_HELP: 35882d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas cancelTimeOut(); 35982d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas mAcceptUsersInput = false; 36082d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas int position = info.position; 36182d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas CatLog.d(this, "Position:" + position); 36282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas Item stkItem = getSelectedItem(position); 36382d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas if (stkItem != null) { 36482d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas CatLog.d(this, "item id:" + stkItem.id); 36582d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas sendResponse(StkAppService.RES_ID_MENU_SELECTION, stkItem.id, true); 36682d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 36782d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas return true; 36882d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas 36982d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas default: 37082d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas return super.onContextItemSelected(item); 37182d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 37282d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas } 37382d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas 37482d3e797c0199237755ec3f8c427e34925c59c6dGuillaume Lucas @Override 3759d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project protected void onSaveInstanceState(Bundle outState) { 376e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onSaveInstanceState: " + mSlotId); 3779d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project outState.putInt("STATE", mState); 3789d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project outState.putParcelable("MENU", mStkMenu); 379e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville outState.putBoolean("ACCEPT_USERS_INPUT", mAcceptUsersInput); 3809d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3819d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3829d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project @Override 3839d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project protected void onRestoreInstanceState(Bundle savedInstanceState) { 384e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "onRestoreInstanceState: " + mSlotId); 3859d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mState = savedInstanceState.getInt("STATE"); 3869d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mStkMenu = savedInstanceState.getParcelable("MENU"); 387e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mAcceptUsersInput = savedInstanceState.getBoolean("ACCEPT_USERS_INPUT"); 3889d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 38979085fcc5b4e54cc374e8720644ce4c1dc0004beWink Saville 3909d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void cancelTimeOut() { 391e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "cancelTimeOut: " + mSlotId); 3929d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTimeoutHandler.removeMessages(MSG_ID_TIMEOUT); 3939d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 3949d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 3959d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void startTimeOut() { 3969d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mState == STATE_SECONDARY) { 3979d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Reset timeout. 3989d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project cancelTimeOut(); 399e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "startTimeOut: " + mSlotId); 4009d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTimeoutHandler.sendMessageDelayed(mTimeoutHandler 4019d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project .obtainMessage(MSG_ID_TIMEOUT), StkApp.UI_TIMEOUT); 4029d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4039d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 40479085fcc5b4e54cc374e8720644ce4c1dc0004beWink Saville 4059d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Bind list adapter to the items list. 4069d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void displayMenu() { 4079d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4089d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mStkMenu != null) { 4093e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd String title = mStkMenu.title == null ? getString(R.string.app_name) : mStkMenu.title; 4109d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Display title & title icon 4119d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mStkMenu.titleIcon != null) { 4129d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTitleIconView.setImageBitmap(mStkMenu.titleIcon); 4139d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTitleIconView.setVisibility(View.VISIBLE); 4143e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd mTitleTextView.setVisibility(View.INVISIBLE); 4153e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd if (!mStkMenu.titleIconSelfExplanatory) { 4163e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd mTitleTextView.setText(title); 4173e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd mTitleTextView.setVisibility(View.VISIBLE); 4183e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd } 4199d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } else { 4209d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTitleIconView.setVisibility(View.GONE); 4219d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mTitleTextView.setVisibility(View.VISIBLE); 4223e34a8ad0ff494f6e5abc618acecdcc075d0be83Pierre Fröjd mTitleTextView.setText(title); 4239d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4249d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // create an array adapter for the menu list 4259d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project StkMenuAdapter adapter = new StkMenuAdapter(this, 4269d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mStkMenu.items, mStkMenu.itemsIconSelfExplanatory); 4279d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Bind menu list to the new adapter. 4289d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project setListAdapter(adapter); 4299d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project // Set default item 4309d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project setSelection(mStkMenu.defaultItem); 4319d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4329d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4339d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4349d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void initFromIntent(Intent intent) { 4359d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4369d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (intent != null) { 4379d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mState = intent.getIntExtra("STATE", STATE_MAIN); 438e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mSlotId = intent.getIntExtra(StkAppService.SLOT_ID, -1); 439e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "slot id: " + mSlotId + ", state: " + mState); 4409d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } else { 441e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "finish!"); 4429d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project finish(); 4439d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4449d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4459d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4469d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private Item getSelectedItem(int position) { 4479d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project Item item = null; 4489d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (mStkMenu != null) { 4499d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project try { 4509d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project item = mStkMenu.items.get(position); 4519d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } catch (IndexOutOfBoundsException e) { 4529d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (StkApp.DBG) { 453e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "IOOBE Invalid menu"); 4549d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4559d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } catch (NullPointerException e) { 4569d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project if (StkApp.DBG) { 457e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "NPE Invalid menu"); 4589d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4599d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4609d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4619d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project return item; 4629d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4639d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4649d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void sendResponse(int resId) { 4659d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project sendResponse(resId, 0, false); 4669d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4679d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project 4689d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project private void sendResponse(int resId, int itemId, boolean help) { 469e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville CatLog.d(LOG_TAG, "sendResponse resID[" + resId + "] itemId[" + itemId + 470e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville "] help[" + help + "]"); 471e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville mIsResponseSent = true; 4729d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project Bundle args = new Bundle(); 4739d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project args.putInt(StkAppService.OPCODE, StkAppService.OP_RESPONSE); 474e68857da85f6fb0964da9d58a7cbfcc0348065c6Wink Saville args.putInt(StkAppService.SLOT_ID, mSlotId); 4759d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project args.putInt(StkAppService.RES_ID, resId); 4769d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project args.putInt(StkAppService.MENU_SELECTION, itemId); 4779d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project args.putBoolean(StkAppService.HELP, help); 4789d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project mContext.startService(new Intent(mContext, StkAppService.class) 4799d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project .putExtras(args)); 4809d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project } 4819d9730aecb72e830ef12d66ce6e084d8ae0928f2The Android Open Source Project} 482