Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package phs.learning.widgets;
- import java.util.ArrayList;
- import phs.learning.R;
- import android.app.Activity;
- import android.appwidget.AppWidgetHost;
- import android.appwidget.AppWidgetHostView;
- import android.appwidget.AppWidgetManager;
- import android.appwidget.AppWidgetProviderInfo;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.View.OnLongClickListener;
- import android.widget.Button;
- import android.widget.LinearLayout;
- import android.widget.Toast;
- public class Exp_WidgetHost extends Activity {
- private static final int REQUEST_PICK_APPWIDGET = 128;
- private static final int REQUEST_CREATE_APPWIDGET = 129;
- private AppWidgetManager mAppWidgetManager;
- private AppWidgetHost mAppWidgetHost;
- private LinearLayout rootLayout;
- private Button btPick;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mAppWidgetManager = AppWidgetManager.getInstance(this);
- mAppWidgetHost = new AppWidgetHost(this, R.layout.example_widgethost);
- setContentView(R.layout.example_widgethost);
- rootLayout = (LinearLayout) findViewById(R.id.root_layout);
- btPick = (Button) findViewById(R.id.bt_pick);
- btPick.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- selectWidget();
- }
- });
- }
- @Override
- protected void onStart() {
- super.onStart();
- mAppWidgetHost.startListening();
- }
- @Override
- protected void onStop() {
- mAppWidgetHost.stopListening();
- super.onStop();
- }
- private void selectWidget() {
- int appWidgetId = this.mAppWidgetHost.allocateAppWidgetId();
- Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
- pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
- addEmptyData(pickIntent);
- startActivityForResult(pickIntent, REQUEST_PICK_APPWIDGET);
- }
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private void addEmptyData(Intent pickIntent) {
- ArrayList customInfo = new ArrayList();
- pickIntent.putParcelableArrayListExtra(AppWidgetManager.EXTRA_CUSTOM_INFO, customInfo);
- ArrayList customExtras = new ArrayList();
- pickIntent.putParcelableArrayListExtra(AppWidgetManager.EXTRA_CUSTOM_EXTRAS, customExtras);
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if ( resultCode == RESULT_OK ) {
- if ( requestCode == REQUEST_PICK_APPWIDGET ) {
- configureWidget(data);
- } else if ( requestCode == REQUEST_CREATE_APPWIDGET ) {
- createAppWidget(data);
- }
- } else if ( resultCode == RESULT_CANCELED && data != null ) {
- int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
- if ( appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID ) {
- mAppWidgetHost.deleteAppWidgetId(appWidgetId); //cool ! this is not google fault, this is the fault of the host !
- }
- }
- }
- private void configureWidget(Intent data) {
- Bundle extras = data.getExtras();
- int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
- AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
- if ( appWidgetInfo.configure != null ) {
- Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
- intent.setComponent(appWidgetInfo.configure);
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
- startActivityForResult(intent, REQUEST_CREATE_APPWIDGET);
- } else {
- createAppWidget(data);
- }
- }
- private void createAppWidget(Intent data) {
- Bundle extras = data.getExtras();
- final int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
- AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
- AppWidgetHostView hostView = mAppWidgetHost.createView(getApplicationContext(), appWidgetId, appWidgetInfo);
- hostView.setAppWidget(appWidgetId, appWidgetInfo);
- LinearLayout.LayoutParams params = createLayoutParams(appWidgetInfo);
- rootLayout.addView(hostView, params);
- hostView.setOnLongClickListener(new OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- Toast.makeText(getApplicationContext(), "Long click " + appWidgetId, Toast.LENGTH_LONG).show();
- return true;
- }
- });
- }
- private android.widget.LinearLayout.LayoutParams createLayoutParams(AppWidgetProviderInfo appWidgetInfo) {
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(appWidgetInfo.minWidth, appWidgetInfo.minHeight);
- return params;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement