package net.screenfreeze.deskcon; import android.annotation.SuppressLint; import android.app.Activity; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.CursorAdapter; import android.widget.ListView; import android.widget.RemoteViews; import android.widget.Spinner; import android.widget.TextView; public class MediaWidgetConfigActivity extends Activity { private DesktopHostsDBHelper dbhelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.widget_conf_layout); dbhelper = new DesktopHostsDBHelper(this); Intent intent = getIntent(); Bundle extras = intent.getExtras(); final int mAppWidgetId; if (extras != null) { mAppWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } else { mAppWidgetId = 0; } // get All Hosts Cursor cursor = dbhelper.getAllCursor(); int hostcount = cursor.getCount(); if (hostcount == 0) { // Don't create Widget when no Desktops are registered cursor.close(); finish(); } else { ListView hostslistview = (ListView) findViewById(R.id.widgethostslistView); final Spinner playerspinner = (Spinner) findViewById(R.id.playerspinner); final ArrayAdapter<CharSequence> playeradapter = ArrayAdapter.createFromResource(this, R.array.playerarray, android.R.layout.simple_spinner_item); playeradapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); playerspinner.setAdapter(playeradapter); final HostsAdapter hostadapter = new HostsAdapter(this, cursor); hostslistview.setAdapter(hostadapter); hostslistview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { Cursor itemcursor = (Cursor) parent.getItemAtPosition(pos); String hostname = itemcursor.getString(1); Long uuid = itemcursor.getLong(0); itemcursor.close(); int ipos = playerspinner.getSelectedItemPosition(); String player = playeradapter.getItem(ipos).toString(); complete(mAppWidgetId, hostname, uuid, player); } }); } dbhelper.close(); } @SuppressLint("CommitPrefEdits") private void complete(int mAppWidgetId, String hostname, long uuid, String player) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.media_widget); // Build Widget remoteViews.setTextViewText(R.id.widgethosttextView, hostname); remoteViews.setTextViewText(R.id.widgetplayertextView, player); // Register an onClickListener Intent intent = new Intent(getApplicationContext(), MediaWidgetProvider.class); intent.setAction("PLAY"); intent.putExtra("uuid", uuid); intent.putExtra("player", player); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, mAppWidgetId); PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setOnClickPendingIntent(R.id.PlayButton, pendingIntent); intent.setAction("NEXT"); pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setOnClickPendingIntent(R.id.NextButton, pendingIntent); intent.setAction("PREVIOUS"); pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setOnClickPendingIntent(R.id.PrevButton, pendingIntent); appWidgetManager.updateAppWidget(mAppWidgetId, remoteViews); // store widget preferences SharedPreferences prefs = getSharedPreferences("widget_preferences", 0); SharedPreferences.Editor edit = prefs.edit(); edit.putLong("uuid"+mAppWidgetId, uuid); edit.putString("hostname"+mAppWidgetId, hostname); edit.putString("player"+mAppWidgetId, player); edit.commit(); Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, resultValue); finish(); } public class HostsAdapter extends CursorAdapter { @SuppressWarnings("deprecation") public HostsAdapter(Context context, Cursor c) { super(context, c); } @Override public void bindView(View view, final Context context, Cursor cursor) { TextView idtv = (TextView) view.findViewById(R.id.hostidtextView); TextView nametv = (TextView) view.findViewById(R.id.hostnametextView); TextView iptv = (TextView) view.findViewById(R.id.hostiptextView); TextView wifitv = (TextView) view.findViewById(R.id.wifitextView); nametv.setText(cursor.getString(1)); idtv.setText(String.valueOf(cursor.getLong(4))); iptv.setText(cursor.getString(2)); wifitv.setText(cursor.getString(6)); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(R.layout.host_list_row_share, parent, false); return v; } } }