35. Разработка приложений для ОС Android. Настройки для виджета

1) Создаем новый класс Config с суперклассом Activity
2) Добавляем в манифест в контейнер application

        <activity android:name=".Config">
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
            </intent-filter>
        </activity>

3) В widget.xml атрибуту Configure ставим значение com.example.mywidget.Config
4) Создаем новый XML файл config.xml с типом ресурса Layout и корневым элементом RelativeLayout
5) Добавим в config.xml кнопку и поле для ввода текста с значением по умолчанию http://google.com. Это будет окно ввода настроек.
6) В Config.java вводим код:

package com.example.mywidget;

import android.app.Activity;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RemoteViews;
import android.widget.RemoteViews.RemoteView;

public class Config extends Activity {

    private Config context;
    private int widgetId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.config);
        // для того чтобы обрабатывать исключения когда пользователь сбрасывает настройки
        setResult(RESULT_CANCELED); 
        context = this;
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
            final AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
            final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
            final EditText edit1 = (EditText) findViewById(R.id.editText1);
            Button but1 = (Button) findViewById(R.id.button1);
            but1.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(edit1.getText().toString()));
                    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
                    views.setOnClickPendingIntent(R.id.imageButton1, pending);
                    widgetManager.updateAppWidget(widgetId, views);
                    Intent resultValue = new Intent();
                    resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
                    setResult(RESULT_OK, resultValue);
                    finish();
                }
            });
        }
    }
    
}