Advertisement
hungson175

AppWidgetHost sample

Jun 5th, 2014
618
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.64 KB | None | 0 0
  1. package phs.learning.widgets;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import phs.learning.R;
  6. import android.app.Activity;
  7. import android.appwidget.AppWidgetHost;
  8. import android.appwidget.AppWidgetHostView;
  9. import android.appwidget.AppWidgetManager;
  10. import android.appwidget.AppWidgetProviderInfo;
  11. import android.content.Intent;
  12. import android.os.Bundle;
  13. import android.view.View;
  14. import android.view.View.OnClickListener;
  15. import android.view.View.OnLongClickListener;
  16. import android.widget.Button;
  17. import android.widget.LinearLayout;
  18. import android.widget.Toast;
  19.  
  20. public class Exp_WidgetHost extends Activity {
  21.  
  22.     private static final int REQUEST_PICK_APPWIDGET = 128;
  23.     private static final int REQUEST_CREATE_APPWIDGET = 129;
  24.     private AppWidgetManager mAppWidgetManager;
  25.     private AppWidgetHost mAppWidgetHost;
  26.     private LinearLayout rootLayout;
  27.     private Button btPick;
  28.  
  29.     @Override
  30.     protected void onCreate(Bundle savedInstanceState) {
  31.         super.onCreate(savedInstanceState);
  32.         mAppWidgetManager = AppWidgetManager.getInstance(this);
  33.         mAppWidgetHost = new AppWidgetHost(this, R.layout.example_widgethost);
  34.        
  35.         setContentView(R.layout.example_widgethost);
  36.         rootLayout = (LinearLayout) findViewById(R.id.root_layout);
  37.         btPick = (Button) findViewById(R.id.bt_pick);
  38.         btPick.setOnClickListener(new OnClickListener() {
  39.            
  40.             @Override
  41.             public void onClick(View v) {
  42.                 selectWidget();
  43.             }
  44.         });
  45.     }
  46.    
  47.     @Override
  48.     protected void onStart() {
  49.         super.onStart();
  50.         mAppWidgetHost.startListening();
  51.     }
  52.    
  53.     @Override
  54.     protected void onStop() {
  55.         mAppWidgetHost.stopListening();
  56.         super.onStop();
  57.     }
  58.    
  59.     private void selectWidget() {
  60.         int appWidgetId = this.mAppWidgetHost.allocateAppWidgetId();
  61.         Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
  62.         pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
  63.         addEmptyData(pickIntent);
  64.         startActivityForResult(pickIntent, REQUEST_PICK_APPWIDGET);
  65.        
  66.     }
  67.  
  68.     @SuppressWarnings({ "rawtypes", "unchecked" })
  69.     private void addEmptyData(Intent pickIntent) {
  70.         ArrayList customInfo = new ArrayList();
  71.         pickIntent.putParcelableArrayListExtra(AppWidgetManager.EXTRA_CUSTOM_INFO, customInfo);
  72.         ArrayList customExtras = new ArrayList();
  73.         pickIntent.putParcelableArrayListExtra(AppWidgetManager.EXTRA_CUSTOM_EXTRAS, customExtras);
  74.     }
  75.    
  76.     @Override
  77.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  78.         if ( resultCode == RESULT_OK ) {
  79.             if ( requestCode == REQUEST_PICK_APPWIDGET ) {
  80.                 configureWidget(data);
  81.             } else if ( requestCode == REQUEST_CREATE_APPWIDGET ) {
  82.                 createAppWidget(data);
  83.             }
  84.         } else if ( resultCode == RESULT_CANCELED && data != null ) {
  85.             int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
  86.             if ( appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID ) {
  87.                 mAppWidgetHost.deleteAppWidgetId(appWidgetId); //cool ! this is not google fault, this is the fault of the host !
  88.             }
  89.         }
  90.     }
  91.  
  92.     private void configureWidget(Intent data) {
  93.         Bundle extras = data.getExtras();
  94.         int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
  95.         AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
  96.         if ( appWidgetInfo.configure != null ) {
  97.             Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
  98.             intent.setComponent(appWidgetInfo.configure);
  99.             intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
  100.             startActivityForResult(intent, REQUEST_CREATE_APPWIDGET);
  101.         } else {
  102.             createAppWidget(data);
  103.         }
  104.     }
  105.  
  106.     private void createAppWidget(Intent data) {
  107.         Bundle extras = data.getExtras();
  108.         final int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
  109.         AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
  110.         AppWidgetHostView hostView = mAppWidgetHost.createView(getApplicationContext(), appWidgetId, appWidgetInfo);
  111.         hostView.setAppWidget(appWidgetId, appWidgetInfo);
  112.         LinearLayout.LayoutParams params = createLayoutParams(appWidgetInfo);
  113.         rootLayout.addView(hostView, params);
  114.         hostView.setOnLongClickListener(new OnLongClickListener() {
  115.             @Override
  116.             public boolean onLongClick(View v) {
  117.                 Toast.makeText(getApplicationContext(), "Long click " + appWidgetId, Toast.LENGTH_LONG).show();
  118.                 return true;
  119.             }
  120.         });
  121.     }
  122.  
  123.     private android.widget.LinearLayout.LayoutParams createLayoutParams(AppWidgetProviderInfo appWidgetInfo) {
  124.         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(appWidgetInfo.minWidth, appWidgetInfo.minHeight);
  125.         return params;
  126.     }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement