Home | History | Annotate | Download | only in fdn
      1 /*
      2  * Copyright (C) 2007 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.phone.settings.fdn;
     18 
     19 import android.app.ActionBar;
     20 import android.content.Intent;
     21 import android.content.res.Resources;
     22 import android.net.Uri;
     23 import android.os.Bundle;
     24 import android.view.Menu;
     25 import android.view.MenuItem;
     26 import android.view.View;
     27 import android.widget.ListView;
     28 
     29 import com.android.phone.ADNList;
     30 import com.android.phone.R;
     31 import com.android.phone.SubscriptionInfoHelper;
     32 
     33 /**
     34  * Fixed Dialing Number (FDN) List UI for the Phone app. FDN is a feature of the service provider
     35  * that allows a user to specify a limited set of phone numbers that the SIM can dial.
     36  */
     37 public class FdnList extends ADNList {
     38     private static final int MENU_ADD = 1;
     39     private static final int MENU_EDIT = 2;
     40     private static final int MENU_DELETE = 3;
     41 
     42     private static final String INTENT_EXTRA_NAME = "name";
     43     private static final String INTENT_EXTRA_NUMBER = "number";
     44 
     45     private static final Uri FDN_CONTENT_URI = Uri.parse("content://icc/fdn");
     46     private static final String FDN_CONTENT_PATH_WITH_SUB_ID = "content://icc/fdn/subId/";
     47 
     48     private SubscriptionInfoHelper mSubscriptionInfoHelper;
     49 
     50     @Override
     51     public void onCreate(Bundle icicle) {
     52         super.onCreate(icicle);
     53 
     54         ActionBar actionBar = getActionBar();
     55         if (actionBar != null) {
     56             // android.R.id.home will be triggered in onOptionsItemSelected()
     57             actionBar.setDisplayHomeAsUpEnabled(true);
     58         }
     59 
     60         mSubscriptionInfoHelper = new SubscriptionInfoHelper(this, getIntent());
     61         mSubscriptionInfoHelper.setActionBarTitle(
     62                 getActionBar(), getResources(), R.string.fdn_list_with_label);
     63     }
     64 
     65     @Override
     66     protected Uri resolveIntent() {
     67         Intent intent = getIntent();
     68         intent.setData(getContentUri(mSubscriptionInfoHelper));
     69         return intent.getData();
     70     }
     71 
     72     @Override
     73     public boolean onCreateOptionsMenu(Menu menu) {
     74         super.onCreateOptionsMenu(menu);
     75 
     76         Resources r = getResources();
     77 
     78         // Added the icons to the context menu
     79         menu.add(0, MENU_ADD, 0, r.getString(R.string.menu_add))
     80                 .setIcon(android.R.drawable.ic_menu_add);
     81         menu.add(0, MENU_EDIT, 0, r.getString(R.string.menu_edit))
     82                 .setIcon(android.R.drawable.ic_menu_edit);
     83         menu.add(0, MENU_DELETE, 0, r.getString(R.string.menu_delete))
     84                 .setIcon(android.R.drawable.ic_menu_delete);
     85         return true;
     86     }
     87 
     88     @Override
     89     public boolean onPrepareOptionsMenu(Menu menu) {
     90         super.onPrepareOptionsMenu(menu);
     91         boolean hasSelection = (getSelectedItemPosition() >= 0);
     92 
     93         menu.findItem(MENU_ADD).setVisible(true);
     94         menu.findItem(MENU_EDIT).setVisible(hasSelection);
     95         menu.findItem(MENU_DELETE).setVisible(hasSelection);
     96 
     97         return true;
     98     }
     99 
    100     @Override
    101     public boolean onOptionsItemSelected(MenuItem item) {
    102         switch (item.getItemId()) {
    103             case android.R.id.home:  // See ActionBar#setDisplayHomeAsUpEnabled()
    104                 Intent intent = mSubscriptionInfoHelper.getIntent(FdnSetting.class);
    105                 intent.setAction(Intent.ACTION_MAIN);
    106                 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    107                 startActivity(intent);
    108                 finish();
    109                 return true;
    110 
    111             case MENU_ADD:
    112                 addContact();
    113                 return true;
    114 
    115             case MENU_EDIT:
    116                 editSelected();
    117                 return true;
    118 
    119             case MENU_DELETE:
    120                 deleteSelected();
    121                 return true;
    122         }
    123 
    124         return super.onOptionsItemSelected(item);
    125     }
    126 
    127     @Override
    128     public void onListItemClick(ListView l, View v, int position, long id) {
    129         // TODO: is this what we really want?
    130         editSelected(position);
    131     }
    132 
    133     private void addContact() {
    134         //If there is no INTENT_EXTRA_NAME provided, EditFdnContactScreen treats it as an "add".
    135         Intent intent = mSubscriptionInfoHelper.getIntent(EditFdnContactScreen.class);
    136         startActivity(intent);
    137     }
    138 
    139     /**
    140      * Overloaded to call editSelected with the current selection
    141      * by default.  This method may have a problem with touch UI
    142      * since touch UI does not really have a concept of "selected"
    143      * items.
    144      */
    145     private void editSelected() {
    146         editSelected(getSelectedItemPosition());
    147     }
    148 
    149     /**
    150      * Edit the item at the selected position in the list.
    151      */
    152     private void editSelected(int position) {
    153         if (mCursor.moveToPosition(position)) {
    154             String name = mCursor.getString(NAME_COLUMN);
    155             String number = mCursor.getString(NUMBER_COLUMN);
    156 
    157             Intent intent = mSubscriptionInfoHelper.getIntent(EditFdnContactScreen.class);
    158             intent.putExtra(INTENT_EXTRA_NAME, name);
    159             intent.putExtra(INTENT_EXTRA_NUMBER, number);
    160             startActivity(intent);
    161         }
    162     }
    163 
    164     private void deleteSelected() {
    165         if (mCursor.moveToPosition(getSelectedItemPosition())) {
    166             String name = mCursor.getString(NAME_COLUMN);
    167             String number = mCursor.getString(NUMBER_COLUMN);
    168 
    169             Intent intent = mSubscriptionInfoHelper.getIntent(DeleteFdnContactScreen.class);
    170             intent.putExtra(INTENT_EXTRA_NAME, name);
    171             intent.putExtra(INTENT_EXTRA_NUMBER, number);
    172             startActivity(intent);
    173         }
    174     }
    175 
    176     /**
    177      * Returns the uri for updating the ICC FDN entry, taking into account the subscription id.
    178      */
    179     public static Uri getContentUri(SubscriptionInfoHelper subscriptionInfoHelper) {
    180         return subscriptionInfoHelper.hasSubId()
    181                 ? Uri.parse(FDN_CONTENT_PATH_WITH_SUB_ID + subscriptionInfoHelper.getSubId())
    182                 : FDN_CONTENT_URI;
    183     }
    184 
    185 }
    186